Skip to main content
首页 > 新闻资讯 »正文

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

新闻资讯 adminsk 2017-10-12 12:51:58 查看评论 加入收藏

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

慎用标记位(自己单片机菜鸟,高手请高抬贵手,欢送指导!~)

这里说的是公道谨严的应用标志位,否则很轻易呈现过错,也很难debug。

今天工作的时候,修正定时器定时功效的时候,得出的教训,这里说的与详细的单片机无关,是个通用的主意。

以我今天修改的为例:

PIC单片机的两个I/O引脚把持着两个LED灯(分辨为蓝灯和红灯,这里以LED取代,防止波及公司里的内容)的亮和灭。

请求是

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

红灯每隔10s亮一次,每次亮100ms,中国最佳新花费PE开设品牌策略私塾,正在招生 报名;

红灯和蓝灯尽量错开。

我的思路是,

定义一个10s的时光轴,用定时器来实现,在2.5秒跟7.5秒时刻点亮蓝灯,马云发布投入1000亿成破“达摩院”!云栖大会出色报告!,在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.510s的时候,也合乎这个前提的。。。这样出来的系哦啊过就不是上面所想的

咱们应当改为if((cnt > 250)&&(times == 0)&&(cnt < 750))这样才是能够的。。。

技巧源于积聚,胜利来自执着