MCS-51 单片机的定时器/计数器

2023-03-24 21:00   239   0  

MCS-51 单片机的定时器/计数器


主要内容:定时器/计数器的结构、定时器/计数器的4 种工作方式、对外部输入的计数信号的要求、定时器/计数器的编程和应用。




概述:两个可编程的定时器/计数器T1、T0。




两种工作模式:


(1)计数器工作模式


(2)定时器工作模式


4种工作方式(方式0-方式3)。


6.1 定时器/计数器的结构


467fbb16-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


TMOD:选择定时器/计数器T0、T1的工作模式和工作方式。


TCON:控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。


单片机复位时,两个寄存器的所有位都被清0。


467fbb17-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


6.1.1 工作方式控制寄存器TMOD


8位分为两组,高4位控制T1,低4位控制T0。


(1)GATE——门控位


0:以TRX(X=0,1)来启动定时器/计数器运行。


1:用外中断引脚(INT0*或INT1*)上的高电平和TRX来启动定时器/计数器运行。


(2)M1、M0——工作方式选择位


M1 M0 工 作 方 式


0 0 方式0,13位定时器/计数器。


0 1 方式1,16位定时器/计数器。


1 0 方式2,8位常数自动重新装载


1 1 方式3,仅适用于T0,T0分成两个8位计数器,T1停止计数。


(3) C/T*——计数器模式和定时器模式选择位


0:定时器模式。


1:计数器模式。


6.1.2 定时器/计数器控制寄存器TCON


467fbb18-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


低4位与外部中断有关,已介绍。高4位的功能如下:


(1) TF1、TF0——计数溢出标志位


(2) TR1、TR0——计数运行控制位


1:启动定时器/计数器工作


0:停止定时器/计数器工作


6.2 定时器/计数器的4种工作方式


6.2.1 方式0


467fbb19-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


M1、M0为00 ,定时器/计数器的框图:


为13位的计数器 ,C/T* 位决定工作模式:


0:开关打在上面,为定时器工作模式;


1:开关打在下面,为计数器工作模式,计数脉冲为P3.4、P3.5引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加1。


GATE位:决定定时器/计数器的运行取决于TRX一个条件还是TRX和INTX*引脚两个条件。


(1)0:A点(见图6-2)是否计数,仅取决于TRX的状态。


(2)1:B点电位由INTX*的输入电平和TRX的状态这两个条件来确定。是否计数是由TRX和INTX*二个条件来控制的。


6.2.2 方式1




467fbb1a-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


M1、M0=01,16位的计数器。


6.2.3 方式2


计数满后自动装入计数初值。


467fbb1b-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


M1、M0=10 ,等效框图如下:


TLX作为常数缓冲器,当TLX计数溢出时,在置“1”溢出标志TFX的同时,还自动的将THX中的初值送至TLX,使TLX从初值开始重新计数。定时器/计数器的方式2工作过程如图6-5(X=0,1)。


467fbb1c-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


省去用户软件中重装初值的程序,精确的定时。


6.2.4 方式3


增加一个附加的8位定时器/计数器,从而具有3个定时器/计数器。只适用于定时器/计数器T0。T1不能工作在方式3,T1方式3时相当于TR1=0,停止计数(此时T1可用来作串行口波特率产生器)。


1.工作方式3下的T0


T0分为两个独立的8位计数器:TL0和TH0 。TL0使用T0的状态控制位C/T*、GATE、TR0、,而TH0被固定为一个8位定时器(不能作外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。 各引脚与T0的逻辑关系如图所示:


467fbb1d-ac4f-11ed-bcd2-b8ca3a6cb5c4.png467fbb1e-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


2.T0工作在方式3下T1的各种工作方式


当T1用作串行口的波特率发生器时, T0才工作在方式3。T0处于方式3时, T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。


(1)T1工作在方式0


467fbb1f-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


(2) T1工作在方式1


467fbb20-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


(3) T1工作在方式2


467fbb21-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


6.3 定时器/计数器对输入信号的要求


计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生负跳变时,计数值增1。每个机器周期S5P2期间,都对外部输入引脚T0或T1进行采样。如在第1个机器周期中采得值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1期间,计数器加1。由于确认一次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率1/24。


外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。


输入信号的高、低电平至少要保持一个机器周期。如图6-10所示,图中Tcy为机器周期。


467fbb22-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


6.4 定时器/计数器的编程和应用


4种工作方式中,方式0与方式1基本相同,由于方式0是为兼容MCS-48而设,初值计算复杂,在实际应用中,一般不用方式0,而采用方式1。


6.4.1 方式1应用


例6-1 假设系统时钟频率采用6MHz,要在P1.0上输出一个周期为2ms的方波,如图所示。




467fbb23-ac4f-11ed-bcd2-b8ca3a6cb5c4.png


方波的周期用T0来确定,让T0每隔1ms计数溢出1次,既T0每隔1ms产生一次中断,CPU相应中断后,在中断服务程序中对P1.0取反。


(1)计算初值X


定时时间=(216−X)×12/晶振频率


设初值为X,则有:(2^16-X)×2×10^(-6)=1×10-3216-X=500


因为单个系统时钟周期为:(1/6m*12)


备注:12分频


所以:X=65036


X化为16进制,即X=FE0CH=1111111000001100B。


所以,T0的初值为:TH0=0FEH TL0=0CH


(2)初始化程序设计:


主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确设置,将计数初值送入定时器中。


(3)程序设计


中断服务程序除了完成要求的产生方波这一工作之外,还要注意将计数初值重新装入定时器中,为下一次产生中断作准备。


ORG 0000H


RESET: AJMP MAIN ;转主程序


ORG 000BH;T0的中断入口


AJMP IT0P;转T0中断处理程序IT0P


ORG 0100H


MAIN: MOV SP,#60H ;设堆栈指针


MOV TMOD,#01H;设置T0味方式一


ACALL PT0M0;调用子程序PT0M0


HERE: AJMP HERE ;自身跳转


PT0M0:MOV TL0,#0CH;T0中断服务程序,T0重新置初值


MOV TH0,#0FEH


SETB TR0;启动T0


SETB ET0;允许T0中断


SETB EA;CPU开中断


RET


IT0P: MOV TL0,#0CH;T0中断服务子程序,T0置初值


MOV TH0,#0FEH


CPL P1.0 ;P1.0的状态取反


RETI


END


467fbb24-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。