单片机定时器计数器Word文档下载推荐.docx
《单片机定时器计数器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机定时器计数器Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
B3
B2
B1
B0
位符号
GATE
C/T
M1
M0
定时/计数器T1定时/计数器T0
表6—1TMOD控制位功能
符号
功能说明
门控位。
GATE=0,用运行控制位TR0(TR1)启动定时器。
GATE=1,用外中断请求信号输入端(INT1或INT0)和TR0(TR1)共同启动定时器。
C/T
定时方式或计数方式选择位。
C/T=0,定时工作方式。
C/T=1,计数工作方式。
M1M0
工作方式选择位。
M1M0=00方式0,13位计数器。
M1M0=01方式1,16位计数器。
M1M0=10方式2,具有自动再装入的8位计数器。
M1M0=11方式3,定时器0分成两个8位计数器,定时器1停止计数。
2.定时器控制寄存器TCON
定时器控制寄存器TCON地址88H,可以位寻址,TCON主要用于控制定时器的操作及中断控制。
有关中断内容在第四章已说明。
此处只对定时控制功能加以介绍。
表6—2给出了TCON有关控制位功能:
TCON
位地址
8F
8E
8D
8C
8B
8A
89
88
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
表6—2TCON有关控制位功能
符号
功能功功能功能说明
计数/计时1溢出标志位。
计数/计时1溢出(计满)时,该位置1。
在中断方式时,此位作中断标志位,在转向中断服务程序时由硬件自动清0。
在查询方式时,也可以由程序查询和清“0”。
定时器/计数器1运行控制位。
TR1=0,停止定时器/计数器1工作。
TR1=1,启动定时器/计数器1工作。
该位由软件置位和复位。
计数/计时0溢出标志位。
计数/计时0溢出(计满)时,该位置1。
定时器/计数器0运行控制位。
TR0=0,停止定时器/计数器0工作。
TR0=1,启动定时器/计数器0工作。
系统复位时,TMOD和TCON寄存器的每一位都清零。
三、工作方式及应用
用户可通过编程对专用寄存器TMOD中的M1,M0位的设置,选择四种操作方式。
(一)方式0(以T0为例)
在此方式中,定时寄存器由TH0的8位和TL0的5位(其余位不用)组成一个13位计数器。
当GATE=0时,只要TCON中的TR0为1,13位计数器就开始计;
当GATE=1以及TR0=1时,13位计数器是否计数取决于INT0引脚信号,当INT0由0变1时开始计数,当INT0由1变为0时停止计数。
当13位计数器溢出时,TCON的TF0位就由硬件置1,同时将计数器清"
0"
。
当方式0为定时工作方式时,定时时间计算公式为:
(213-计数初值X)×
晶振周期×
12
当方式0为计数工作方式时,计数值的范围是:
1-213(8192)。
方式0内部逻辑框图如图6—2所示:
12分频
T0启动C/T=0F晶振
TL0
TH0
C/T=1T0(P3.4)
计数脉冲输入
1
TR0
GATE
INT0
图6—2方式0内部逻辑结构图
例6—1设单片机晶振频率为6MHz,试用T0在P1.0端线输出周期为1ms的方波脉冲,如图6-3所示。
试用方式0分别以查询方式和中断方式实现。
0.5ms
1.
P1.0
8051
1ms
图6—3例6—1示意图
解:
1.采用查询方式。
(1)计数初值计算。
由题意可得,只需从P1.0端线每延时500s后交替输出高低电平即可。
得:
∵(213-X)1(s)×
12=500s
6
∴记数初值X=213-250=794210=1111100000110B
即TH0=F8H,TL0=06H
(2)T0初始化
计数器T1计数器T0
X
M1M0=00,方式0
C/T=0,定时
GATE=0,TR0启动
得(TMOD)=00H
由此可得参考程序如下:
ORG0000H
AJMPMAIN;
转向主程序。
ORG0040H
MAIN:
MOVSP,#30H;
堆栈设置。
MOVTMOD,#00H;
TMOD初始化。
MOVTH0,#0F8H
MOVTL0,#06H;
设置计数初值。
MOVIE,#00H;
禁止中断。
SETBTR0;
启动T0。
LOOP:
JBCTF0,LOOP1;
定时到,转LOOP1,并将TF0清零,否则
按原顺序执行。
AJMPLOOP;
继续查询。
LOOP1:
MOVTH0,#0F8H;
重新设置计数初值。
MOVTL0,#06H
CPLP1.0;
输出状态翻转。
AJMPLOOP;
返回LOOP。
2.采用中断方式
中断方式中计数初值X和TMOD的设置与查询方式相同。
采用中断方式参考程序如下:
ORG0000H
AJMPMAIN;
ORG000BH;
T0中断服务程序固定入口地址。
AJMPZD;
转向T0中断服务程序。
ORG0040H
MOVSP,#30H;
设置堆栈指针。
MOVTH0,#0F8H;
MOVTL0,#06H
SETBET0;
开放T0中断。
SETBEA;
开放总中断。
HERE:
AJMPHERE;
等待中断。
ZD:
CPLP1.0;
输出取反。
MOVTL0,#06H
RETI;
返回。
在实际应用中,由于中断请求及响应过程要占用几个机器周期时间,故实际输出波形的周期略大于1ms,可在调试中适当修改计数初值解决。
(二)方式1
方式1采用16位计数结构的工作方式,其余与方式0相同。
显然方式1的定时时间计算公式为:
(216-计数初值)×
计数范围是:
1─216(65536)
(三)方式2
方式2是由TL组成8位计数器。
TH作为常数缓冲器,由软件预置初始值。
当TL产生溢出时,一方面使溢出标志位TF置1;
同时把TH的8位数据重新装入TL中,即方式2具有自动重新加载功能。
方式2的逻辑结构见图6—4(以定时器/计数器0为例)。
8位启动
计数脉冲
自动加载
TRO
1
图6—4方式2逻辑结构图
例6—2用8051对外部脉冲进行计数,每计满100个脉冲后使内部40H单元内容加1,用T0以方式2中断实现,TR0启动。
T0
计数脉冲
例6—2示意图
解:
1.计数初值计算(方式2)
∵(28-X)=100
∴X=28-100=156D=9CH
2.TMOD设置
用T0以方式2实现,TR0启动,可得:
(TMOD)=00000110B=06H
3.中断系统设置
EA=1,ET0=1
4.参考程序:
AJMPMAIN
ORG000BH
AJMPZD
ORG0040H
MOVSP,#30H;
初始化。
MOVTMOD,#06H
MOVTH0,#9CH
MOVTL0,#9CH
MOV40H,#00H
SETBEA;
中断设置。
SETBET0
SETBTR0
AJMP$
ORG0080H
INC40H
RETI
(四)方式3
在方式3中,TL0和TH0成为两个相互独立的8位计数器。
TL0占用了全部T0的控制位和信号引脚,即GATE、C/T、TR0、TF0等。
而TH0只用作定时器使用。
而且由于定时器/计数器0的控制位已被TL0独占,因此TH0只好借用定时器/计数器1的控制位TR1和TF1进行工作。
同时,由于TR1,TF1已“出借”给TH0,TH1和TL1的溢出就送给串行口,作为串行口时钟信号发生器(即波特率信号发生器,详见第九章),并且只要设置好工作方式(方式0,方式1,方式2)以及计数初值,T1无须启动使可自动运行。
如要停止T1工作,只要将其设置工作方式3即可。
例6—3试用T0在P1.0输出周期为400s,占空比为10:
1的矩形脉冲,以定时工作方式2编程实现(查询方式)。
设F晶振=6MHz,如图6—5所示:
T1T2
T
400s
T=T1+T2
T:
T2=101
图6—5例6—3示意图
由题意可知,P1.0输出高电平持续360s,输出低电平持续40s。
1.计数初值计算:
定时工作方式2中TL0为8位计数器,TH0为预置寄存器。
延时360s计数初值X1计算公式为:
∵(28-X1)×
12(s)÷
6=360s
X1=4CH
短延时40s计数初值X2计算公式为:
(28-X2)×
12(s)÷
6=40s
X2=ECH
(TMOD)=00000010H=02H
3.采用查询方式(禁止中断)
4.程序流程图(算法)如图6—6所示:
开始
P1.01
初始化
TL04CH
TH0ECH
启动T0
定时到?
N
Y
P1.0状态取反
P1.0=1?
N
TH04CH
图6—6例6—3程序流程图(算法)
(5)参考程序如下:
MOVSP,#30H
SETBP1.0;
P1.0←1。
MOVTMOD,#02H;
MOVTL0,#4CH;
装入计数初值。
MOVTH0,#0ECH
AGAIN:
SETBTR0;
JBCTF0,LOOP1;
AJMPLOOP;
未到,继续等待。
LOOP1:
CPLP1.0;
定时到,P1.0状态取反。
JNBP1.0,LOOP2;
P1.0为零转移。
MOVTH0,#0ECH;
P1.0为1,装短延时计数初值。
AJMPAGAIN;
循环。
LOOP2:
MOVTH0,#4CH;
P1.0为零,装长延时计数初值。
思考题和习题
6—1请叙述8051单片机四种定时工作方式的特点。
6—2设晶振频率为12MHz,试编写一个用软件延时10ms的子程序。
6—3试用软、硬件相结合的方法编写一个延时10s的子程序。
6—4试编写程序,使T0以方式1每隔20ms向CPU发出中断申请,设晶振频率为6MHz,TR0启动,查询实现。
6—5试编写程序,使8051对外部事件(脉冲)进行计数,每计满1000个脉冲后使内部RAM60H单元内容加一,用T0以方式1中断实现,TR0启动。
6—6试编程用T0以方式1从P.0端线输出频率为50KHz的等宽矩形波。
已知晶振频率为12MHz,TR0启动,查询方式实现。
6—7有晶振频率为6MHz的MCS—51单片机,使用定时器T1以定时工作方式2从P1.2端线输出周期为200s,占空比为5:
1的矩形脉冲,TR1启动。
200s
题6—7