求助!!!使用外部中断计算时间差
使用试验箱9.6使用外部中断检测蜂鸣片模块接口的有效信号,时间周期1us,从第一个信号开始计数,检测到第二个有效信号记录下时间,以此类推记录下其余两个时间,记录完毕后,算出时间差,然后根据算法推导出震动点的位置。
INT0-->蜂鸣片模块1
INT1-->蜂鸣片模块2
INT2-->蜂鸣片模块3
INT3-->蜂鸣片模块4
恩一切看起来都很简单,啊哈哈。但是这个程序怎么实现啊,外部中断这里面用IF判断INT0、1、2、3的话实现不鸟啊!!!!
呜呜呜~,大神球球帮我写个中断检测函数吧{:4_184:}{:4_184:}
外部中断函数,不能嵌套定时函数,怎么能实现外部信号来时开始计数
STC8H8K64U ?STC32G12K128 ? 用PWM 测量 ?
用外中断处理会有延时,建议使用PWM的捕获方式。
03-PWMA-4个捕获通道
04-PWMB-4个捕获通道
本帖最后由 此生无悔 于 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:01
这个我不太会使用,还没深入学习这种算法
我用了这种办法4路中断计时,你看看可以吗
//--------- ...
不可以,定时器1us中断一次,MCU会被拖死,做不了事啦! 梁工 发表于 2023-8-4 21:34
不可以,定时器1us中断一次,MCU会被拖死,做不了事啦!
{:4_181:}那改成100us能行吗 此生无悔 发表于 2023-8-4 21:41
那改成100us能行吗
20us就可以了。 梁工 发表于 2023-8-4 23:54
20us就可以了。
我去,这个STC32G12K128为社么引脚INT0、1、2、3是输出高电平
{:4_184:}
程序白写了 此生无悔 发表于 2023-8-5 14:50
我去,这个STC32G12K128为社么引脚INT0、1、2、3是输出高电平
程序白写了 ...
输出什么电平是你的程序的事啊!!!
页:
[1]
2