Mkdm的单片机学习日记:定时器

5.2 定时器的学习

5.2.1 定时器的基本认识

首先,时钟周期与机器周期是两个不同的概念

时钟周期:晶振是11.0592Mhz,时钟周期为1/11059200s

机器周期:在51标准架构下,一个机器周期是12个时钟周期,即12/11059200s

注意:定时器与计数器其实是单片机内部的同一个模块,通过配置SFR来实现切换

5.2.2 定时器的寄存器

标准51单片机中有两个定时器:T0和T1

定时器需要有特殊功能的寄存器来控制即SFR来控制(这些寄存器与P0相同,都是SFR,里面也都有8位,也都有自己的地址)

以下的寄存器名字,地址以及功能不需要背会,只需在datasheet上查找即可

存储定时器计数值的寄存器:

对于0定时器,有两个八位的寄存器,第一个LOW满了255以后就去TH(high)进一,知道65535溢出

TCON:控制定时器的寄存器:

对于定时器0:TR0=1意味着定时器每经过一个机器周期就要++

TR0=0意味着定时器停止加一

TF0是一个标志位,当TH0和TL0都达到255时候加一溢出,TF0变成1,指示溢出了

TMOD:定时器模式寄存器:

TMOD这个sfr里有8位,4位是定时器0的,4位是定时器1的

GATE位是门控,下面再说

C/T位可以选择计数器与定时器的切换,一般我们研究定时器都置0

M0和M1这两位来决定工作模式,其中0和3几乎不用,不说

当01时:是一个16位定时器

当10时:有重装功能的8位定时器,当TL到溢出时候,TF(就是TCON里的溢出标志)直接置1

TH里的结果直接copy到TL里面,TL从这个重装以后的结果开始计时

注意:TCON是可以选取其中的一位去赋值,而TMOD不可位寻址去赋值,只能对于这个sfr整体赋值

用这张图来总结一下:开关左边的C/T控制:是计数器还是定时器

下面控制了定时器的开关:首先TR必须取1

然后如果GATE取0那么一定开关导通

如果GATE取1且INT脚取1才能使得开关导通

5.2.3 定时器的应用

要应用定时器使得可以准时去计时,下面是用定时器实现1s闪烁的代码

#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 int cnt;
	
	
	ENLED=0;//这些74HC138的使得LED可以正常变亮的照旧
	ADDR3=1;
	ADDR2=1;
	ADDR1=1;
	ADDR0=0;


	TMOD=0x01;//对工作模式赋值,我们只用了定时器0这一个,它的工作模式为1,即16位定时器
	TH0=0xB8;//对寄存器赋一个初值0xB800,实现了0.02s的计时
	TL0=0x00;
	TR0=1;//启动计时
	

	while(1)
	{
		if(TF0==1)//当到65535溢出时候
		{
			TF0=0;//先将溢出标志改了
			TH0=0xB8;//再次赋初值
			TL0=0x00;
			cnt++;//计数
			if(cnt>=50)//当达到50个0.02s也就是1s时候
			{
				cnt=0;
				LED=~LED;//取反
			}
		}
		
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值