Keil C51单片机的定时器的应用。

51单片机定时器的寄存器:标准的51单片机内部有两个定时器T0 和 T1。
首先要了解定时器的控制寄存器TCON
Keil C51单片机的定时器的应用。_第1张图片
Keil C51单片机的定时器的应用。_第2张图片
其次了解定时器工作方式控制寄存器TMOD:
Keil C51单片机的定时器的应用。_第3张图片
定时器的应用如下:选用定时器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 

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 C51单片机的定时器的应用。_第4张图片
将Keil中生成的hex文件导入Proteus中运行会发现最右侧小灯以1s的时间间隔不停的闪烁。

你可能感兴趣的:(单片机,c语言,51单片机,proteus)