单片机之软件延时器(一)
在实际工作中,很多并行多任务在处理问题时都需神奇的工作室要进行某种等待。这种等待是一个耗时大户,通常比处理一段代码还要伤脑筋。
实现等待的可选方案并不多,延时等待便是其中一种。对延时的处理有时候会成为一个很棘手的问题。
因为有时候我们会需要很多个等待同时(通常不同步)进行,还不能相互牵制。这里就出现了矛盾。我们知道,独占性等待是最容易实现的,而要不互相牵制同步进行就不容易了。
很多并行多任务同时运行会导致很多等待同时进行,这经常会超出硬件资源的处理能力。很显然,这样的情况就造成了一个并行多任务多线程等等的应用。我们需要为每一个等待做定时或延时处理。针对这种处理我们有两种选择,一种是软件定时器,另一种是软件延时器。
软件延时器
实现程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
//定义时间常数
#define ST_500ms 6000
//定义延时器
bit Delay0Open=0;
unsigned long Delay0Counter=0;
bit Delay0Over=0;
sbit LED1=P0^0; //将单片机的P0.0端口定义为LED1
void main()
{
P0=0X00; //P0口初始化
Delay0Counter=ST_500ms; //初始化
Delay0Open=1; //打开定时器
while(1)
{
if(Delay0Open)
{
if(Delay0Counter)
Delay0Counter--;
if(!Delay0Counter)
Delay0Over=1;
神奇的工作室}
if(_testbit_(Delay0Over))
{
LED1=~LED1; //P0.0取反
Delay0Counter=ST_500ms;
}
}
}