51汇编:T2

前言

这部分内容属于中断、定时计数器、串口的知识之一。

既然单独写一篇讲,要么是水的,要么是真的很重要。

0

 

感觉虽然只是多了T2CON、T2MOD、RCAP2H、RCAP2L、TH2、TL2,  6个寄存器就复杂了好几倍。在了解T2怎么用之前,需要先搞清楚下面这几个概念。

 


自动重装

下面这个原理图是T2重装的状态之一的简化图。

 

2

T2的重装是16位的,所以除了用TH2、TL2来自加自减外,还需要两个寄存器来保存初值。这两个用于保存的就是RCAP2H、RCAP2L

 

捕获

1

当外部输入T2EX(P1.1,通常不写具体端口)产生下降沿时,定时器T2的TH2、TL2被捕获到RCAP2H、RCAP2L中。

 

波特率发生器

3

 

 


T216位自动重装的3种状态

1、普通的16位重装定时器

当CP/RL2#=0,TR2=1,EXEN2=0时,T2为普通的递增定时器,从RCAP2H、RCAP2L组成的初值到FFFF后溢出(溢出标志TF2=1),然后再将RCAP2H、RCAP2L的数重装入TH2、TL2。

t2con  equ  0c8h
rcap2l equ  0cah
rcap2h equ  0cbh
tl2    equ  0cch
th2    equ  0cdh
tf2    equ  t2con.7
				
				org 0000h
				ljmp main
				org 002bh
				ljmp timer2_interrupt
main:
;T2CON  TF2  EXF2  RCLK  TCLK  EXEN2  TR2  C/T2#  CP/RL2#
;_______________________________0______1_____________0
				mov t2con,#04h 

;IE   EA  --   ET2   ES   ET1   EX1   ET0   EX0
;______1________1    
;open interrupt and start T2
				mov ie,#0a0h
				
				mov r0,#0
				mov p2,#0ffh
;calculate number just after set it
				mov rcap2h,#(0ffffh - 50000 + 1)/256
				mov rcap2l,#(0ffffh - 50000 + 1) MOD 256  
                                mov th2,rcap2h
                                mov tl2,rcap2l
				
loop:
				ljmp loop
								
				
;T2 interrupt function			
timer2_interrupt:
				clr tf2
				inc r0
				mov a,r0
				cjne a,#20,outer ;wait for 1 second
				mov r0,#0
				mov a,p2
				cpl a
				mov p2,a
outer:
				reti

显示结果:每隔一秒闪一次。

 

2、既能由16位重装定时器溢出中断,也能由T2EX下降沿触发中断

当CP/RL2#=0, TR2=1, EXEN2=1, DCEN = 0时, T2不仅仅是递增定时器,还可以因为T2EX下降沿触发的中断而引起重装。也就是这个状态下,有两种引起重装的原因了。

t2con  equ  0c8h
t2mod  equ  0c9h
rcap2l equ  0cah
rcap2h equ  0cbh
tl2    equ  0cch
th2    equ  0cdh
tf2    equ  t2con.7
t2ex   equ  p1.1

				
				org 0000h
				ljmp main
				org 002bh
				ljmp timer2_interrupt
main:
;T2CON  TF2  EXF2  RCLK  TCLK  EXEN2  TR2  C/T2#  CP/RL2#
;_______________________________1______1_____________0
				mov t2con,#0ch 
;T2MOD  --  --  --  --  --  --  T20E  DCEN
;______________________________________0
				mov t2mod,#0 

				
;IE   EA  --   ET2   ES   ET1   EX1   ET0   EX0
;______1________1    
;open interrupt and start T2
				mov ie,#0a0h
				
				mov r0,#0
				mov p2,#0ffh
                                setb t2ex
;calculate number just after set it				
				mov rcap2h,#(0ffffh - 50000 + 1)/256
				mov rcap2l,#(0ffffh - 50000 + 1) MOD 256
                                mov th2,rcap2h
                                mov tl2,rcap2l
				
loop:
				ljmp loop
								
				
;T2 interrupt function			
timer2_interrupt:
				clr tf2
				inc r0
				mov a,r0
				cjne a,#200,outer ;wait for 10 second
				mov r0,#0
				mov a,p2
				cpl a
				mov p2,a
outer:
				reti

 

T2EX=P1.1,一般是这样的,或者你可以把鼠标放在#include"reg52.h" 这行右击进入这个头文件,找到T2EX的定义。

状态二的重装可以由T2EX这个端的输入信号出现下降沿而引起,所以用一根母对母的杜邦线把这个口与某个按键接在一起。

显示结果,按一次LED会翻转一次,或者是每10秒闪一次。

1221

 

3、T2EX控制递增还是递减定时器

当CP/RL2#=0,TR2=1, EXEN2=1, DCEN = 1时, T2不仅仅是定时器,还因为T2EX的不同而处于递增或递减的状态。

  • T2EX=0,重装设置FFFF, 递减到RCAP2H、RCAP2L的值就溢出
  • T2EX=1,重装设置RCAP2H、RCAP2L的值,递增到FFFF后溢出

 

t2con  equ  0c8h
t2mod  equ  0c9h
rcap2l equ  0cah
rcap2h equ  0cbh
tl2    equ  0cch
th2    equ  0cdh
tf2    equ  t2con.7
t2ex   equ  p1.1
				
				org 0000h
				ljmp main
				org 002bh
				ljmp timer2_interrupt
main:
;T2CON  TF2  EXF2  RCLK  TCLK  EXEN2  TR2  C/T2#  CP/RL2#
;_______________________________1______1_____________0
				mov t2con,#0ch 
;T2MOD  --  --  --  --  --  --  T20E  DCEN
;______________________________________1
				mov t2mod,#01h 

				
;IE   EA  --   ET2   ES   ET1   EX1   ET0   EX0
;______1________1    
;open interrupt and start T2
				mov ie,#0a0h
				
				mov r0,#0
				mov p2,#0ffh
				clr t2ex
				
;calculate number just after set it				
				mov rcap2h,#(0ffffh - 50000 + 1)/256
				mov rcap2l,#(0ffffh - 50000 + 1) MOD 256
                                mov th2,rcap2h
                                mov tl2,rcap2l
				
loop:
				ljmp loop
								
				
;T2 interrupt function			
timer2_interrupt:
				clr tf2
				inc r0
				mov a,r0
				cjne a,#20,outer ;wait for 1 second
				mov r0,#0
				mov a,p2
				cpl a
				mov p2,a
outer:
				reti

 

 

有丶问题

 

 

T216位捕获的两种状态

1、捕获下降沿

2、普通的16位定时\计数器

 

 

 

T2波特率发生器的状态