210 likes | 465 Views
4. 8051 的定时器/计数器. 4-1 定时器/计数器的结构及工作原理. 4-1-1 定时器/计数器的结构. 8051 系列单片机有 2 个 16 位的定时 / 计数器 T0 、 T1 , 8052 以上系列单片机还有一个可用于捕获的 16 位加减定时 / 计数器。其记数值存放在内部特殊寄存器 TH0 、 TL0 和 TH1 、 TL1 以及 TH2 、 TL2
E N D
4. 8051的定时器/计数器 4-1 定时器/计数器的结构及工作原理 4-1-1定时器/计数器的结构 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位的自动装载和捕获功能
T0 INT0 T1 INT1 T2 内部时钟 T0 T1 T2 TH0 TL0 TH1 TL1 TH2 TL2 微 处 理 器 TCON (88H) TMOD (89H) T2CON (C8H) T2CON (C9H) 图4-1 定时器/计数器的结构框图
C/ T =0 系统 时钟 ÷12 计数器 中断 TFi TL TH 启动控制 溢出标志 模式控制C/T 外部引脚Ti TRi & 工作方式选择 M1 M0 GATE + GATE C/ T M1 M0 GATE C/T M1 M0 TMOD 外部引脚INTi T1 T0 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT9 4-1-2定时器/计数器的工作原理 图4-2定时器/计数器工作原理框图
GATE C/ T M1 M0 GATE C/T M1 M0 TMOD T1 T0 4-1-3 定时器/计数器的控制寄存器 1 T0/T1的方式控制寄存器TMOD 特殊寄存器TMOD用来设置T0/T1的工作方式和启停控制方式。
1 T0/T1的控制寄存器TCON TCON(88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT9 TF0/TF1:定时器溢出标志,由硬件置1,向CPU申请中断,中断响应 后,由硬件清0。查询方式,需软件清0 TR0/TR1: 定时器启停控制(必要条件),由软件设置。另一个条件是 GATE IE0/IE1: 外部中断INT0/INT1中断请求标志 IT0/IT1: 外部中断INT0/INT1的触发方式 ITi=1, INTi为边沿触发方式,当外部中断引脚由高电平变为低 电平时, 则自动触发IEi, CPU响应中断后,自动 ( 硬件 ) 清除IEi, 当 INTi引脚再次由高电平变为低电平时,才能响应第2次中断。 ITi=0, INTi为电平触发方式, 当外部中断引脚为低电平时, 则 自动触发IEi, 中断返回后, 若外部中断引脚仍为低电平,则会再次 触发中断,只有将外部中断引脚置为高电平,才能停止中断响应。
C/ T =0 方式0 系统 时钟 ÷12 计数器+1 TFi TL5 TH 启动控制 溢出标志 模式控制C/ T 外部引脚Ti TRi & 工作方式选择 M1 M0=00 GATE + 外部引脚INTi 4-2 T0/T1的工作方式 中断 记数范围1~8192
C/ T =0 ÷12 系统 时钟 计数器+1 中断 TFi TH TL 溢出标志 启动控制 模式控制C/ T 外部引脚Ti & TRi 工作方式选择 M1 M0=01 GATE + 外部引脚INTi 方式1 记数范围1~65536
C/ T =0 系统 时钟 ÷12 中断 TFi TL0 启动控制 溢出标志 模式控制C/ T 外部引脚Ti TRi & TH GATE + 工作方式选择 M1 M0=10 外部引脚INTi 方式2 记数范围1~256;常用作定时脉冲发生器
C/ T =0 系统 时钟 ÷12 中断 TF0 TL0 中断 ÷12 系统 时钟 TF1 TH0 启动控制 溢出标志 模式控制C/ T 外部引脚T0 溢出标志 启动控制 TR0 & TR1 GATE 工作方式选择 M1 M0=10 + 外部引脚INT0 方式3 T1在方式3时 = 停止
- - - - - - T2OE DCEN TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ T2 CP/ RL2 4-3 T2的工作方式 8052以上单片机除具有T0、T1外,还有一个具有16位自动装载或捕获功能的加减定时器/计数器T2,通过特殊寄存器T2MOD、T2CON,T2具有4种工作方式。 T2MOD T2CON
CP/ RL2 = 1 系统 时钟 ÷12 计数器 溢出标志 C/ T2 =0 TL2 TH2 TF2 中断 TR2 + T2(P1.0) C/ T2 RCAP2L RCAP2H 边沿检测 EXF2 T2EX(P1.1) EXEN2 - - - - - - T2OE DCEN TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ T2 CP/ RL2 4-3-1 自动捕获方式 T2MOD T2CON
CP/ RL2 = 0 C/ T2 =0 系统 时钟 ÷12 计数器 溢出标志 TL2 TH2 TF2 中断 C/ T2 + TR2 T2(P1.0) + RCAP2L RCAP2H 边沿检测 EXF2 T2EX(P1.1) EXEN2 4-3-2 自动装载方式 1)向上计数方式DCEN = 0
CP/ RL2 = 0 系统 时钟 0FFH 0FFH C/ T2 =0 EXF2 ÷12 C/ T2 中断 TL2 TH2 TF2 TR2 T2(P1.0) 溢出标志 1:递增 0:递减 RCAP2L RCAP2H T2EX(P1.1) 计数方向 2)双向计数方式DCEN = 1
CP/ RL2 = 0 C/ T2 =0 系统 时钟 ÷2 TL2 TH2 C/ T2 TR2 T2(P1.0) RCAP2L RCAP2H T2OE=1 4-3-3 可编程时钟输出 DCEN =0 T2OE=1
CP/ RL2 = 0 C/ T2 =0 系统 时钟 ÷2 TX/RX波特率 TL2 TH2 C/ T2 TR2 T2(P1.0) RCAP2L RCAP2H EXF2 T2中断 T2EX(P1.1) EXEN2 4-3-4 波特率发生器方式 TCLK或RCLK为1 DCEN =0
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%).