找回密码
 立即注册
查看: 496|回复: 11

求助!!!使用外部中断计算时间差

[复制链接]

该用户从未签到

5

主题

18

回帖

85

积分

注册会员

积分
85
发表于 2023-8-4 15:58:18 | 显示全部楼层 |阅读模式
使用试验箱9.6

使用外部中断检测蜂鸣片模块接口的有效信号,时间周期1us,从第一个信号开始计数,检测到第二个有效信号记录下时间,以此类推记录下其余两个时间,记录完毕后,算出时间差,然后根据算法推导出震动点的位置。

INT0-->蜂鸣片模块1
INT1-->蜂鸣片模块2

INT2-->蜂鸣片模块3

INT3-->蜂鸣片模块4

恩一切看起来都很简单,啊哈哈。但是这个程序怎么实现啊,外部中断这里面用IF判断INT0、1、2、3的话实现不鸟啊!!!!

蜂鸣片模块

蜂鸣片模块



呜呜呜~,大神球球帮我写个中断检测函数吧


算法1

算法1

算法2

算法2

回复 送花

使用道具 举报

该用户从未签到

5

主题

18

回帖

85

积分

注册会员

积分
85
 楼主| 发表于 2023-8-4 16:56:57 | 显示全部楼层
外部中断函数,不能嵌套定时函数,怎么能实现外部信号来时开始计数
屏幕截图 2023-08-04 165514.png
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9497

回帖

1万

积分

管理员

积分
14071
发表于 2023-8-4 17:19:06 | 显示全部楼层
STC8H8K64U ?  STC32G12K128 ?   用PWM 测量 ?
1.png

2.png

回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

3043

回帖

6859

积分

超级版主

积分
6859
发表于 2023-8-4 17:37:42 | 显示全部楼层
用外中断处理会有延时,建议使用PWM的捕获方式。
03-PWMA-4个捕获通道

04-PWMB-4个捕获通道

STC8H系列-高级PWM相关程序.rar (2.02 MB, 下载次数: 27)

回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

18

回帖

85

积分

注册会员

积分
85
 楼主| 发表于 2023-8-4 21:01:14 | 显示全部楼层
本帖最后由 此生无悔 于 2023-8-4 21:02 编辑
梁工 发表于 2023-8-4 17:37
用外中断处理会有延时,建议使用PWM的捕获方式。
03-PWMA-4个捕获通道

这个我不太会使用,还没深入学习这种算法
我用了这种办法4路中断计时,你看看可以吗
//---------------检测中断信号,将计时标志置1,开始计时-------------------                        
                                if(INT0 == 1)                        //检测到中断0信号
                                {
                                        Run_State1 = !Run_State1;
                                }
                                else if( INT1 == 1 )
                                {
                                        Run_State2 = !Run_State2;
                                }
                                else if( INT2 == 1 )
                                {
                                        Run_State3 = !Run_State3;
                                }
                                else if( INT3 == 1 )
                                {
                                        Run_State4 = !Run_State4;
                                }
                                       
                                       
                        }
                }
               
        }
}

void delay_ms(u16 ms)
{
        u16 i;
        do
        {
                i=MAIN_Fosc/60000;
                while(--i);
        }
        while(--ms);
}        

void Timer0_Isr(void) interrupt 1        //每隔1us执行一次
{
        
        if( Run_State1 == 1 )                //检测到震动
        {
                TimCount1++;
        }
}

demo.c

4.39 KB, 下载次数: 25

点评

不可以,定时器1us中断一次,MCU会被拖死,做不了事啦!  详情 回复 发表于 2023-8-4 21:34
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

3043

回帖

6859

积分

超级版主

积分
6859
发表于 2023-8-4 21:34:42 | 显示全部楼层
此生无悔 发表于 2023-8-4 21:01
这个我不太会使用,还没深入学习这种算法
我用了这种办法4路中断计时,你看看可以吗
//--------- ...

不可以,定时器1us中断一次,MCU会被拖死,做不了事啦!
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

18

回帖

85

积分

注册会员

积分
85
 楼主| 发表于 2023-8-4 21:41:09 | 显示全部楼层
梁工 发表于 2023-8-4 21:34
不可以,定时器1us中断一次,MCU会被拖死,做不了事啦!

那改成100us能行吗

点评

20us就可以了。  详情 回复 发表于 2023-8-4 23:54
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

3043

回帖

6859

积分

超级版主

积分
6859
发表于 2023-8-4 23:54:18 | 显示全部楼层

20us就可以了。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

18

回帖

85

积分

注册会员

积分
85
 楼主| 发表于 2023-8-5 14:50:56 | 显示全部楼层

我去,这个STC32G12K128为社么引脚INT0、1、2、3是输出高电平

程序白写了

点评

输出什么电平是你的程序的事啊!!!  详情 回复 发表于 2023-8-5 15:12
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

3043

回帖

6859

积分

超级版主

积分
6859
发表于 2023-8-5 15:12:09 | 显示全部楼层
此生无悔 发表于 2023-8-5 14:50
我去,这个STC32G12K128为社么引脚INT0、1、2、3是输出高电平

程序白写了 ...

输出什么电平是你的程序的事啊!!!
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-19 00:47 , Processed in 0.074638 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表