失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 定时器/计数器

定时器/计数器

时间:2019-10-24 06:05:02

相关推荐

定时器/计数器

*觉得有用有帮助的评论下,谢谢~

定时器/计数器

定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

工作原理

定时器/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行加1,当计数器发生溢出时,则向CPU发出中断请求,如果是定时模式,则表示定时时间已到,计数模式,则表示所计数值已满。

结构

它由高8位和低8位两个寄存器THxTLx组成。

TMOD是定时器/计数器的工作方式寄存器,即控制它的工作方式。

TCON是控制T0/T1的启动停止设置溢出标志

控制

两个特殊功能寄存器

1、工作方式寄存器TMOD

注:TOMD不可位寻址

①GATE:门控位,GATE=0时,只需要TR0/TR11,就可使定时器/计数器工作;GATE=1时,不仅要满足TR0/TR11,同时还需外部中断引脚INT0/1也为高电平,才能启动定时器/计数器工作。②C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。③M0M1:工作方式设置位。

2、控制寄存器TCON

这些位在上次的中断系统中有写

工作方式

1、方式0

由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

这个模式51单片机一般很少用

2、方式1

由TL0作为低8位,TH0作为高8位,组成了16位加1计数器

计数范围是0~65535,溢出后,只要不重新赋值,则从0开始计数

3、方式2

只有TLx做加1计数,计数范围是0~255,THx的值并不发生变化,而是保持原值,TLx溢出后,TFx就直接置1了,并且THx原先的值直接赋给TLx,然后TLx从新赋值的这个数字开始计数。(该功能可以用来产生串口的通信波特率,即适合做脉冲信号发生器)

4、方式3

只适用于定时器/计数器T0,定时器T1处于方式3相当于TR1=0,停止计数

使用

设置特殊功能寄存器TMOD,配置好工作模式设置计数寄存器THx和TLx的初值(初值之类的直接用软件计算吧)设置TCON,通过TRx置1来让定时器开始计数,还有中断开关EAETx判断TCON寄存器的TFx位,监测定时器溢出情况。

定时器0程序

#include "reg52.h"typedef unsigned int u16;sbit led=P2^0; //定义P20口是ledvoid Timer0Init(){TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。(不影响其它位)TMOD=TMOD|0X01TH0=0XFC;//给定时器赋初值,定时1msTL0=0X18;ET0=1;//打开定时器0中断允许EA=1;//打开总中断TR0=1;//打开定时器}void main(){Timer0Init(); //定时器0初始化while(1);}void Timer0() interrupt 1 //定时器0中断程序{static u16 i;//设置一个静态全局变量TH0=0XFC;//给定时器赋初值,定时1msTL0=0X18;i++;if(i==1000){i=0;led=~led;}}

在51单片机中,应用较多的是方式1方式2,而要注意到是方式1在使用时,一定要记得重装初值,我刚开始时就是忘记重装初值,程序的效果老是不对

完成~

如果觉得《定时器/计数器》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。