本实例使用定时器T0的查询方式TF0来控制P2口8位LED的闪烁。要求T0工作于方式1,LED的闪烁周期是100ms,即亮50ms,熄灭50ms。本实例采用的电路原理图如图所示。
实现方法
1)定时器T0工作方式的设置
TMOD=0x01; //即TMOD=0000 0001B,低4位GATE=0,=0,M1M0=01
2)定时器初值的设定
TH0=(65536-46083)/256; //定时器T0的高8位赋初值
TL0=(65536-46083)%256; //定时器T0的高8位赋初值
3)查询方式的实现
定时器T0开始工作后,可通过编程让单片机不断查询溢出标志位TF0是否为“1”。
若为“1”,则表示计时时间到;否则,等待。
代码设计
#include<reg51.h> //包含51单片机寄存器定义的头文件
/**************************************************************
函数功能:主函数
**************************************************************/
void main(void)
{
TMOD=0x01; //TMOD=0000 0001B,使用定时器T0的模式1
TH0=(65536-46083)/256; //定时器T0的高8位赋初值
TL0=(65536-46083)%256; //定时器T0的高8位赋初值
TR0=1; //启动定时器T0
A=0xfe;
P2=A; //先点亮1个LED
while(1) //无限循环
{
while(TF0= =0) //查询标志位是否溢出
; //空操作
TF0=0; //若计时时间到,TF0=1,需用软件将其清0
A=<<1; //数据左移1位
if(A!=0xff)
A=|1; //数据末位置1
else
A=0xfe; //数据置初始值
P2=A; //实现显示
TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值
TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值
}
}