C51 T and C● 80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。
● 对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。
● 计数器由二个8位计数器组成。
● 定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。
调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。
● 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚Tx(P3.4、P3.5)输入。
且外部脉冲的最高频率不能超过时钟频率的1/24一、定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。
TMOD 是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON 是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
二、定时/计数器的工作原理加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。
每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON 中TF0或TF1置1,向CPU 发出中断请求(定时/计数器中断允许时)。
如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。
计数值N 乘以机器周期Tcy 就是定时时间t 。
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。
在每个机器周期的S5P2期间采样T0、T1引脚电平。
当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。
由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。
当晶振频率为12MHz 时,最高计数频率不超过1/2MHz ,即计数脉冲的周期要大于2 s 。
3.3.2 定时/计数器的控制80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。
TMOD 用于设置其工作方式;TCON 用于控制其启动和中断申请。
一、工作方式寄存器TMOD :定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER )工作方式寄存器TMOD 用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。
其格式如下:GATE :门控位。
GATE =0时,只要用软件使TCON 中的TR0或TR1为1,就可以启动定时/计数器工作;GATA =1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。
即此时定时器的启动多了一条件。
:定时/计数模式选择位。
=0为定时模式; =1为计数模式。
M1M0:工作方式设置位。
定时/计数器有四种工作方式,由M1M0进行设置。
二、控制寄存器TCONTCON 的低4位用于控制外部中断,已在前面介绍。
TCON 的高4位用于控制定时/计数器的启动和中断申请。
其格式如下:▪ TF1(TCON.7):T1溢出中断请求标志位。
T1计数溢出时由硬件自动置TF1为1。
CPU 响应中断后TF1由硬件自动清0。
T1工作时,CPU 可随时查询TF1的状态。
所以,TF1可用作查询测试的标志。
TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
▪ TR1(TCON.6):T1运行控制位。
TR1置1时,T1开始工作;TR1置0时,T1停止工作。
TR1由软件置1或清0。
所以,用软件可控制定时/计数器的启动与停止。
▪ TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
▪ TR0(TCON.4):T0运行控制位,其功能与TR1类同。
3.3.3 定时/计数器的工作方式 T0(P3.4): T1(P3.5)1、计数器溢出位 TF0(TCON.5): 片内T/C 的T0溢出中断请求标志 TF0=1 向CPU 申请中断2、定时器运行控制位 TR0(TCON.4) 定时/计数器启动 TR0=1 启动定时/计数器TR0=0,停止定时/计数器 可置 1 或 清 03、工作方式控制 M1,M0 组合 工作方式0,1,2,3.4、门控位 GATE =0,由TR 启动定时器 GA TE =1,由外部中断(INT0或INT1)与TR 组合启动定时器。
5、C/T 方式选择位 =0 T 定时工作方式 =1 C 计数工作方式A 、中断申请 TF0(TCON.5): 片内T/C 的T0溢出中断请求标志 TF0=1 向CPU 申请中断B 、 中断允许 ET0(IE.1) 定时/计数器T0中断允许位 ET0=1 T0中断允许EA (IE.7) CPU 中断允许(总允许)位 EA=1 总中断允许C 、中断优先级 PT0(IP.1) 定时/计数器T0优先级设定位 PT0=1 高级, PT0= 0 低级 =0,C 计数工作方式,外部计数脉冲由引脚T0输入。
C/T C/T C/TC/T C/T C/TT or C设置步骤1、确定工作方式TMODa, 工作方式:确定MIM0 = 00,01,10,11b, 确定是T or C:C/T, C/T=0为定时模式, C/T =1为计数模式c, 开启T/C :GATE and TR , GATE=0,只要TR=1,则可启动定时/计数器工作GATE=1&& TR=1&&INT=1才能启动定时/计数器工作(TR=TR0或TR1; INT=INT0,INT1)2、开启T/C 运行,TR=1 启动T/C3、T/C 中断允许EA=1,ET=14、装载初值:一次计数时长t=12/f 初值n=2n -计数值N定时时长T=Nt00方式方式0: 13位。
THx 8位和TLx 低5而是向THx 进位,13位计满溢出,TFx 置“1”。
计数外部脉冲个数范围:1~8192(213)定时时间(T=1μs)范围:1μs ~8.19ms T=12/f(2)C/T=0为定时工作方式,计数脉冲为时钟频率fosc/12。
若f=12MHZ ,则 12T 时 =12×1/12MHZ )=1us 即是 计数一次时长 1us 。
计数值N+初值x=计数总值213 初值x=计数总值213–计数值N 计数值N =定时时间t ÷数一次时长(12×1/f)定时时间t=(213—初值x )*时钟周期*12 ( 时钟周期=1/f ) X = 213-定时时间t/时钟周期*12方式0 –定时 ( T0:TMOD=0Xf0,TR0=1,EA=1, ET0=1 ,TH0=0F8H , TL0=06H ) 工作方式:确定MIM0=00 确定是T 定时:C/T =0为定时模式 开启T/C :GATE and TR , GATE =0,TR=1;或GATE =1,TR=1,INT=1,才能启动定时/计数器 T/C 中断允许: EA=1, ET=1设最大值为 M, 计数值为 N, 初值为 X, 则 X 的计算方法如下: 计数状态: X=M -N M=(2n ) n=13 or 16 位 定时状态: X=M -定时时间/T T=12÷晶振频率计数外部脉冲个数范围:1~8192(213) T=12/f=12×1/6MHZ=2us定时时间(T=1μs)范围:1μs ~8.19ms T=12/f=12×1/12MHZ=1us (f 为该单片机晶振频率)TMOD=0x11设定时时长=250us ,f=12MHZ, 则计数初值 X=213 -(250us ÷1us )=8192-250=7942=0001 1111 0000 0110B 13位模式=1 1111 0000 0110 高8 TH=1111 1000=0F8H ,低5位TL=06H设定时时长=250us ,f=6MHZ, 则计数初值 X=213 -(250us ÷2us )=8192-125=8067=0001 1111 1000 0011B 13位模式=1111 1100 0 0011 高8=1111 1100 =0FCH ,低5位=03H ,则高8位放入TH,低5位放入TL方式0 –计数( C0:TMOD=0Xf4,TR0=1,EA=1, ET0=1 ,TH0=0E9H,TL0=18H) 工作方式:确定MIM0=00 确定是T 定时:C/T =1为计数模式 开启T/C :GATE and TR , GATE =0,TR=1;或GATE =1,TR=1,INT=1,才能启动定时/计数器 T/C 中断允许: EA=1, ET=1计数外部脉冲个数范围:1~8192(213)设最大值为 M, 计数值为 N, 初值为 X, 则 X 的计算方法如下: 初值X=M -N=(213)-N=8192-N M=(2n ) n=13 or 16 位TCON D7D0设定计数1000下,向外中断一次,则初值X=8192-1000=7192=1110 0000 1 1000=TH=0E9H,TL=18H01方式1方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。
定时/计数器工作于方式1时为一个16位的计数器。
其逻辑结构、操作及运行控制几乎与方式0完全—样,差别仅在于计数器的位数不同。
定时工作方式1时,定时时间为:定时时间 t =(216-计数初值n)×机器周期=( 2—初值N )×12/f 用于计数器工作方式时,最大计数值为: 216=65536计数个数与计数初值的关系为:N 总 =NT+N NT=( 216—初值N ) 总结: 工作方式1,2特点是计数溢出后,计数器回0,而不能自动重装初值。
方式1 –定时 ( T0:TMOD=0Xf1,TR0=1,EA=1, ET0=1 ,TH0=0FFH, TL0=83H ) 工作方式:确定MIM0=01 确定是T 定时:C/T =0为定时模式 开启T/C :GATE and TR , GATE =0,TR0=1;或GATE =1,TR=1,INT=1,才能启动定时/计数器 T/C 中断允许: EA=1, ET=1 定时工作方式1时,定时时间为:定时时间 t =(216-计数初值TC)×机器周期TZ TZ=12÷晶振频率f=12/f 用于计数器工作方式时,f OSC =12MHz ,1机器周期=1µS ; 最大计数值为: 216=65536计数外部脉冲个数范围:1~65536 (216) T=12/f=12×1/6MHZ=2us定时时间(T=1μs)范围:1μs ~65.536ms T=12/f=12×1/12MHZ=1us (f 为该单片机晶振频率) 设定时时长=250us ,f=6MHZ,定时器0,工作方式1则计数初值 X=216 –(250us ÷2us )=65536-125=65411=FF83 TH0=0FFH, TL0=83H方式1 –计数( C0:TMOD=0Xf5,TR0=1,EA=1, ET0=1 ,TH0=0E9H,TL0=18H) 工作方式:确定MIM0=01 确定是T 定时:C/T =1为计数模式 开启T/C :GATE and TR , GATE =0,TR0=1;或GATE =1,TR0=1,INT=1,才能启动定时/计数器 T/C 中断允许: EA=1, ET=1计数外部脉冲个数范围:1~65536设最大值为 M, 计数值为 N, 初值为 X, 则 X 的计算方法如下: 初值X=M -N=(216)-N=65536-N M=(2n ) n=13 or 16 位设定计数1000下,向外中断一次,则初值X=8192-1000=7192=1110 0000 1 1000=TH=0E9H,TL=18HTCON D7D0方式2为自动重装初值的8位计数方式。