资源描述
定时器
*******************************************************************************
TCON:
D7
D6
D5
D4
D3
D2
D1
D0
TF1
TF0
IE1
IT1
IE0
IT0
IT0,IT1:外部中断0、1触发方式选择位,由软件设置。1→下降沿触发方式,INT0/INT1引脚上高到低的负跳变可引起中断;0→电平触发方式,INT0/INT1引脚上低电平可引起中断。
******************************************************************************
SCON:
RI:串行口接收中断请求标志位,当串行口接收完一帧数据后请求中断时,由硬件置位(RI=1),RI必须由软件清零。
TI:串行口发送中断请求标志位。当串行口发送完一帧数据后请求中断时,由硬件置位(TI=1),TI必须由软件清零。
中断允许寄存器IE
D7
D6
D5
D4
D3
D2
D1
D0
EA
ET2
ES
ET1
EX1
ET0
EX0
EX0,EX1;外部中断0,1的中断允许位。
1→外部中断0、1开中断;
0→外部中断0、1关中断;
EX0,ET1;定时器/计数器0、1溢出中断允许位。
1→T/C0、T/C1开中断;
0→T/CO、T/C1关中断;
ES:串行口中断允许位。
1→串行口开中断;
0→串行口关中断.
ET2:定时器/计数器2溢出中断允许位。
1→T/C2开中断;
0→T/C2关中断。
EA:CPU开/关中断控制位。
1→CPU开中断;
0→CPU关中断;
IP:
D7
D6
D5
D4
D3
D2
D1
D0
PS
PT1
PX1
PT0
PX0
PX0,PX1:外部中断0,1中断优先级控制位。
1→高优先级; 0→低优先级。
PT0,PT1:定时器/计数器0、1中断优先级控制位。
1→高优先级; 0→低优先级。
PS:串行口中断优先级控制位。
1→高优先级; 0→低优先级。
中断源 高
外部中断0(IE0)
定时器/计数器0(TF0)
外部中断1(IE1)
定时器/计数器1(TF1)
串行口中断(RI+TI) 低
与T/C有关的特殊功能寄存器
计数寄存器TH和TL
T/C是16位的,计数寄存器由TH高8位和TL低8位构成。在特殊功能寄存器(SFR)中,对应T/C0为TH0和TL0;对应T/C1为TH1和TL1。定时器/计数器的初始值通过TH1/TH0和TL1/TL0设置。
定时器/计数器控制寄存器TCON
D7
D6
D5
D4
D3
D2
D1
D0
TR1
TR0
TR0、TR1:T/C0、1启动控制位。
1→启动计数; 0→停止计数。
TCON复位后清零,T/C需受到软件控制才能启动计数;当计数寄存器计满时,产生向高位的进位TF,即溢出中断请求标志。
T/C的方式控制寄存器TMOD
D7
D6
D5
D4
D3
D2
D1
D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
T/C1
T/C0
C/T:计数器或定时器选择位。
1→计数器; 0→定时器。
GATE:门控信号。
1→T/C的启动受到双重控制,即要求TR0/TR1和INT0/INT1同时为高;
0→T/C的启动仅受TR0或TR1控制。
M1和M0:工作方式选择位。
4种工作方式,由M1和M0的4种组合状态确定,具体见下表:
M1
M0
方式
功能
0
0
0
为13位定时器/计数器,TL存低5位,TH存高8位
0
1
1
为16位定时器/计数器
1
0
2
常数自动装入的8位定时器/计数器
1
1
3
仅适用于T/C0,两个8位定时器/计数器
定时器/计数器2(T/C2)控制寄存器
D7
D6
D5
D4
D3
D2
D1
D0
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C/T2
CP/RL
TF2:T/C2的溢出标志,必须由软件清除。
EXF2:T/C2外部标志。
当EXEN2=1,且T2EX引脚上出现负跳变而引起捕获或重装载时置位,EXF2要靠软件来清除。
RCLK:接收时钟标志。
1→用定时器2的溢出脉冲作为串行口的接收时钟;
0→用定时器1的溢出脉冲作为接收时钟。
TCLK:发送时钟标志。
1→用定时器2的溢出脉冲作为串行口的发送时钟;
0→用定时器1的溢出脉冲作为发送时钟。
EXEN2:T/C2外部允许标志。
1→若定时器2未用做串行口的波特率发生器,则T2EX端的负跳变引起T/C2捕获或重装载;
0→T2EX端的外部信号不起作用。
TR2:T/C2运行控制位。
1→计数器; 0→定时器。
CP/RL:捕获/重载标志。
1→当EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作;
0→当定时器2溢出,或在EXEN2=1条件下T2EX端信号负跳变时,都会造成自动重装载操作。
定时器/计数器的工作方式
1、 方式0
当TMOD中M1M0=00时,T/C工作在方式0。
方式0为13位的T/C,由TH提供高8位,TL提供低5位(TL的高3位无效)的计数值,满计数值为213, ,但启动前可以预置计数初值。
当C/T=0时,T/C为定时器,振荡源12分频的信号作为计数脉冲;当C/T=1时,T/C为计数器,对外部脉冲输入端T0或T1输入的脉冲计数。
计数脉冲能否加到计数器上,受启动信号的控制。当GATE=0时,只要TR=1时,则T/C启动;当GATE=1时,启动信号=TR·INT,此时T/C启动受到双重控制。
T/C启动后立即加1计数,当13位计数满时,TH向高位进位。此进位将中断溢出标志TF置1,产生中断请求,表示定时时间到或计数次数到。若T/C开中断(ET=1)且CPU开中断(EA=1),则当CPU转向中断服务程序时。TF自动清零。
2、 方式1
当TMOD中M1M0=01时,T/C工作在方式1。
方式1与方式0基本相同,区别:计数寄存器的位数是16位的,由TH和TL寄存器各提供8位,满计数值为216 。
3、方式2
当TMOD中M1M0=10时,T/C工作在方式2。
方式2是8位的可自动重装载的T/C,满计数值为28 。
在方式0和方式1中,当计数满后,若要进行下一次定时/计数,须用软件向TH和TL重装载预置计数初值。方式2中TH和TL被当作两个8位计数器。计数过程中,TH寄存8位初值并保持不变,由TL进行8位计数,计数溢出时,除产生溢出中断请求外,还自动将TH中初值重装到TL,即重装载。
除此之外,方式2也同方式0。
4、方式3
方式3只适合于T/C0当T/C0工作方式3时,TH0和TL0成为两个独立的计数器。此时,TL0可作为定时器/.计数器,占用T/C0在TCON和TMOD寄存器中的控制位和标志位;而TH0只能定时器用,占用T/C1的资源TR1和TF1。在这种情况下,T/C1仍可用于方式0、1、2,但不能使用中断方式。
只有将T/C1用做串行口的波特率发生器时,T/C0才工作在方式3,以便增加一个定时器。
1、 T/C2的工作方式
定时器/计数器2包含一个16位重装载方式,T/C2在计数溢出后,自动在瞬间重装载。自动重装可外部引脚T2EX的负跳变开始,这样外部引脚可用于产生和其他硬件计数器的同步信号。T/C2可以作看门狗或定时溢出的定时器。
T/C2还有捕获方式。把瞬时计数值传到另外的CPU可读取的寄存器对。
定时器/j计数器初始化
初始化步骤
在使用8051的定时器/计数器前,应对它进行编程初始化,主要是对TCON和TMOD编程,还需计算和装载T/C的计数初值。一般步骤:
1) 确定T/C的工作方式——编程TMOD寄存器。
2) 计算T/C中的计数初值,并装载到TH和TL.
3) T/C在中断方式工作时,须开CPU中断和源中断——编程IE寄存器。
4) 启动定时器/计数器——编程TCON中TR1或TR0位。
2.、计数初值的计算
1》定时器的计算初值
在定时器方式下,T/C是对机器周期脉冲计数的,如果f osc=6MHz,一个机器周期为12//f osc=2us,则
方式0 13位定时器最大定时间隔=213 ×2us=16.384ms;
方式1 16位定时器最大定时间隔=216×2us=131.072ms;
方式2 8位定时器最大定时间隔=28×2us=512us;
若使T/C工作在定时器方式1,要求定时1ms,求计数初值。如设计数初值为x 则有
(216 —x)×2us=1000us x=216 —500
因此,TH、TL可置65536—500。
2》计数器的计数初值
在计数器方式下:
方式0 13位计数器的满计数值=213 =8192;
方式1 16位计数器的满计数值=216 =65536;
方式0 13位计数器的满计数值=28=256;
若使T/C工作在计数器方式2,则要求计数10个脉冲的计数初值。如设计数初值为x,则有28 —x=10
因此,TH=TL=256—10
展开阅读全文