使用定时器实现LED每隔一秒闪烁

参考链接:https://zhidao.baidu.com/question/434042328102999604.html
和https://wenku.baidu.com/view/fe63fc0a6d175f0e7cd184254b35eefdc9d31558.html
1.使用定时器实现LED每隔一秒闪烁需要具备的知识:
了解中断允许寄存器IE和定时器/计数器工作模式寄存器TMOD并且知道如何对定时器及中断寄存器做初始化设置,了解机器周期并知道如何计算定时器的初值。
1)中断允许寄存器IE
在这里插入图片描述
中断允许寄存器ie结构——

中断允许控制寄存器分为两层结构,第一级结构为中断允许总控制EA,只 有当EA处于中断允许状态,中断源中断请求才能够得到允许;当EA处于不允许状态时,无论IE寄存器中其他位处于什么状态,中断源中断请求都不会得到允许。

第二级结构为5个中断允许控制位,分别对应5个中断源的中断请求,当对应中断允许控制位为1时,中断源中断请求得到允许。

使用方法——

整体赋值:IE=0x81;(开启全局中断,打开外部中断0)。

单独赋值:EA=1;EX0=1;(开启全局中断,打开外部中断0)。

2)定时器/计数器工作模式寄存器TMOD
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)机器周期
单片机的机器周期=12秒/晶振频率,一个机器周期包含六个状态周期(用S表示)。一个状态周期有两个节拍(用P1、P2表示)。8051系列单片机的一个机器周期同6 个S周期(状态周期)组成。
也就是说一个机器周期=6个状态周期=12个振荡周期(即时钟周期(时钟周期=振荡周期,等于单片机晶振频率的倒数,如常见的外接12M晶振,那它的时钟周期=1/12M。))。

4)计算定时器的初值
(1)可以按定时时间的计算公式, 计算出定时器的时间常数X:
定时时间T=(2的N次方-X)12/单片机晶振频率
(2)N为定时器的工作方式:
方式0时,N=13
方式1时,N=16
方式2时,N=8
(3)根据定时时间和工作方式,计算出时间常数X
把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。
例如: 工作在方式1,定时时间为1000微秒 晶振频率=12MHZ
则 定时时间T=(2的16次方-X)12/12MHZ=1000 解出 X=64536=FC18H

2.以下是使用定时器实现LED每隔一秒闪烁的代码:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
uchar num;
void main()
{
	TMOD=0x01; //设置定时器0位工作模式1(M1, M0位0,1)	
	TH0=(65536-45872)/256; //初值高位,先计算初值,使用11.0592M晶振,定时50ms数为45872
	TL0=(65536-45872)%256;//初值低位
	EA=1; //开总中断
	ET0=1; //开定时器0中断
	TR0=1; //启动定时器0
	while(1)
	{
	 	if(num==20) //如果到了20次,说明到了1秒时间
		{
		  LED1=~LED1; //让发光管状态取反,亮时转灭,灭时转亮
		  num=0; 
		}
	
	}
}
void T0_time()interrupt 1 
{ 
	TH0=(65536-45872)/256; //中断之后重新装载初值 
	TL0=(65536-45872)%256; 
	num++; 
}

之前看到TH0=(65536-45872)/256; 和TL0=(65536-45872)%256;时也有点懵逼,在这里我就简单地提一下吧。
这里的“/”代表除法,运算结果是被除数除以除数得到的商的整数。
"%"表示“求于运算”,运算结果是被除数除以除数后的余数。
256刚好是2的八次方。
/256表示被除数除以256后取整,得到的是被除数写成16位二进制数的高八位。
%256表示被除数除以256后取余数,得到的是被除数写成16位二进制数的低八位。
TH0=(65536-45872)/256;将先求括号内的差,然后取这个差的高八位(通过除以2的八次方得到,除以一次2相当于右移一位)
TL0=(65536-45872)%256;将先求括号内的差,然后取这个差的低八位,即低字节放入TL0

以上就是使用定时器实现LED每隔一秒闪烁所涉及的知识要点和代码啦,希望你可以有所收获哦!

发布了3 篇原创文章 · 获赞 2 · 访问量 79

猜你喜欢

转载自blog.csdn.net/weixin_45870610/article/details/104374799