51单片机定时器的寄存器:标准的51单片机内部有两个定时器T0 和 T1。
首先要了解定时器的控制寄存器TCON
其次了解定时器工作方式控制寄存器TMOD:
定时器的应用如下:选用定时器T0
第一步:配置TMOD确定工作方式;
第二步:设定定时器定时时间,并给给定时器T0赋值;TH0=? TL0=?
*
注释:比如定时器定时时间设置为20Ms=0.02s,且定时器工作在方式一的模式下,即16位定时器;由 X * 12 / 11059200 =
0.02 得到 X = 18432,则定时器初值 Y = 2^16 - 18432 = 65536 - 18432 = 47104; 转化为 十六进制就是0xB800;则 TH0 = 0xB8; TL0 = 0x00;
第三步:设置TCON,通过给TR0置1启动定时器T0。
第四步:判断TCON寄存器的TF0位是否溢出。
实验名称 :运用定时器定时1s来实现LED的闪烁
//实验名称:是用单片机定时器定时1s使得LED闪烁。
#include <reg52.h>
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
//***主函数***//
void main()
{
unsigned char cnt = 0;
ENLED = 0; //由电路图知道,74HC138的使能端是低电平有效。故赋初值0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
TMOD = 0x01; //设置定时器模式为模式1;
TH0 = 0xB8; //为定时器T0赋初值 0xB800;定时器的定时时间是20Ms(毫秒)
TL0 = 0x00;
TR0 = 1; //启动定时器 T0;
while(1)
{
if(TF0 == 1) //TF0用来判断T0是否溢出。
{
TF0 = 0; //T0溢出后,将中断标志位清0;
TH0 = 0xB8; //给定时器T0重新赋初值;
TL0 = 0x00;
cnt ++; //溢出一次计数值就加1;
if(cnt >= 50) //判断溢出次数是否达到50次。
{
cnt = 0; //溢出达到50次后清0;溢出达到50次说明定时器定时时间达到了 20Ms*50 = 1000Ms = 1s。
LED = ~LED; //达到50次后,LED取反:0--->1 、 1--->0;
}
}
}
}
此次实验中使用了74hc138,三八译码器其Proteus电路仿真图如下:
将Keil中生成的hex文件导入Proteus中运行会发现最右侧小灯以1s的时间间隔不停的闪烁。