第六章
MCS-51内部定时器 /计数器
MCS-51单片机内部有带有二进制 16位定时器 /
计数器
8031/8051/8751( T0,T1)
8032/8052/8752( T0,T1,T2)
①可独立工作于定时或计数
②加 1计数,计数初值程序设定
③启动计数后与 CPU并行工作
④ 计数满后,自动回 0,并产生溢出中断请求
1.定时 /计数器的内部结构及工作原理
16位加 1计数器两个 8位的 SFR( TH0和 TL0)
端口地址( 8CH,8AH)
16位加 1计数器复位后初始值为 0000H,用来存放定时或计数的初值,初值可根据需要设定。
每来一个计数脉冲,计数器加 1,加满后( 0000H),将产生一个溢出脉冲,使标志位 TF0置,1”,该标志位可产生一个中断请求,也可供 CPU查询。
① 定时( C/T=0),计数脉冲来自于系统的主时钟 fosc,经
12分频后( 1个机器周期),做计数器的计数脉冲。
②计数( C/T= 1),计数脉冲来自于 T0的外部引脚,检测到负跳变,加 1计数,计数频率不能高于 fosc /24 。
TR0 启动控制位
GATE 门控设置位
GATE =0,TR0= 1时,启动计数器计数当 GATE=1时,T0(或 T1)可工作于门控工作方式,可测量正方波宽度,被测方波信号由 INT0 引脚输入。
2,定时器/计数器的控制定时器/计数器可编程的部件,工作之前必须初始化 。
1) 工作方式寄存器 TMOD( 89H)
TMOD控制 T0和 T1的工作方式高四位为 T1的方式控制字段低四位为 T0的方式控制字段
M1和 M0(工作方式选择位)
C/ T 计数/定时方式选择位
C/ T= 0,定时方式,对机器周期计数
C/ T= 1,计数方式,对来自 T0或 T1引脚的外来脉冲计数
GATE 门控设置位
GATE= 0,禁止门控工作方式
GATE= 1,允许门控工作方式门控方式时,TR0置 1,具备启动定时器的条件,INT0引脚出现 0→1 的跳变,即可自动启动计数器计数,当引脚出现 1→0 的跳变,自动停止计数器计数,计数值就是被测信号的宽度,计数器应工作于定时方式。
2) 控制寄存器 TCON( 88H)
TCON 控制定时器的启动、停止以及定时器的溢出和中断情况
TF0(或 TF1):计数器满溢出标志位。
当 TF= 1时,表示计数器已满( 0000H)
当工作于查询方式时,由指令将该位清 0
当工作于中断方式时,CPU响应中断时,由硬件自动清零
TR0(或 TRl):计数器启停控制位,
TR= 1,启动计数
TR= 0,停止计数
IE0(或 IEl):外部中断申请标志位,
IE=1,有中断请求
IE=0,无中断请求
IT0 (或 ITl):外部中断申请信号的触发方式选择位
IT=1,负边沿触发
IT=0,低电平触发
3 定时 /计数器的工作方式
(1)、工作方式 0
16位的计数器 (TH和 TL)只用了 13位构成 13位定时器/计数器。 TH 高 8位,TL低 5位,TL高 3位未用,当 TL
的低 5位计满时,向 TH进位,而 TH溢出后对溢出标志位 TF置 1。再次计数须装初值。
(2)、工作方式 1
16位的计数器 (TH和 TL),TH 高 8位,TL低 8位,工作情况与方式 0相同,最大计数值是方式 0的 8倍。
例,设单片机主时钟 fosc=12MHz,T0工作于定时方式 1,定时时间 2ms,请编出初始化程序:
①计数器初值:
Tc= 216- 2ms/1us=63536=F830H
② 设置工作方式控制字
TMOD=00000001B=01H
③ 初始化程序:
MOV TMOD,#01H ;送控制字
MOV TH0,#0F8H ;送初值高 8位
MOV TL0,#30H ;送初值低 8位
SETB TR0 ;启动定时器
(3)、工作方式 2
重复置初值的 8位计数器,初值自动装载方式。
将 16位计数器拆成 2个 8位计数器,利用 TL做 8位加
1计数器,计满后,将产生一个溢出脉冲,在该脉冲的作用下,可自动将 TH的初值装入 TL中,使 TL
可连续计数,周而复始。
(4)、工作方式 3
方式 3只适用于 T0,T0被拆成两个相互独立的 8位计数器,TL0使用 T0的原有资源,可工作于定时或计数。而 TH0则使用 T1的 TF1位和 TR1位,只能工作于定时方式,方式 3时,可额外增加 1个 8位定时器。
4 定时 /计数器的应用举例例 应用定时器 T0产生 1ms定时,并使 P1.0输出周期为 2ms的方波,已知晶振频率为 6MHz,用查询方式编写程序。
计数初值 X:
( 213- X) × 12× ( 1/6) × 10- 6= 1× 10- 3
得 X= 7692
13位二进制表示为 X= 1111000001100B
TH0=0F0H(高 8位)
TL0= 0CH(低 5位)
查询 TF0状态
ORG 2000H
MOV TMOD,#00H
MOV TL0,#0CH
MOV TH0,#0F0H
SETB TR0
LOOP:JBC TF0,PE
AJMP LOOP
PE,MOV TL0,#0CH
MOV TH0,#0F0
CPL P1.0
AJMP LOOP
END
例 设 8031时钟频率 ΦCLK为 12MHz,请编出利用定时器 /计数器 T0在 P1.0引脚上输出 2秒的方波程序。
方式 0 Tmax=213× 1us=8.192ms
方式 1 Tmax=216× 1us=65.536ms
方式 2 Tmax=28× 1us=0.256ms
① 主程序
T0的定时初值为:
Tc= 216- 50ms/1μs=15536=3CB0H
ORG 0000H
LJMP START
ORG 1000H
START,MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV IE,#82H
SETB TR0
MOV R0,#14H
LOOP,SJMP $
② 中断服务程序
ORG 000BH
AJMP BRT0
ORG 0080H
BRT0,DJNZ R0,NEXT
CPL P1.0
MOV R0,#14H
NEXT,MOV TH0,#3CH
MOV TL0,#0B0H
RET1
END
例 用定时器 T1,采用工作方式 2,计数,要求每计满 156次,将 P1.7取反。
计数初值,X= 28- 156= 100= 64H
TH1=TL1=64H,TMOD=60H(计数方式 2)
ORG 2000H
MOV TMOD,#60H
MOV TH1,#64H
MOV TL1,#64H
SETB TR1
LOOP:JBC TF1,REP
SJMP LOOP
REP,CPL P1.7
SJMP LOOP
1),借用定时器 /计数器溢出中断扩展扩展方法采用 8259A扩展借用定时器 /计数器溢出中断扩展使用硬件申请软件查询扩展中断原理:外部中断请求信号从 MCS-
51T0或 T1引脚进入,TC0或 TC1 ( 16
位) 由全,1” → 全,0”时,向 CPU发出溢出中断请求。
×
√
√
5.中断源的扩展方法:
使借用的定时器工作在方式 2外部计数方式(即 8位自动装载方法)
将借用的定时器的计数初值定为 FFFFH(满量程)
将借用的定时器的计数输入端 T0( P3.4) 或 T1( P3.5)
作为扩展外部中断源的中断请求输入线
在借用的定时器中断入口地址 000BH(或 001BH) 处存放一条转移指令注意:
T0,T1引脚线应作为扩展外部中断请求输入线
主程序初始化还应包括对定时器 /计数器的初始化例,写出定时器 /计数器 TC0中断源用作外部中断源的初始化程序分析,TC0设定为工作方式 2
计数初值( TH0) =( TL0) =0FFH
CPU开中断允许 TC0中断,启动 TC0工作程序,ORG 2000H
MOV TMOD,#06H ; TC0工作方式设定
MOV TL0,#0FFH ;设定 TC0计数初值
MOV TH0,#0FFH
SETB EA ; CPU开中断
SETB ET0 ;允许 TC0中断
SETB TR0 ; TC0计数
END
2),使用硬件申请软件查询扩展中断理论上,可处理任意多个外部中断源借用定时器 /计数器溢出中断扩展外部中断源存在的问题:
占用计数器,以消耗定时器 /计数器功能为代价
扩展数目有限例,设 5个外部中断源( XI0,XI1,XI2,XI3,XI4),若这 5
个外部中断源均以高电平有效,均以 CPU实际响应中断请求之前保持有效,且能在执行该中断服务程序完毕返回前取消,则外部中断源输入可采用如图所示的电路,写出相应的程序程序:
ORG 0003H
LJMP EXINT0
ORG 0013H
LJMP EXINT1
┆
ORG 3000H ; EXI0中断服务程序
EXINT0,PUSH PSW
PUSH ACC
┆
POP ACC
POP PSW
RETI
ORG 4000H
EXINT1,PUSH PSW
PUSH ACC
ANL P1,#0FH
MOV A,P1
JNB ACC.0,N1
LJMP BR1
N1,JNB ACC.1,N2
LJMP BR2
N2,JNB ACC.2,N3
LJMP BR3
N3,JNB ACC.3,N4
LJMP BR4
N4,POP ACC
POP PSW
RETI
BR1,… ; XI1中断服务程序
┆
RETI
BR2,… ; XI2中断服务程序
┆
RETI
BR3,… ; XI3中断服务程序
┆
RETI
BR4,… ; XI4中断服务程序
┆
RETI
硬件申请软件查询法的特点:
优点:
优先权的次序 (即询问的次序),最先询问的,优先级最高
省硬件,即不需要有判断与确定优先级的硬件排队电路缺点:
在中断源较多的情况下,由询问转至相应的服务入口的时间较长
MCS-51内部定时器 /计数器
MCS-51单片机内部有带有二进制 16位定时器 /
计数器
8031/8051/8751( T0,T1)
8032/8052/8752( T0,T1,T2)
①可独立工作于定时或计数
②加 1计数,计数初值程序设定
③启动计数后与 CPU并行工作
④ 计数满后,自动回 0,并产生溢出中断请求
1.定时 /计数器的内部结构及工作原理
16位加 1计数器两个 8位的 SFR( TH0和 TL0)
端口地址( 8CH,8AH)
16位加 1计数器复位后初始值为 0000H,用来存放定时或计数的初值,初值可根据需要设定。
每来一个计数脉冲,计数器加 1,加满后( 0000H),将产生一个溢出脉冲,使标志位 TF0置,1”,该标志位可产生一个中断请求,也可供 CPU查询。
① 定时( C/T=0),计数脉冲来自于系统的主时钟 fosc,经
12分频后( 1个机器周期),做计数器的计数脉冲。
②计数( C/T= 1),计数脉冲来自于 T0的外部引脚,检测到负跳变,加 1计数,计数频率不能高于 fosc /24 。
TR0 启动控制位
GATE 门控设置位
GATE =0,TR0= 1时,启动计数器计数当 GATE=1时,T0(或 T1)可工作于门控工作方式,可测量正方波宽度,被测方波信号由 INT0 引脚输入。
2,定时器/计数器的控制定时器/计数器可编程的部件,工作之前必须初始化 。
1) 工作方式寄存器 TMOD( 89H)
TMOD控制 T0和 T1的工作方式高四位为 T1的方式控制字段低四位为 T0的方式控制字段
M1和 M0(工作方式选择位)
C/ T 计数/定时方式选择位
C/ T= 0,定时方式,对机器周期计数
C/ T= 1,计数方式,对来自 T0或 T1引脚的外来脉冲计数
GATE 门控设置位
GATE= 0,禁止门控工作方式
GATE= 1,允许门控工作方式门控方式时,TR0置 1,具备启动定时器的条件,INT0引脚出现 0→1 的跳变,即可自动启动计数器计数,当引脚出现 1→0 的跳变,自动停止计数器计数,计数值就是被测信号的宽度,计数器应工作于定时方式。
2) 控制寄存器 TCON( 88H)
TCON 控制定时器的启动、停止以及定时器的溢出和中断情况
TF0(或 TF1):计数器满溢出标志位。
当 TF= 1时,表示计数器已满( 0000H)
当工作于查询方式时,由指令将该位清 0
当工作于中断方式时,CPU响应中断时,由硬件自动清零
TR0(或 TRl):计数器启停控制位,
TR= 1,启动计数
TR= 0,停止计数
IE0(或 IEl):外部中断申请标志位,
IE=1,有中断请求
IE=0,无中断请求
IT0 (或 ITl):外部中断申请信号的触发方式选择位
IT=1,负边沿触发
IT=0,低电平触发
3 定时 /计数器的工作方式
(1)、工作方式 0
16位的计数器 (TH和 TL)只用了 13位构成 13位定时器/计数器。 TH 高 8位,TL低 5位,TL高 3位未用,当 TL
的低 5位计满时,向 TH进位,而 TH溢出后对溢出标志位 TF置 1。再次计数须装初值。
(2)、工作方式 1
16位的计数器 (TH和 TL),TH 高 8位,TL低 8位,工作情况与方式 0相同,最大计数值是方式 0的 8倍。
例,设单片机主时钟 fosc=12MHz,T0工作于定时方式 1,定时时间 2ms,请编出初始化程序:
①计数器初值:
Tc= 216- 2ms/1us=63536=F830H
② 设置工作方式控制字
TMOD=00000001B=01H
③ 初始化程序:
MOV TMOD,#01H ;送控制字
MOV TH0,#0F8H ;送初值高 8位
MOV TL0,#30H ;送初值低 8位
SETB TR0 ;启动定时器
(3)、工作方式 2
重复置初值的 8位计数器,初值自动装载方式。
将 16位计数器拆成 2个 8位计数器,利用 TL做 8位加
1计数器,计满后,将产生一个溢出脉冲,在该脉冲的作用下,可自动将 TH的初值装入 TL中,使 TL
可连续计数,周而复始。
(4)、工作方式 3
方式 3只适用于 T0,T0被拆成两个相互独立的 8位计数器,TL0使用 T0的原有资源,可工作于定时或计数。而 TH0则使用 T1的 TF1位和 TR1位,只能工作于定时方式,方式 3时,可额外增加 1个 8位定时器。
4 定时 /计数器的应用举例例 应用定时器 T0产生 1ms定时,并使 P1.0输出周期为 2ms的方波,已知晶振频率为 6MHz,用查询方式编写程序。
计数初值 X:
( 213- X) × 12× ( 1/6) × 10- 6= 1× 10- 3
得 X= 7692
13位二进制表示为 X= 1111000001100B
TH0=0F0H(高 8位)
TL0= 0CH(低 5位)
查询 TF0状态
ORG 2000H
MOV TMOD,#00H
MOV TL0,#0CH
MOV TH0,#0F0H
SETB TR0
LOOP:JBC TF0,PE
AJMP LOOP
PE,MOV TL0,#0CH
MOV TH0,#0F0
CPL P1.0
AJMP LOOP
END
例 设 8031时钟频率 ΦCLK为 12MHz,请编出利用定时器 /计数器 T0在 P1.0引脚上输出 2秒的方波程序。
方式 0 Tmax=213× 1us=8.192ms
方式 1 Tmax=216× 1us=65.536ms
方式 2 Tmax=28× 1us=0.256ms
① 主程序
T0的定时初值为:
Tc= 216- 50ms/1μs=15536=3CB0H
ORG 0000H
LJMP START
ORG 1000H
START,MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV IE,#82H
SETB TR0
MOV R0,#14H
LOOP,SJMP $
② 中断服务程序
ORG 000BH
AJMP BRT0
ORG 0080H
BRT0,DJNZ R0,NEXT
CPL P1.0
MOV R0,#14H
NEXT,MOV TH0,#3CH
MOV TL0,#0B0H
RET1
END
例 用定时器 T1,采用工作方式 2,计数,要求每计满 156次,将 P1.7取反。
计数初值,X= 28- 156= 100= 64H
TH1=TL1=64H,TMOD=60H(计数方式 2)
ORG 2000H
MOV TMOD,#60H
MOV TH1,#64H
MOV TL1,#64H
SETB TR1
LOOP:JBC TF1,REP
SJMP LOOP
REP,CPL P1.7
SJMP LOOP
1),借用定时器 /计数器溢出中断扩展扩展方法采用 8259A扩展借用定时器 /计数器溢出中断扩展使用硬件申请软件查询扩展中断原理:外部中断请求信号从 MCS-
51T0或 T1引脚进入,TC0或 TC1 ( 16
位) 由全,1” → 全,0”时,向 CPU发出溢出中断请求。
×
√
√
5.中断源的扩展方法:
使借用的定时器工作在方式 2外部计数方式(即 8位自动装载方法)
将借用的定时器的计数初值定为 FFFFH(满量程)
将借用的定时器的计数输入端 T0( P3.4) 或 T1( P3.5)
作为扩展外部中断源的中断请求输入线
在借用的定时器中断入口地址 000BH(或 001BH) 处存放一条转移指令注意:
T0,T1引脚线应作为扩展外部中断请求输入线
主程序初始化还应包括对定时器 /计数器的初始化例,写出定时器 /计数器 TC0中断源用作外部中断源的初始化程序分析,TC0设定为工作方式 2
计数初值( TH0) =( TL0) =0FFH
CPU开中断允许 TC0中断,启动 TC0工作程序,ORG 2000H
MOV TMOD,#06H ; TC0工作方式设定
MOV TL0,#0FFH ;设定 TC0计数初值
MOV TH0,#0FFH
SETB EA ; CPU开中断
SETB ET0 ;允许 TC0中断
SETB TR0 ; TC0计数
END
2),使用硬件申请软件查询扩展中断理论上,可处理任意多个外部中断源借用定时器 /计数器溢出中断扩展外部中断源存在的问题:
占用计数器,以消耗定时器 /计数器功能为代价
扩展数目有限例,设 5个外部中断源( XI0,XI1,XI2,XI3,XI4),若这 5
个外部中断源均以高电平有效,均以 CPU实际响应中断请求之前保持有效,且能在执行该中断服务程序完毕返回前取消,则外部中断源输入可采用如图所示的电路,写出相应的程序程序:
ORG 0003H
LJMP EXINT0
ORG 0013H
LJMP EXINT1
┆
ORG 3000H ; EXI0中断服务程序
EXINT0,PUSH PSW
PUSH ACC
┆
POP ACC
POP PSW
RETI
ORG 4000H
EXINT1,PUSH PSW
PUSH ACC
ANL P1,#0FH
MOV A,P1
JNB ACC.0,N1
LJMP BR1
N1,JNB ACC.1,N2
LJMP BR2
N2,JNB ACC.2,N3
LJMP BR3
N3,JNB ACC.3,N4
LJMP BR4
N4,POP ACC
POP PSW
RETI
BR1,… ; XI1中断服务程序
┆
RETI
BR2,… ; XI2中断服务程序
┆
RETI
BR3,… ; XI3中断服务程序
┆
RETI
BR4,… ; XI4中断服务程序
┆
RETI
硬件申请软件查询法的特点:
优点:
优先权的次序 (即询问的次序),最先询问的,优先级最高
省硬件,即不需要有判断与确定优先级的硬件排队电路缺点:
在中断源较多的情况下,由询问转至相应的服务入口的时间较长