7.1 定时器/计数器
7.1.1 定时器/计数器的组成
7.1.2 定时器/计数器的工作原理
1、定时方式
定时方式时,T记录80C51内部振荡器输出的脉冲(机器周期信号)个数。
每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。
2、计数方式
计数方式时,T的功能是计来自T0(P3.4)T1(P3.5)的外部脉冲信号的个数。
7.1.3定时器/计数器的控制
定时器/计数器是一种可编程的部件,在其工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式,这个过程称为定时器/计数器的初始化。
1、工作方式寄存器TMOD (89H)
(1) M1、M0:工作方式控制位
(2) C/(/T):计数器/定时器方式选择位
C/ (/T)=0,设置为定时方式。定时器计数80C51片内脉冲,亦即对机器周期(振荡周期的12倍)进行计数。
C/ (/T)=1,设置为计数方式,计数器对来自T0(P3.4)或T1(P3.5)端的外部脉冲进行计数。
(3) GATE:门控位
GATE=0时,只要用软件使TR0(或TR1)置1就可以启动定时器,而不管/INT0(/INT0控制T0的运行)或/INT1(/INT1控制T1的运行)的电平是高还是低(参见后面的定时器结构图)。
GATE=1时,只有/INT0(或/INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。
2、控制寄存器TCON(88H)
TCON的高4位:定时器的运行控制位和溢出标志位;
低4位:外部中断触发方式控制位和锁存外部中断请求源;
(1) 定时器T0运行控制位TR0
TR0由软件置位和清零来启动或关闭T0。
(2) 定时器T0溢出标志位TF0
当T0被允许计数以后,T0从初值开始加1计数,当T0溢出时,由硬件自动使中断触发器TF0置1,并向CPU申请中断。当CPU响应中断进入中断服务程序后,TF0又被硬件自动清0。TF0也可以用软件清0。
(3) TR1:定时器T1运行控制位。其功能与TR0相同。
(4) TF1:定时器T1溢出标志位。其功能与TF0相同。
(5) IE1: 外部中断1请求标志位。
(6) IT1: 外部中断1触发方式控制位。
(7) IE0: 外部中断0请求标志位。
(8) IT0: 外部中断0触发方式控制位。
7.2 定时器/计数器的工作方式
7.2.1 工作方式0
方式0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0的高3位未用,TL0低5位计数溢出时向TH0进位,TH0计数溢出时,向中断标志位TF0进位(硬件置位TF0),并申请中断。T0是否溢出可查询TF0是否被置位,以产生T0中断。
方式0定时,定时时间为:to=(213- Xo) xTm=(213-X0) x(12/ fosc)
式中X0为计数初值,Tm为机器周期,fosc为 晶振频率。方式0计数时,最大计数值为2^13=8192 (个外部脉冲)。
7.2.2 工作方式1
方式1为16位的定时器/计数器
t1=(2^16- X0) XTm=(2^16-X0)X (12/ fosc)
计数工作方式:最大计数值为2^16=65536(个外部脉冲)
7.2.3 工作方式2
方式2为自动重装载的8位定时器/计数器,在方式2时,16位计数器被拆成2个,TL0用作8位计数器,TH0用作计数初值寄存器。
t2=(2^8- X0) XTm=(2^8-X0)X (12/fosc)
计数工作方式时,最大计数值为2^8=256 (个外部脉冲)
7.2.4 工作方式3
T0分为两个独立的8位计数器TL0和TH0。TL0可以作为8位定时器或外部事件计数器,TH0被 固定为一个8位定时器方式。
7.3 定时器/计数器初始化和应用举例
7.3.1 定时器/计数器初始化
1、初始化的步骤
(1) 确定工作方式,即根据题目要求先给TMOD送一个方式控制字;
(2) 计算计数初值/定时初值,并写入TH0、TL0或TH1、TL1中;
(3) 根据需要给中断允许寄存器IE选送中断控制字和中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。
(4) 给TCON送命令控制字,以启动或禁止定时器/计数器的运行。
2、计数器初值的计算
x0 = M-C
M-计数器模式:
方式0时2^13
方式1时2^16
方式2、方式3时2^8
3、定时器初值的计算
定时时间T的计算公式:T=XxTm =(M-x0)xTm
定时初值:x0=M-T/Tm
7.3.2 定时器/计数器应用举例
1、方式0的应用
例:利用T0方式0产生1 ms的定时,在P1.2 引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。
解:
(1) 确定工作方式:(TMOD)=00H
(2) 计算1 ms定时时T0的初值
机器周期:T= 1 / foscX12 = 1us,
计数个数:X =1ms/lus = 1000
设T0的计数初值为,则
X0= (213-X)
= 8192-1000
= 7192 D
解得: T0初值=7192=1C18H=0001 1100 0001 1000
11100000 B=E0H赋给TH0,低5位00011000=18H赋给TL0。
ORG 0000H
AJMP MAIN ; 转主程序MAIN
ORG 000BH
AJMP IT0P ; 转T0中断服务程序IT0P
ORG 1000H
MAIN: MOV SP, #60H ; 设堆栈指针
MOV TH0 , #0E0H ; 给定时器T0送初值
MOV TL0 , #18H ; 送定时初值
MOV TMOD, #00H ; 设置T0为方式0, 定时
SETB EA ; CPU开中断
SETB ET0 ; T0允许中断
SETB TR0 ; 启动T0定时
HERE: SJMP HERE ; 等待中断
2、方式1的应用
方式1中,寄存器是以全部16位参与操作。
3、方式2的应用
当T0(P3.4)引脚每输入一个负脉冲时,使P1.0输出一一个500us的同步脉冲。设晶振频率为6MHz,请编程实现该功能。
(1) 确定工作方式
计数时:(TMOD) = 0000 0110B = 06H
定时时:(TMOD) = 0000 0010B = 02H
(2) 计算初值
机器周期T= 12 / fosc = 12/6MHZ = :2μs
计数时:计数个数X= 1
计数初值:X0= (256-X)= (256-1) =255=0FFH,
(TH0)=(TL0)=0FFH
定时时:计数个数X=T/ Tm= 500μs / 2μs =250
定时初值=256- X=256 - 250= 6,
(TH0) = (TL0)= 06H
START: MOV TMOD, #06H ; T0方式2, 外部计数方式
MOV TH0, #0FFH ; T0计数初值
MOV TL0, #0FFH
SETB TR0 ; 启动T0计数
LOOPl: JBC TF0, PTF01; 查询T0溢出标志, TF0= 1时转移, 且TF0= 0(查P3.4负跳变)
SJMP LOOPl
PTF01: CLR TR0 ; 停止计数
MOV TMOD, #02H ; T0方式2, 定时
MOV TH0, #06H ; T0定时500μs初值
MOV TL0, #06H
CLR P1.0 ; P1.0清0
SETB TR0 ; 启动定时500μs
LOOP2: JBC TF0, PTF02 ; 定时到TF0=l 转移, 且TF0= 0(第一个500μs到否?)
SJMP LOOP2
PTF02: SETB P1.0 ; P1.0置1(到了第一个500μs)
CLR TR0 ; 停止计数
SJMP START
4、方式3的应用
5、GATE位的应用
例:利用GATE门控位测量从/I/N/T/1引脚输入的正脉冲宽度。
6、扩大计数个数和定时时间
例:利用MCS-51单片机的定时器/计数器,产生电.子时钟的1s基时,并且由P1.7输出2s的方波。fosc=12MHz。
———————————————
上一篇:STC51从入门到精通(汇编)~~~ 第八讲:串行通信技术
下一篇:STC51从入门到精通(汇编)~~~ 第一讲:概述
推荐阅读最新更新时间:2024-11-13 11:18
设计资源 培训 开发板 精华推荐
- 具有按钮复位功能的 LTC2939CMS 四电源监视器的典型应用电路
- stc8g1k08系统板
- stm32g030f6p6开发板
- MAP9004,使用 MAP9004 高压交流 LED 驱动器实现无闪烁电路的典型应用电路
- IS31BL3212 四通道恒流 LED 驱动器少于 4 个 LED 的应用
- 使用 Analog Devices 的 LT3091MPFE 的参考设计
- AD9649-20EBZ,用于 AD9649BCPZ-20、单通道、14 位、20 MSPS 模数转换器的评估板
- ADP2301 PWM 降压控制器使用 4.5 V 至 5.5 V 作为输入电压
- 河图小车(ESP32)
- NCP300HSN18T1 1.8V 电压检测器的典型应用,用于具有附加迟滞的微处理器复位电路