此生无悔 发表于 2023-8-4 15:58:18

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

使用试验箱9.6

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

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

INT2-->蜂鸣片模块3

INT3-->蜂鸣片模块4

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



呜呜呜~,大神球球帮我写个中断检测函数吧{:4_184:}{:4_184:}




此生无悔 发表于 2023-8-4 16:56:57

外部中断函数,不能嵌套定时函数,怎么能实现外部信号来时开始计数

神农鼎 发表于 2023-8-4 17:19:06

STC8H8K64U ?STC32G12K128 ?   用PWM 测量 ?




梁工 发表于 2023-8-4 17:37:42

用外中断处理会有延时,建议使用PWM的捕获方式。
03-PWMA-4个捕获通道

04-PWMB-4个捕获通道



此生无悔 发表于 2023-8-4 21:01:14

本帖最后由 此生无悔 于 2023-8-4 21:02 编辑

梁工 发表于 2023-8-4 17:37
用外中断处理会有延时,建议使用PWM的捕获方式。
03-PWMA-4个捕获通道


这个我不太会使用,还没深入学习这种算法{:4_167:}
我用了这种办法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++;
      }
}

梁工 发表于 2023-8-4 21:34:42

此生无悔 发表于 2023-8-4 21:01
这个我不太会使用,还没深入学习这种算法
我用了这种办法4路中断计时,你看看可以吗
//--------- ...

不可以,定时器1us中断一次,MCU会被拖死,做不了事啦!

此生无悔 发表于 2023-8-4 21:41:09

梁工 发表于 2023-8-4 21:34
不可以,定时器1us中断一次,MCU会被拖死,做不了事啦!

{:4_181:}那改成100us能行吗

梁工 发表于 2023-8-4 23:54:18

此生无悔 发表于 2023-8-4 21:41
那改成100us能行吗

20us就可以了。

此生无悔 发表于 2023-8-5 14:50:56

梁工 发表于 2023-8-4 23:54
20us就可以了。

我去,这个STC32G12K128为社么引脚INT0、1、2、3是输出高电平
{:4_184:}
程序白写了

梁工 发表于 2023-8-5 15:12:09

此生无悔 发表于 2023-8-5 14:50
我去,这个STC32G12K128为社么引脚INT0、1、2、3是输出高电平

程序白写了 ...

输出什么电平是你的程序的事啊!!!
页: [1] 2
查看完整版本: 求助!!!使用外部中断计算时间差