怎么利用计数器来编写一个延时函数 求代码

2019-07-14 21:45发布

本帖最后由 变向高手 于 2015-10-17 22:14 编辑

if (u16IRrepeatcnt %2 == 0)
{
HAL_Delay(100);
u8IR_Bluzzer_State = 1;
Bluzzer_Counter = 1000;
vcalc(20,15)
}


u8IR_Bluzzer_State = 1;Bluzzer_Counter = 1000;是蜂鸣器响50ms的动作 ;vcalc(20,15)是调光动作。


u16IRrepeatcnt 一直在计数,每接收两个u16IRrepeatcnt后延时100ms蜂鸣器响一声并作出调光动作。

为什么在if语句中调用Delay()函数后,后面的语句就不执行了?
更多 0
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
鸿宇
1楼-- · 2019-07-15 00:43
定时器实现单位时间的中断(比如1ms),在中断处理函数里面实现1ms的累加,作为系统时钟,通过系统时钟的时间点来延时。
枫凌94
2楼-- · 2019-07-15 00:54
 精彩回答 2  元偷偷看……
变向高手
3楼-- · 2019-07-15 05:50
1158189985 发表于 2015-10-14 19:45
你用的不是STM32么?它是有自己的延时函数的,你可以根据自己的要求调用他的函数啊,或者简单的对它的延时函数进行修改啊!!!

能帮我看看这个程序哪里出问题了吗

if (u16IRrepeatcnt %2 == 0)
{
HAL_Delay(100);
u8IR_Bluzzer_State = 1;
Bluzzer_Counter = 1000;
vcalc(20,15)
}


u8IR_Bluzzer_State = 1;Bluzzer_Counter = 1000;是蜂鸣器响50ms的动作 ;vcalc(20,15)是调光动作。


u16IRrepeatcnt 一直在计数,每接收两个u16IRrepeatcnt后延时100ms蜂鸣器响一声并作出调光动作。

为什么在if语句中调用Delay()函数后,后面的语句就不执行了?
变向高手
4楼-- · 2019-07-15 06:20
鸿宇 发表于 2015-10-14 20:16
定时器实现单位时间的中断(比如1ms),在中断处理函数里面实现1ms的累加,作为系统时钟,通过系统时钟的时间点来延时。

能帮我看看这个程序哪里出问题了吗

if (u16IRrepeatcnt %2 == 0)
{
HAL_Delay(100);
u8IR_Bluzzer_State = 1;
Bluzzer_Counter = 1000;
vcalc(20,15)
}


u8IR_Bluzzer_State = 1;Bluzzer_Counter = 1000;是蜂鸣器响50ms的动作 ;vcalc(20,15)是调光动作。


u16IRrepeatcnt 一直在计数,每接收两个u16IRrepeatcnt后延时100ms蜂鸣器响一声并作出调光动作。

为什么在if语句中调用Delay()函数后,后面的语句就不执行了?
MOPPLAYER
5楼-- · 2019-07-15 09:01
因為沒看到所有Code,只能這樣說HAL_Delay是有優先權順序的,如果你HAL_Delay的級別比當前的觸發還低,會一直卡在這裡
枯海赤龙
6楼-- · 2019-07-15 11:33
可以DEBUG一下,看程序到底死在哪里

一周热门 更多>