定时器的应用
第一步:设置特殊功能寄存器 TMOD,配置好工作模式。 第二步:设置计数寄存器 TH0 和 TL0 的初值。 第三步:设置 TCON,通过 TR0 置 1 来让定时器开始计数。 第四步:判断 TCON 寄存器的 TF0 位,监测定时器溢出情况。下面的程序是数码管示数的显示,用到了定时器
#include<reg52.h>
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit ENLED = P1^1;
unsigned char code LedChar[]={
0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
void main()
{
unsigned char cnt = 0; //记录T0中断次数
unsigned char sec = 0; //记录经过的秒数
ENLED = 0; //使能 U3,选择数码管 DS1
P23 = 1;
P22 = 0;
P21 = 0;
P20 = 0;
TMOD = 0x01; //设置 T0 为模式 1
TH0 = 0xB8; //为 T0 赋初值 0xB800
TL0 = 0x00;
TR0 = 1; //启动 T0
while(1)
{
if(TF0 == 1) //判断 T0 是否溢出
{
TF0 = 0; //T0 溢出后,清零中断标志
TH0 = 0xB8;
TL0 = 0x00;
cnt++;
if(cnt >= 50) //判断 T0 溢出是否达到 50 次
{
cnt = 0;
P0 = LedChar[sec]; //当前秒数对应的真值表中的值送到 P0 口
sec++;
if(sec >= 16)
{
sec = 0;
}
}
}
}
}
|