#include<reg51.h> //包含 51 单片机寄存器定义的头文件
void main(void)
{
TMOD=0x01;// 使用定时器 T0 的模式 1
TH0=(65536-46083)/256; // 定时器 T0的高 8 位赋初值
TL0=(65536-46083)%256; // 定时器 T0的低 8 位赋初值
TR0=1; // 启动定时器 T0
TF0=0; //清定时器溢出标志位
P2=0xff;
while(1)// 无限循环等待查询
{
while(TF0==0);
TF0=0;
P2=~P2;//按位取反
TH0=(65536-46083)/256; // 定时器 T0 的高 8 位赋初值
TL0=(65536-46083)%256; // 定时器 T0 的低 8 位赋初值
}
}
分析:新的寄存器出现了,它们分别是TMOD、TH0、TL0、TR0、TF0,只要掌握调用顺序就可以玩好定时器了。
实例 43 :用定时器 T1 查询方式控制单片机发出 1KHz 音频
#include<reg51.h> // 包含 51 单片机寄存器定义的头文件
sbit sound=P3^7;
void main(void)
{
TMOD=0x10;// 使用定时器 T1 的模式 1
TH1=(65536-921)/256; // 定时器 T1 的高 8 位赋初值
TL1=(65536-921)%256; // 定时器 T1 的低 8 位赋初值
TR1=1;
TF1=0; // 启动定时器 T1
while(1)// 无限循环等待查询
{
while(TF1==0);
TF1=0;
sound=~sound; // 将 P3.7引脚输出电平取反
TH1=(65536-921)/256; // 定时器 T0的高 8 位赋初值
TL1=(65536-921)%256; // 定时器 T0的低 8 位赋初值
}
}
实例 44:将计数器 T0 计数的结果送 P1 口 8 位 LED 显示
#include<reg51.h> // 包含 51 单片机寄存器定义的头文件
sbit S=P3^4; // 将 S位定义为 P3.4引脚
void main(void)
{
// EA=1; // 开总中断
// 定时器 T0 中断允许
// ET0=1;
TMOD=0x02;// 使用定时器 T0 的模式 2
TH0=256-156; // 定时器 T0的高 8 位赋初值
TL0=256-156; // 定时器 T0 的高 8 位赋初值
TR0=1; // 启动定时器 T0
while(1)// 无限循环等待查询
{
while(TF0==0) // 如果未计满就等待
{
if(S==0) // 按键 S按下接地,电平为 0
P1=TL0; //计数器 TL0加 1 后送 P1口显示
}
TF0=0; // 计数器溢出后,将 TF0清 0
}
}
分析:理论结合实例,效果很好吧。
实例 45:用定时器 T0 的中断控制 1 位 LED 闪烁
#include<reg51.h> // 包含 51 单片机寄存器定义的头文件
sbit D1=P2^0; // 将 D1 位定义为 P2.0引脚
void main(void)
{
EA=1;// 开总中断
ET0=1;// 定时器 T0 中断允许
TMOD=0x01;// 使用定时器 T0 的模式 1