历史上的今天
返回首页

历史上的今天

今天是:2024年11月20日(星期三)

正在发生

2018年11月20日 | 单片机日常系列!今天我在修改定时器定时功能...

2018-11-20 来源:eefocus

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


这里说的是合理谨慎的运用标志位,否则很容易出现错误,也很难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))这样才是可以的。。。


推荐阅读

史海拾趣

比亚迪(BYD)公司的发展小趣事

进入21世纪,新能源汽车市场逐渐兴起。比亚迪凭借在电池领域的深厚积累,果断转型进入新能源汽车领域。2000年,比亚迪推出了全球第一款纯电动乘用车——比亚迪e6,这一创新产品引起了市场的广泛关注。此后,比亚迪不断加大对新能源汽车的研发和生产投入,推出了多款具有竞争力的新能源汽车产品。同时,比亚迪还积极涉足光伏和LED照明等其他领域,不断拓展其电子业务版图。

ALLIED [Allied Electronics]公司的发展小趣事

随着国内市场的逐步稳定,比亚迪开始将目光投向海外市场。1998年,比亚迪在欧洲荷兰成立了第一家海外分公司,这是其全球化战略的重要一步。随后,比亚迪相继在香港和美国设立分公司,进一步扩大了其国际影响力。这些海外分公司的成立不仅为比亚迪带来了更多的商机,也使其能够更好地了解和学习国际先进技术和市场经验。通过全球化的布局,比亚迪逐渐在电子行业树立了良好的品牌形象。

Electro-Films Inc Semi-Films Div公司的发展小趣事

在竞争激烈的电子行业中,持续的研发和创新是企业生存和发展的关键。Semi-Films Division 深知这一点,因此始终将研发和创新作为公司的核心竞争力。公司投入大量资金和资源用于新技术和新产品的研发,不断推出具有更高性能、更低成本的产品来满足市场的需求。这些创新产品不仅为公司带来了丰厚的利润,也提升了公司在行业中的地位和影响力。

FerriShield公司的发展小趣事

随着技术的成熟和市场的认可,FerriShield开始拓展产品线。公司研发团队不断改进和优化原始的铁磁屏蔽材料,并推出了针对不同应用场景的系列产品。例如,针对智能手机和平板电脑的轻薄型电磁屏蔽膜,以及针对大型数据中心的高效电磁屏蔽板。这些新产品的推出,使得FerriShield的市场份额逐步扩大。

Future Designs, Inc. (FDI)公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,FDI实施了国际化战略。他们积极拓展海外市场,与多个国家和地区的客户建立了合作关系。通过参加国际展会、设立海外分支机构等方式,FDI不断提升品牌知名度和影响力。同时,他们还加强与当地供应商和合作伙伴的合作,共同开拓市场,实现互利共赢。这些努力使得FDI在全球电子行业中的地位日益稳固。

Axon' Cable公司的发展小趣事

品质是Axon' Cable公司的生命线。公司始终坚持以客户需求为导向,不断提升产品品质和服务水平。Axon' Cable建立了完善的质量管理体系,并通过了多项国际认证。同时,公司还注重持续改进和创新,不断优化生产流程和提高生产效率。这些努力使得Axon' Cable的产品在品质上始终保持领先地位,赢得了客户的信任和好评。

这些故事虽然无法涵盖Axon' Cable公司发展的全部细节,但试图展现了其在电子行业中的成长轨迹和取得的成就。通过这些故事,我们可以看到Axon' Cable公司凭借其坚定的信念、不懈的努力和创新精神,在电子行业中不断发展壮大,成为了一家具有全球影响力的知名企业。

问答坊 | AI 解惑

定时器为什么不中断了

  各位哥哥哥姐这个程序第一次启动定时器可以正常运行,第二次启动定时器就不中断了,小弟初学单片机,实在是找不出原因了。   ORG 0000H   LJMP START   MORG 000BH   LJMP TIMER1 ;定时器1的中断处理   ORG 30H START: &nbs ...…

查看全部问答>

读《把时间当作朋友》(一):所有人的困境

虽说越来越多的人把时间花在网络上,但静静地读一本好书,从中获得的不仅仅是书本身,而是一种心灵暂时的宁静。 李笑来,这个名字对于那些考过托福、GRE的人并不陌生,这位前新东方的老师著有一些应试的畅销书。而对于我这个从没想过出国的人来说 ...…

查看全部问答>

下述代码用VC能编译通过,用ads1.2编译器则不行,错误提示:Serious error: C2432E: non-constant initialiser

#define BYTE unsigned char #define WORD unsigned short int #define DWORD unsigned int #define SDWORD signed int #define SBYTE signed char #define SWORD signed short int static SWORD neg_pow2[17]={0,-1,-3,-7,-15,-31,-63,-12 ...…

查看全部问答>

怎么读出单片机里的代码?

SynCmos公司的 SM8958AC25P单片机。我要读出里面的代码。什么编程器支持这块芯片的代码读取?各位推荐一些好吧。…

查看全部问答>

udp发送文件问题

请问各位大侠,在vc下,可以用udp发送数据流吗,我现在只会发送字符串,要想发送文件该怎么实现呢?…

查看全部问答>

EVC中动态改变静态文本控件颜色

请教一个EVC中动态改变静态文本控件颜色的问题;     现在正在开发一个基于WinCE.net4.2平台的应用程序,用EVC开发一个MFC应用程序。 碰到的问题是:我在对话框中依次排列了四个静态文本控件,ID分别为IDC_STATIC1,IDC_STATIC2,IDC_STA ...…

查看全部问答>

想用STM32的FSMC挂普通单色液晶遇到的问题?

                                 液晶的数据线不是三态的,所以直接挂在FSMC的总线上是肯定不行了,不知道要怎么处理才即可以保持FSMC总线上其他器 ...…

查看全部问答>

请教版主,STM8S103F单片机AD采样扫描模式

                                 请教版主,STM8S103F单片机AD的模拟输入通道为AIN2~AIN6,如果需要使用AD扫描采样的话,能不能从AIN2开始扫描。…

查看全部问答>

【问TI】 C6713中MCBSP实现SPI模式的具体步骤有哪些?求教

【问TI】 C6713中MCBSP实现SPI模式的具体步骤有哪些?求教…

查看全部问答>

ADC检测值异样问题

我的单通道多次转换AD,已经有软件的平滑滤波,但是检测大于1V的信号是显示低于1V接近1V              检测200mV的信号显示0.956~0.542之间不断波动,总之是与实际值相差较大,检测2V以上信号时 ...…

查看全部问答>