单片机定时器计数器.docx
- 文档编号:26262231
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:14
- 大小:20.18KB
单片机定时器计数器.docx
《单片机定时器计数器.docx》由会员分享,可在线阅读,更多相关《单片机定时器计数器.docx(14页珍藏版)》请在冰豆网上搜索。
单片机定时器计数器
第六章定时器/计数器
第一节概述
8051内部提供两个十六位的定时器/计数器T0和T1,它们既可以用作硬件定时,也可以对外部脉冲计数。
1.计数功能:
所谓计数功能是指对外部脉冲进行计数。
外部事件的发生以输入脉冲下降沿有效,从单片机芯片T0(P3.4)和T1(P3.5)两个引脚输入,最高计数脉冲频率为晶振频率的1/24。
2.定时功能:
以定时方式工作时,每个机器周期使计数器加1,由于一个机器周期等于12个振荡脉冲周期,因此如单片机采用12MHz晶振,则计数频率为12MHz/12=1MHz。
即每微秒计数器加1。
这样就可以根据计数器中设置的初值计算出定时时间。
第二节定时器/计数器的基本结构、工作方式及应用
一、定时器/计数器基本结构
定时器/计数器的基本结构如图6-1。
T0由TH0和TL0两个八位二进制加法计数器组成十六位二进制加法计数器;T1由TH1和TL1两个八位二进制加法计数器组成十六位二进制加法计数器。
P3.5(T1)P3.4(T0)
TH1TL1TH0TL0
CPU
TCONTMOD
图6-1定时器/计数器基本组成
二、定时器/计数器控制寄存器
1.定时器方式控制寄存器TMOD
定时器方式控制寄存器地址89H,不可位寻址。
TMOD寄存器中高4位定义T1,低4位定义T0。
其中M1,M0用来确定所选工作方式如表6—1:
TMOD
位序
B7
B6
B5
B4
B3
B2
B1
B0
位符号
GATE
C/T
M1
M0
GATE
C/T
M1
M0
定时/计数器T1定时/计数器T0
表6—1TMOD控制位功能
符号
功能说明
GATE
门控位。
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有关控制位功能
符号
功能功功能功能说明
TF1
计数/计时1溢出标志位。
计数/计时1溢出(计满)时,该位置1。
在中断方式时,此位作中断标志位,在转向中断服务程序时由硬件自动清0。
在查询方式时,也可以由程序查询和清“0”。
TR1
定时器/计数器1运行控制位。
TR1=0,停止定时器/计数器1工作。
TR1=1,启动定时器/计数器1工作。
该位由软件置位和复位。
TF0
计数/计时0溢出标志位。
计数/计时0溢出(计满)时,该位置1。
在中断方式时,此位作中断标志位,在转向中断服务程序时由硬件自动清0。
在查询方式时,也可以由程序查询和清“0”。
TR0
定时器/计数器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晶振
TF0
TL0
TH0
C/T=1T0(P3.4)
计数脉冲输入
1
TR0
1
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
X
X
X
0
0
0
0
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
MAIN:
MOVSP,#30H;设置堆栈指针。
MOVTMOD,#00H;TMOD初始化。
MOVTH0,#0F8H;设置计数初值。
MOVTL0,#06H
SETBET0;开放T0中断。
SETBEA;开放总中断。
SETBTR0;启动T0。
HERE:
AJMPHERE;等待中断。
ZD:
CPLP1.0;输出取反。
MOVTH0,#0F8H;重新设置计数初值。
MOVTL0,#06H
RETI;返回。
在实际应用中,由于中断请求及响应过程要占用几个机器周期时间,故实际输出波形的周期略大于1ms,可在调试中适当修改计数初值解决。
(二)方式1
方式1采用16位计数结构的工作方式,其余与方式0相同。
显然方式1的定时时间计算公式为:
(216-计数初值)×晶振周期×12
计数范围是:
1─216(65536)
(三)方式2
方式2是由TL组成8位计数器。
TH作为常数缓冲器,由软件预置初始值。
当TL产生溢出时,一方面使溢出标志位TF置1;同时把TH的8位数据重新装入TL中,即方式2具有自动重新加载功能。
方式2的逻辑结构见图6—4(以定时器/计数器0为例)。
TL0
TF0
8位启动
计数脉冲
TH0
自动加载
TRO
1
1
GATE
INT0
图6—4方式2逻辑结构图
例6—2用8051对外部脉冲进行计数,每计满100个脉冲后使内部40H单元内容加1,用T0以方式2中断实现,TR0启动。
T0
8051
计数脉冲
例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.参考程序:
ORG0000H
AJMPMAIN
ORG000BH
AJMPZD
MAIN:
ORG0040H
MOVSP,#30H;初始化。
MOVTMOD,#06H
MOVTH0,#9CH
MOVTL0,#9CH
MOV40H,#00H
SETBEA;中断设置。
SETBET0
SETBTR0
AJMP$
ORG0080H
ZD:
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
P1.0
8051
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
2.TMOD设置
(TMOD)=00000010H=02H
3.采用查询方式(禁止中断)
4.程序流程图(算法)如图6—6所示:
开始
P1.01
初始化
TL04CH
TH0ECH
启动T0
定时到?
N
Y
P1.0状态取反
P1.0=1?
N
Y
TH04CH
TH0ECH
图6—6例6—3程序流程图(算法)
(5)参考程序如下:
ORG0000H
AJMPMAIN
ORG0040H
MAIN:
MOVSP,#30H
SETBP1.0;P1.0←1。
MOVTMOD,#02H;TMOD初始化。
MOVIE,#00H;禁止中断。
MOVTL0,#4CH;装入计数初值。
MOVTH0,#0ECH
AGAIN:
SETBTR0;启动T0。
LOOP:
JBCTF0,LOOP1;定时到?
AJMPLOOP;未到,继续等待。
LOOP1:
CPLP1.0;定时到,P1.0状态取反。
JNBP1.0,LOOP2;P1.0为零转移。
MOVTH0,#0ECH;P1.0为1,装短延时计数初值。
AJMPAGAIN;循环。
LOOP2:
MOVTH0,#4CH;P1.0为零,装长延时计数初值。
AJMPAGAIN;循环。
思考题和习题
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启动。
T1T2
P1.0
8051
200s
题6—7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 定时器 计数器