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

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条回答
1158189985
1楼-- · 2019-07-15 13:38
 精彩回答 2  元偷偷看……
变向高手
2楼-- · 2019-07-15 14:20
1158189985 发表于 2015-10-15 18:56
你的这段代码是不是写在中断里的,看看优先级的关系对不对,有可能是所在的中断优先级较高,delay才会不响应。或着查看下delay有没有问题,

我的delay延时取10ms时就没问题,延时时间长一点的话程序就死在if语句里,我的u16IRrepeatcnt是根据相邻两个下降沿的时间来判断的,遥控器长按时,会在一个正常码后面跟许多个连续的repeatcode,每个repeatcode的周期是108ms,我们是根据repeatcode的码头的相邻两个下降沿等于11.25ms就认为是一个repeatcode,这时u16IRrepeatcnt计数器就加1。首先一个正常码后延时100ms响一声,然后每接收到两个repeatcode时,延时100ms蜂鸣器响一声并做出调光动作。delay是没问题的,我是通过对u16IRrepeatcnt计数器是偶数来认为是每隔两个repeatcode做动作的 请问问题出在哪里呢?
变向高手
3楼-- · 2019-07-15 19:25
枯海赤龙 发表于 2015-10-15 17:13
可以DEBUG一下,看程序到底死在哪里

delay取10ms时就没问题,取100ms就死在if语句的那个地方,怎么处理呢
变向高手
4楼-- · 2019-07-15 23:19
MOPPLAYER 发表于 2015-10-15 15:21
因為沒看到所有Code,只能這樣說HAL_Delay是有優先權順序的,如果你HAL_Delay的級別比當前的觸發還低,會一直卡在這裡

如何处理呢 现在的问题是我要每接收到两个repeatcode时延时100ms蜂鸣器响一声。我如果去掉延时的话就没问题
1158189985
5楼-- · 2019-07-16 00:04
变向高手 发表于 2015-10-15 20:21
我的delay延时取10ms时就没问题,延时时间长一点的话程序就死在if语句里,我的u16IRrepeatcnt是根据相邻两个下降沿的时间来判断的,遥控器长按时,会在一个正常码后面跟许多个连续的repeatcode,每个repeatcode的周期是108ms,我们是根据repeatcode的码头的相邻两个下降沿等于11.25ms就认为是一个repeatcode,这时u16IRre ...

这段程序是写在中断里吧!!!如果是写在中断里的话有可能是中断的时间里,你的程序没有执行完,然后一直卡在这里,你试试把这段代码所在中断的时间延长看看还有没有这个现象。
1158189985
6楼-- · 2019-07-16 05:55
 精彩回答 2  元偷偷看……

一周热门 更多>