LPC21xx C程序的精确延时方法
引言
随着微处理器技术的发展,微处理器不断升级,内核的处理速度越来越快,同时也出现了精确延时的问题。由于ARM7微控制器LPC21xx使用了三级流水线技术,精确延时对开发者特别是初学者带来了一定的难度。下面介绍几种LPC21xx在C程序下实现精确延时的实用方法。
实现延时通常有两种方法:一种是硬件延时,采用定时器/计数器实现精确延时,可以提高CPU的工作效率;另一种是软件延时,这种方法主要采用循环体进行。
1 硬件延时
Philips公司的LPC21xx系列微控制器具有2个32位可编程定时器/计数器,均具有4路捕获、4路比较并输出电路。定时器对外设时钟周期进行计数,在到达指定的定时值时可选择产生中断来执行其他动作。可用作对内部事件进行计数的间隔定时器,或自由运行的定时器,亦
可通过捕获输入实现脉宽调制。LPC21xx系列具有4个32位匹配寄存器。匹配时,可选择产生中断使定时器继续工作、停止或复位。
使PO.7口输出方波的波形。匹配时复位定时器,产生中断使高低电平持续时间均为O.5 s,如图1所示。
在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。从程序的执行效率和稳定性两方面考虑,使用定时器/计数器延时是最佳的方案。但是占用了一个定时器,比较浪费,并且可移植性也比较差。因此,在并非要求精确定时的情况下,一般不建议采用。
2 软件延时
2.1 使用系统函数延时
LPC21xx微控制器可以采用嵌入式操作系统进行任务的管理,如果需要延时可以使用系统的延时函数实现。采用μC/0S-II实时操作系统时,可以使用系统提供的延时函数。
(1)任务延时函数OSTimeDly()。延时长短由指定的时钟节拍数目(O~65535)来确定。调用该函数会使系统进行一次任务调度,去执行下一个优先级最高的任务。任务调用该函数后,一旦规定的时间到了,或有其他任务通过调用OSTimeDlyResume()取消了延时,那么该任务就会立即进入就绪状态。
(2)按时分秒延时函数OSTimeDlyHMSM()。为了更为习惯地使用任务,系统还提供了按时分秒延时函数。此函数可以精确延时到小时、分、秒,调用这个函数可引发一次任务调度。调用函数OSTimeDlyResume()可取消延时,该任务就会立即进入就绪状态。
例如,通过P1.18口控制LEDl,调用OSTimeDlyHMSM()函数进行1 s的延时。代码如下:
评论