AT89S52定时器2是一个可以实现自动重装载功能的16位定时器,相对于定时器0和定时器1而言有其自身的优势。当然要实现1秒定时,也需要使用循环,因为16时钟,在12M晶振的情况下,最多也只能定时65毫秒左右,下面举例说明:
#include lt;reg52.hgt;
# Define uchar unsigned char
#define uint unsigned int
sbit Led=P0^0; //定义LED位
void Timer2()中断5 //调用定时器2,自动重装载模式
{
static uchar i=0; //定义静态变量i
TF2=0; //定时器2的中断标志要软件清0
i ; //计数标志自加1
if(i==20) //判断是否到1s
{
i=0; //将静态变量清0
Led=~Led; //LED位求反
}
}
void main()
{
RCAP2H=(65536-50000)/256; //重负载成分赋初值
RCAP2L=(65536-50000)256;
ET2=1; //开定时器2中断
EA=1; //开总中断
TR2=1; //开启定时器,并设置为自动重装载模式
while(1);
}
以上程序实现了LED灯1秒亮灭的功能。