Upload
carys
View
159
Download
0
Embed Size (px)
DESCRIPTION
4. 8051 的定时器/计数器. 4-1 定时器/计数器的结构及工作原理. 4-1-1 定时器/计数器的结构. 8051 系列单片机有 2 个 16 位的定时 / 计数器 T0 、 T1 , 8052 以上系列单片机还有一个可用于捕获的 16 位加减定时 / 计数器。其记数值存放在内部特殊寄存器 TH0 、 TL0 和 TH1 、 TL1 以及 TH2 、 TL2 - PowerPoint PPT Presentation
Citation preview
4. 8051 的定时器 / 计数器
8051 系列单片机有 2 个 16 位的定时 / 计数器T0 、 T1 , 8052 以上系列单片机还有一个可用于捕获的 16 位加减定时 / 计数器。其记数值存放在内部特殊寄存器TH0 、 TL0 和 TH1 、 TL1 以及 TH2 、 TL2
定时器 T0 、 T1 的工作方式及启停控制用 2 个特殊功能寄存器 TMOD 、 TCON 来实现, T2 的工作方式及启停控制则用特殊功能寄存器 T2MOD 、 T2CON 来实现。另外T2 还具有 2 个特殊功能寄存器 RCAP2H 、 RCAP2L 用于实现 16 位的自动装载和捕获功能
4-1 定时器 / 计数器的结构及工作原理4-1-1 定时器 / 计数器的结构
图 4-1 定时器 / 计数器的结构框图
微处理器
TCON(88H)
TMOD(89H)
T2CON(C8H)
T2CON(C9H)
TH0 TL0 TH1 TL1 TH2 TL2
T0 T1 T2内部时钟
T0INT0
T1 INT1
T2
图 4-2 定时器 / 计数器工作原理框图
4-1-2 定时器 / 计数器的工作原理
系统时钟
TFi
外部引脚 Ti
启动控制
溢出标志
中断÷12
外部引脚 INTi
GATE
+
&TRi
模式控制 C/T
TL TH
计数器
工作方式选择M1 M0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT9TCON
GATE C/ T M1 M0 GATE C/T M1 M0
T1 T0
TMOD
C/ T =0
1 T0/T1 的方式控制寄存器 TMOD
特殊寄存器 TMOD 用来设置 T0/T1 的工作方式和启停控制方式。
4-1-3 定时器 / 计数器的控制寄存器
GATE C/ T M1 M0 GATE C/T M1 M0
T1 T0
TMOD
M1 M0 计数器工作方式0 0 方式 0 : 13 位计数器, TLi 低 5 位和 THi 8 位。0 1 方式 1 : 16 位计数器。1 0 方式 2 : 8 位自动装载计数器, TL 溢出时自动装载成 TH
的值1 1 方式 3 : T0 为 2 个 8 位计数器, T1 停止工作。
TF0/TF1 :定时器溢出标志,由硬件置 1 ,向 CPU 申请中断,中断响应 后,由硬件清 0 。查询方式,需软件清 0TR0/TR1: 定时器启停控制 ( 必要条件 ) ,由软件设置。另一个条件是 GATEIE0/IE1: 外部中断 INT0/INT1 中断请求标志IT0/IT1: 外部中断 INT0/INT1 的触发方式 ITi=1, INTi 为边沿触发方式 , 当外部中断引脚由高电平变为低 电平时 , 则自动触发 IEi, CPU 响应中断后 , 自动 ( 硬件 ) 清除 IEi, 当 INTi 引脚再次由高电平变为低电平时 , 才能响应第 2 次中断。 ITi=0, INTi 为电平触发方式 , 当外部中断引脚为低电平时 , 则 自动触发 IEi, 中断返回后 , 若外部中断引脚仍为低电平,则会再次 触发中断,只有将外部中断引脚置为高电平,才能停止中断响应。
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT9TCON(88H)
1 T0/T1 的控制寄存器 TCON
8192213
4-2 T0/T1 的工作方式
中断
记数范围 1~8192
方式 0
系统时钟
TFi
外部引脚 Ti
启动控制
溢出标志
÷12
外部引脚 INTi
GATE
+
&TRi
模式控制 C/ T
TL5 TH
计数器 +1
工作方式选择M1 M0=00
C/ T =0
方式 1
系统时钟
TFi
外部引脚 Ti
启动控制
溢出标志
中断÷12
外部引脚 INTi
GATE
+
&TRi
模式控制 C/ T
TL TH
计数器 +1
工作方式选择M1 M0=01
记数范围 1~65536
C/ T =0
方式 2
记数范围 1~256 ;常用作定时脉冲发生器
系统时钟
TFi
外部引脚 Ti
启动控制
溢出标志
中断÷12
外部引脚 INTi
GATE
+
&TRi
模式控制 C/ T
TL0
TH
工作方式选择M1 M0=10
C/ T =0
方式 3
系统时钟 TF1
启动控制
溢出标志
中断÷12
TR1
TH0
系统时钟
TF0
外部引脚 T0
启动控制
溢出标志
中断÷12
外部引脚 INT0
GATE
+
&TR0
模式控制 C/ T
TL0
工作方式选择M1 M0=10
C/ T =0
T1 在方式 3 时= 停止
4-3 T2 的工作方式
- - - - - - T2OE DCENT2MOD
T2CON TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ T2 CP/ RL2
8052 以上单片机除具有 T0 、 T1 外,还有一个具有 16 位自动装载或捕获功能的加减定时器 / 计数器 T2 ,通过特殊寄存器T2MOD 、 T2CON , T2 具有 4 种工作方式。
- - - - - - T2OE DCENT2MOD
T2CON TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ T2 CP/ RL2
4-3-1 自动捕获方式
中断
T2(P1.0)
系统时钟
TF2
溢出标志÷12
T2EX(P1.1)
TR2C/ T2
TL2 TH2
计数器
+
C/ T2 =0
RCAP2L RCAP2H
EXF2
EXEN2
边沿检测
CP/ RL2 = 1
4-3-2 自动装载方式
1 )向上计数方式 DCEN = 0
中断
T2(P1.0)+
系统时钟
TF2
溢出标志÷12
T2EX(P1.1)
TR2C/ T2
TL2 TH2
计数器
+
C/ T2 =0
RCAP2L RCAP2H
EXF2
EXEN2
边沿检测
CP/ RL2 = 0
2 )双向计数方式 DCEN = 1
中断
T2(P1.0)
系统时钟
TF2
÷12
TR2C/ T2
TL2 TH2
C/ T2 =0
RCAP2L RCAP2H
计数方向
CP/ RL2 = 0 0FFH 0FFH EXF2
T2EX(P1.1)
1 :递增0 :递减
溢出标志
4-3-3 可编程时钟输出
DCEN =0 T2OE=1
T2(P1.0)
系统时钟 ÷2
TR2C/ T2
TL2 TH2
C/ T2 =0
RCAP2L RCAP2H
CP/ RL2 = 0
T2OE=1
4-3-4 波特率发生器方式
TCLK 或 RCLK 为 1 DCEN =0
T2(P1.0)
系统时钟 ÷2
TR2C/ T2
TL2 TH2
TX/RX 波特率C/ T2 =0
RCAP2L RCAP2H
CP/ RL2 = 0
T2EX(P1.1)
EXF2
EXEN2
T2 中断
波特率计算公式
4-3 定时器 / 计数器的应用 例 4.1 设 8051 单片机的系统时钟为 12MHz ,利用定时器 , 在 P1.7上实现 1kHz 的脉冲发生器 , 要求占空比为 1:1 。 分析:根据题义, P1.7上高低电平的时间分别为 500μs ,若采用 T0方式 1 定时来实现电平翻转,定时初值为: 8192-500=7192=11110000 01100B 。利用中断,可减少 CPU的等待时间,编程如下: org 0000h ljmp main org 0003h ljmp int_T0 ……Main: mov tmod , #00H ; 设定时器 0 为方式 0
mov th0 , #0f0H ; 置定时器初值 mov tl0 , #0cH
setb tr0 ; 启动 T1 mov ie, #81h ; 开中断
… …
int_T0: mov th0 , #0f0H; 重置定时器初值 mov tl0 , #0cH jbc p1.7, T_end ;p1.7=1 p1.7=0, jump to T_01
setb p1.7 ;p1.7=0 p1.7=1,
T_end: reti
该程序由于要在中断程序中重新设置定时器的值,可能会带来一定的误差,并会产生较大的累积误差。利用自动装载(方式 2 )可减小累积误差误差,但 T0 方式 2 最大定时时间为 256µs ,可设定时时间为 250µs ,利用 1位标志进行翻转判断,编程如下:
T_250us equ 00h
org 0000h ljmp main org 0003h ljmp int_T0 ……Main: mov tmod , #02H ; 设定时器 0 为方式 0
mov th0 , #06H ; 置定时器装载值 setb tr0 ; 启动 T1 mov ie, #81h ; 开中断
…
int_T0: jbc T_250us, T_01 ; 后 250 us, jump to 翻转setb T_250us ; 准备翻转reti
T_01: jbc p1.7, T_end ;p1.7=1 p1.7=0, jump to T_01 setb p1.7 ;p1.7=0 p1.7=1,
T_end: reti
若将本例中 P1.7 改为内部 RAM 位(如 T_1ms ),配合 T_250us ,可将主程序分成 4 个节拍,分别对不同响应频率要求的信号进行处理,以提高系统的性能
若采用 8052 以上单片机,也可使用定时器 2 ,编程如下:
T_1ms equ 02h
org 0000h ljmp main org 002bh ljmp int_T2 ……
Main: mov t2mod , #00H ; 设定时器 2 为方式 + 计数mov rcap2H , #0feH ; 置定时器装载值 mov rcap2L , #0cH ; 置定时器装载值 setb tr2 ; 启动 T1 mov ie, #0a0h ; 开中断
…
int_T2: clr tf2 ; 中断撤消 jbc T_1ms, T2_end ; T_1ms =1 T_1ms =0
setb T_1ms ; T_1ms =0 T_1ms =1 T2_end: reti
利用 T2 和查表法,在 P1.7 上输出脉冲宽度按正弦变化的 SPWM 方波, SPWM 载波的频率为 1KHz, 正弦函数的频率为 10Hz 、幅值为 4V( 即占空比为 10%~90%).
作业