×
单片机 > 单片机程序设计 > 详情

单片机日常系列!今天我在修改定时器定时功能...

发布时间:2020-05-26 发布时间:
|

慎用标志位(本人单片机菜鸟,高手请高抬贵手,欢迎指点!~)


这里说的是合理谨慎的运用标志位,否则很容易出现错误,也很难debug。


今天工作的时候,修改定时器定时功能的时候,得出的经验,这里说的与具体的单片机无关,是个通用的想法。


以我今天修改的为例:


PIC单片机的两个I/O引脚控制着两个LED灯(分别为蓝灯和红灯,这里以LED代替,避免涉及公司里的内容)的亮和灭。


要求是


蓝灯每5s亮一次,大概亮100ms;


红灯每隔10s亮一次,每次亮100ms;


红灯和蓝灯尽量错开。


我的思路是,


定义一个10s的时间轴,用定时器来实现,在2.5秒和7.5秒时刻点亮蓝灯,在10s时刻点亮红灯。


有一个全局变量cnt。


定义一个全局变量times = 0。


[cpp] view plain copy print?


0 2.5s 5s 7.5s 10s


|-------------|===|-------------|-------------|===|-------------|+++|


blue blue red


|----times=0------|----------times=1----------|----times=0-----------|


我理所当然的就


每10ms进一次中断


if((cnt > 250)&&(times == 0))


{


times = 1;


blue_led_light_flag = 1;


blue_led_on = 1;


}


if((cnt > 750)&&(times == 1))


{


times = 0;


blue_led_light_flag = 1;


blue_led_on = 1;

}


if(cnt > 1000)


{


red_led_light_flag = 1;


red_led_on = 1;


}


if((cnt > 250)&&(times == 0)) 理所当然的以为这样是可以的,且不知这里有一个bug,因为在7.5-10s的时候,也符合这个条件的。。。这样出来的系哦啊过就不是上面所想的


我们应该改为if((cnt > 250)&&(times == 0)&&(cnt < 750))这样才是可以的。。。


关键字:单片机日  定时器  定时功能 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法