懒猫爱飞

闲扯单片机

0
阅读(2052)

提起单片机,相信对电工的你来说应该不会陌生,是的,它已在这个世界上横行了三四十年了,它还将横行下去。自从它诞生以来,它就神奇的改变着这个世界,带给我们一个又一个的惊喜……

看到那些不懂行的人们带着好奇的眼神拿着单片机产品,或许作为电工的我们会小小的窃喜一下,心里暗想,单片机其实没那么神奇,敲敲代码,或给端口赋值为1或给端口一个低电平而已。当然事实远非如此,每一个产品都凝结着研发者无尽的心血,越是细节的东西越要掏空心思。每一款单片机产品其实可以理解成一个系统,单片机就在这个系统中起着指挥官的作用,指挥官当然要有作战思想,这个作战思想就是下载到单片机的程序。

说起单片机程序,其实也可以把下载到单片机的程序称之为一个系统,当然每一个系统可以包括若干子系统。举个简单的例子,暂且先不考虑单片机型号与振荡频率,现在在它端口上接有三个LED灯,一个按键。我们暂且把它们编号为LED1、LED2、LED3与KEY1。要求编一个程序,实现以下功能:

  • LED1每1秒钟闪烁一次
  • LED2每5秒钟闪烁一次
  • 当有按键按下时LED3状态变换一次

这个要求应该很简单,我们可以有以下几种写法:

1、设置一个时器,1 秒钟时间到就让LED1闪烁一次,5秒钟时间到就让LED2闪烁一次,然后让单片机在没有定时中断时就一直检测按键。假如把这个程序看成一个最简单的系统,那定时器可以看成一个子系统,按键可以看成是一个子系统,定时器子系统中又包括两个任务LED1闪烁,LED2闪烁。而按键子系统中包括一个任务--变换LED3状态,LED3状态的变换属于一个事件触发任务

上面的编程方法没问题,所要求的功能都能实现,但是那样的话,单片机一直在工作,没有喘气的机会,单片机内部都是由CMOS电路搭建,它的运算处理功能,深入内部往细小处看,其实也就是内部CMOS电路的通断,CMOS电路的通断肯定会引起电容的充放电,还有CMOS的关断损耗,所以长此以往,单片机的寿命肯定会大大的缩短。所以可以找另外一种方法,这可能要用到调度器。

2、当然用到调度器,还要设置一个定时器,比如我们可以让定时器每10ms中断一次,为什么设置为10MS,而不设置成1s,这个要看该程序中事件触发的频率,如果是1S查询一闪,可能就会错过按键触,所以时间要定短一些。当然还可以设置几个计时变量,每次定时中断时就让单片机工作起来,检测一下LED灯该不该闪烁,按键有没有按下,也许你用过这种方法,是的这就是简单的时间查询法。虽然这种方法还不能让单片机在没有任务时美美的睡上一大觉,但至小能让单片机有个喘息的机会了。

现在全世界都在提倡低碳、环保、节能,那么我们能不能也让单片机在没有任务时美美的睡一觉呢?答案是肯定的。这个可能人稍微修改一下电路,可以把连接按键的引脚也引到中断源上。

3、顺着这个思路,继续写程序。当有外部中断时,就让单片机检测按键状态,如果没有就找个地睡觉去,当定时时间到,就看一下该哪个灯闪烁了,处理完灯,继续睡觉去。你看,现在单片机轻松多。

方法3虽然好,但可能要用过中断源,如果中断源不够就要考虑方法2了,当然如果任务较多,可能考虑将方法2与3结合起来用这便成了合作式调度了。如果你不放心这样写,可以再加上一些标志量,再加上看门狗,可以加上消息邮箱与消息队列,然后再往深处发掘一点点,写着写着你就发现原来你和程序越来越像世面上流行的这些操作系统了。

随着时间的发展,人们对电子产品的要求越来越高,于是单片机的程序也越来越大,但由于现在晶圆工艺的改进,所以单片机空间也越来越大,可以支持更高级的语言来编写程序,这也大缩短的开发周期,毕竟越是高级的东东越是人性一点点。说过这也许有些电工们想争论一下汇编与高级语言树优属劣了,关于这个懒猫认为不管是黑猫白猫捉住老鼠就是好猫,不管是用汇编还是高级语言或以嵌入式汇编,,只要开发出来的产品性能稳定可靠,,运行良好,用户满意就是好产品。就像是我们电工一样,虽然男性电工占大多数,但无论男女只要能胜任岗位就是最合适的工程师。

好了,先扯这么多吧,改天再扯一下单片机选型的问题。最后再吼一下懒猫的口号:

每天进步一点点,开心多一点^_^