本实验在主函数将led2用软件延时延迟1000ms,在中断里用定时器定时50ms,循环20次,测试软件延迟和定时器延时的区别
#include "reg52.h"
#include <intrins.h>
sbit led = P3^6;
sbit led2=P3^7;
int cnt;
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void timeinit()
{
//1. 配置定时器0工作模式位16位计时
TMOD = 0x01;
//2. 给初值,定一个50ms出来
TL0=0xfe;
TH0=0x4b;
//3. 开始计时
TR0 = 1;
TF0 = 0;
ET0=1;//允许中断一号口开启中断
//开启总中断
EA=1;
}
void main()
{
led=1;
led2=1;
timeinit();
while(1)
{
if(led2==1)
{
led2=~led2;
Delay1000ms();
led2=1;
Delay1000ms();
}
}
}
void Time0hander() interrupt 1
{
cnt++;
//统计爆表的次数
//重新给初值
TL0=0xfe;
TH0=0x4b;
if(cnt == 20){//爆表20次,经过了1s
cnt = 0; //当20次表示1s,重新让cnt从0开始,计算下一次的1s
led = !led;//每经过1s,翻转led的状态
}
}
实验结果
定时器与软件延时
区别在于定时器延时消耗定时器资源,软件延时消耗CPU资源。从结果来看软件延时和定时器延时没有太大差异