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

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的时间间隔不停的闪烁。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值