第6章 AT89S51的定时器计数器
合集下载
《单片机原理及接口技术》第6章 AT89S51的定时器计数器
图6-9 T1工作于方式0的示意图
第6章 AT89S51的定时器/计数器
T1工作于方式1——M1=0,M0=1
图6-10 T1工作于方式1的示意图
T1工作于方式1——M1=0,M0=1
图6-11 T1工作于方式2的示意图
第6章 AT89S51的定时器/计数器
主要内容
1 定时器/计数器的结构与工作原理 2 与定时器/计数器相关的SFR 3 定时器/计数器的工作方式
图6-2 TMOD格式
TMOD的8位控制字分为2组,高4位控制T1,低4位控 制T0。
第6章 AT89S51的定时器/计数器
TMOD的各位说明: (1)GATE——门控位
当GATE=0时,仅由运行控制位TRx(x=0,1)来控制定 时器/计数器的运行。
当GATE=1时,用外部中断引脚( INT 0 或 INT1 )上 的电平与运行控制位TRx来共同控制定时器/计数器的运 行。 (2)M1、M0——工作方式选择位
M1、M0共有4种编码,对应于4种工作方式的选择, 如表6-1所示。
第6章 AT89S51的定时器/计数器
表6-1 工作方式选择位
M M0 1
工作方式
00
方式 0,13 位定时器/计数器
0
方式 2,8 位自动重新装载初值的定时器/计数器
1 1 方式 3,仅适用于 T0,此时 T0 分为两个 8 位计数器,T1 停止计数
第6章 AT89S51的定时器/计数器
6.3.2 方式1
当M1=0、M0=1时,定时器/计数器工作于方式1,其 逻辑框图如6-5所示。
方式1和方式0的差别仅在于计数器的位数不同,方 式1为16位计数器,由THx高8位和TLx低8位构成,方式0 则为13位计数器。方式1中,相关控制状态位的含义与方 式0相同。
第6章 AT89S51的定时器/计数器
T1工作于方式1——M1=0,M0=1
图6-10 T1工作于方式1的示意图
T1工作于方式1——M1=0,M0=1
图6-11 T1工作于方式2的示意图
第6章 AT89S51的定时器/计数器
主要内容
1 定时器/计数器的结构与工作原理 2 与定时器/计数器相关的SFR 3 定时器/计数器的工作方式
图6-2 TMOD格式
TMOD的8位控制字分为2组,高4位控制T1,低4位控 制T0。
第6章 AT89S51的定时器/计数器
TMOD的各位说明: (1)GATE——门控位
当GATE=0时,仅由运行控制位TRx(x=0,1)来控制定 时器/计数器的运行。
当GATE=1时,用外部中断引脚( INT 0 或 INT1 )上 的电平与运行控制位TRx来共同控制定时器/计数器的运 行。 (2)M1、M0——工作方式选择位
M1、M0共有4种编码,对应于4种工作方式的选择, 如表6-1所示。
第6章 AT89S51的定时器/计数器
表6-1 工作方式选择位
M M0 1
工作方式
00
方式 0,13 位定时器/计数器
0
方式 2,8 位自动重新装载初值的定时器/计数器
1 1 方式 3,仅适用于 T0,此时 T0 分为两个 8 位计数器,T1 停止计数
第6章 AT89S51的定时器/计数器
6.3.2 方式1
当M1=0、M0=1时,定时器/计数器工作于方式1,其 逻辑框图如6-5所示。
方式1和方式0的差别仅在于计数器的位数不同,方 式1为16位计数器,由THx高8位和TLx低8位构成,方式0 则为13位计数器。方式1中,相关控制状态位的含义与方 式0相同。
第6章 AT89S51的定时器计数器
0:定时器模式
二、 TCON寄存器(定时器/计数器控制寄存器)
图6-3 TCON格式
低4位与外部中断有关,已介绍。高4位的功能如下:
(1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位
1:启动定时器/计数器工作 0:停止定时器/计数器工作
例:设置T0工作于方式1定时方式,用指令 MOV TMOD,#01H 启动T0工作,用指令 SETB TR0
3. 应用举例(续)
(3)程序设计
ORG AJMP ORG AJMP MAIN: ORG MOV MOV MOV SETB SETB SETB AJMP 0000H MAIN 000BH IT0P ;T0的中断入口 ;转T0中断处理程序IT0P
HERE: IT0P:
0100H TMOD,#01H ;设置T0为定时器方式1 TL0,#30H ;T0置初值 TH0,#0F8H TR0 ;启动T0计数 ET0 ;允许T0中断 EA ;CPU开中断 HERE ;自身跳转
图6-1 AT89S51单片机的定时器/计数器结构框图
单片机复位时,两个寄存器都清0。
一、TMOD寄存器(工作方式控制寄存器)
不能 位寻址
图6-2 TMOD格式
(1)GATE——门控位
0:以TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚(INT0或INT1)上的高电平和TRX两个 条件来启动定时器/计数器运行。
方式0最长可定时8.192ms 方式1最长可定时65.536ms 方式2最长可定时256s (1)计算计数初值X: (216 − X) 1 10−6 = 50 10−3 X = 15536 = 3CB0H (2)10次计数的实现:
二、 TCON寄存器(定时器/计数器控制寄存器)
图6-3 TCON格式
低4位与外部中断有关,已介绍。高4位的功能如下:
(1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位
1:启动定时器/计数器工作 0:停止定时器/计数器工作
例:设置T0工作于方式1定时方式,用指令 MOV TMOD,#01H 启动T0工作,用指令 SETB TR0
3. 应用举例(续)
(3)程序设计
ORG AJMP ORG AJMP MAIN: ORG MOV MOV MOV SETB SETB SETB AJMP 0000H MAIN 000BH IT0P ;T0的中断入口 ;转T0中断处理程序IT0P
HERE: IT0P:
0100H TMOD,#01H ;设置T0为定时器方式1 TL0,#30H ;T0置初值 TH0,#0F8H TR0 ;启动T0计数 ET0 ;允许T0中断 EA ;CPU开中断 HERE ;自身跳转
图6-1 AT89S51单片机的定时器/计数器结构框图
单片机复位时,两个寄存器都清0。
一、TMOD寄存器(工作方式控制寄存器)
不能 位寻址
图6-2 TMOD格式
(1)GATE——门控位
0:以TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚(INT0或INT1)上的高电平和TRX两个 条件来启动定时器/计数器运行。
方式0最长可定时8.192ms 方式1最长可定时65.536ms 方式2最长可定时256s (1)计算计数初值X: (216 − X) 1 10−6 = 50 10−3 X = 15536 = 3CB0H (2)10次计数的实现:
定时器计数器讲解
6-13所示,计数输入引脚T1(P3.5)上外接开关K1,作为 计数信号输入。按4次K1后,P1口的8只LED闪烁不停。 (1)设置TMOD寄存器
TR1位(或TR0位)=1,启动定时器工作的必要条件。 TR1位(或TR0位)=0,停止定时器工作。 该位可由软件置“1”或清“0”。
10
6.2 定时器/计数器的4种工作方式 4种工作方式分别介绍如下。
6.2.1 方式0 当M1、M0为00时,定时器/计数器被设置为工作方式0,
这时定时器/计数器的等效逻辑结构框图如图6-4所示(以定 时器/计数器T1为例,TMOD.5、TMOD.4 = 00)。
(1)GATE=0时,A点(见图6-4)电位恒为1,B点电位仅 取决于TRx状态。TRx = 1,B点为高电平,控制端控制电子 开关闭合,允许T1(或T0)对脉冲计数。TRx = 0,B点为低 电平,电子开关断开,禁止T1(或T0)计数。
(2)GATE=1时,B点电位由INTX*(x = 0,1)的输入电 平和TRx的状态两个条件来定。当TRx=1,且INTX*=1时,B 点才为1,控制端控制电子开关闭合,允许T1(或T0)计数。 故这种情况下计数器是否计数是由TRx和INTX*两个条件来共 同控制。
图6-1 AT89S51单片机的定时器/计数器结构框图
4
只不过计数信号的来源不同。 计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上
的外部脉冲进行计数(见图6-1) 定时器模式是对单片机的系统时钟信号经片内12分频后的
内部脉冲信号(机器周期)计数。由于时钟频率是定值,所 以可根据对内部脉冲信号的计数值可计算出定时时间。
本例由于采用定时器T0中断,因此需将IE寄存器中的EA、 ET0位置1。 (4)启动和停止定时器T0
TR1位(或TR0位)=1,启动定时器工作的必要条件。 TR1位(或TR0位)=0,停止定时器工作。 该位可由软件置“1”或清“0”。
10
6.2 定时器/计数器的4种工作方式 4种工作方式分别介绍如下。
6.2.1 方式0 当M1、M0为00时,定时器/计数器被设置为工作方式0,
这时定时器/计数器的等效逻辑结构框图如图6-4所示(以定 时器/计数器T1为例,TMOD.5、TMOD.4 = 00)。
(1)GATE=0时,A点(见图6-4)电位恒为1,B点电位仅 取决于TRx状态。TRx = 1,B点为高电平,控制端控制电子 开关闭合,允许T1(或T0)对脉冲计数。TRx = 0,B点为低 电平,电子开关断开,禁止T1(或T0)计数。
(2)GATE=1时,B点电位由INTX*(x = 0,1)的输入电 平和TRx的状态两个条件来定。当TRx=1,且INTX*=1时,B 点才为1,控制端控制电子开关闭合,允许T1(或T0)计数。 故这种情况下计数器是否计数是由TRx和INTX*两个条件来共 同控制。
图6-1 AT89S51单片机的定时器/计数器结构框图
4
只不过计数信号的来源不同。 计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上
的外部脉冲进行计数(见图6-1) 定时器模式是对单片机的系统时钟信号经片内12分频后的
内部脉冲信号(机器周期)计数。由于时钟频率是定值,所 以可根据对内部脉冲信号的计数值可计算出定时时间。
本例由于采用定时器T0中断,因此需将IE寄存器中的EA、 ET0位置1。 (4)启动和停止定时器T0
AT89S51单片机的定时器计数器
查询程序虽简单,但CPU必须要不断查询TF0标志,工作
效率低。
35
资料仅供参考
【例6-2】系统时钟为6MHz,编写定时器T0产生1s定 时的程序。
基本思想:采用定时器模式。因定时时间较长,首先 确定采用哪一种工作方式。时钟为6MHz的条件下,定 时器各种工作方式最长可定时时间:
方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512s。 由上可见,可选方式1,每隔100ms中断一次,中断10 次为1s。
1.工作方式3下的T0 TMOD的低2位为11时,T0被选为方式3,各引脚与T0 的逻辑关系如图6-8。
定时器/计数器T0分为两个独立的8位计数器TL0和TH0, TL0使用T0的状态控制位C/T*、GATE、TR0、TF0,
资料仅供参考
而TH0被固定为一个8位定时器(不能作为外部计数 模式),并使用定时器T1的状态控制位TR1和TF1,同 时占用定时器T1的中断请求源TF1。 2.T0工作在方式3时T1的各种工作方式
11
资料仅供参考
图6-4 定时器/计数器方式0逻辑结构框图 13位计数器,由TLx(x = 0,1)低5位和THx高8位构 成。TLx低5位溢出则向THx进位,THx计数溢出则把 TCON中的溢出标志位TFx置“1”。
12
资料仅供参考
图6-2的C/T* 位控制的电子开关决定了定时器/计数器 的两种工作模式。
6.2.2 方式1
资料仅供参考
当M1、M0=01时,定时器/计数器工作于方式1,这时 定时器/计数器的等效电路逻辑结构见图6-5。
方式1和方式0的差别仅仅在于计数器的位数不同,方 式1为16位计数器,由THx高8位和TLx低8位构成(x=0, 1),方式0则为13位计数器,有关控制状态位的含义 (GATE、C/T* 、TFx、TRx)与方式0相同。
AT89S51单片机看门狗定时器的使用
}
}
以上程序中系统在做一个无限循环的动作,通过看门狗定时器可以防止程序在执行过程中跑飞。因为只要程序一跑出while()循环,看门狗定时器溢出以后得不到复位,所以自动复位系统,让程序从mian()开始重新运行。
但是在C语言应用看门狗定时器也特别小心,一定要在看门狗定时器启动后的0.016s内喂一次狗。
RL A ;7 2us
JMP LOOP ;8 2us
DELAY: MOV R7,#200 ;9 1us
AT89S51 看门狗定时器由一个14位定时器及WDTRST(地址为6AH)寄存器构成。开启看门狗定时器后,14位定时器会自动计数,每16384(214)个机器周期溢出一次,并产生一个高电平复位信号,使系统复位。对于12MHZ的时钟脉冲每16384us(约0.016s)产生一个复位信号。
如果启动看门狗定时器,当系统超过0.016s没有动作(程序跑飞),看门狗定时器自动复位,让系统归复于正常运作状16s内必须喂狗一次,即对看门狗定时器进行复位,看门狗的启动和复位的方法是一样的。
END ;14 2us
在程序的每个行标号后面是12MHZ时钟脉冲下的指令执行时间,为了让系统正常工作且不死机将看门狗定时器启动指令放在1和2之间,将看门狗定时器复位指令放在11和12之间。
现在一起通过执行时间来计算看门狗定时器复位指令放在那里比较合适。
{ ……;
WDTRST=0x1e;
WDTRST=0xe1;
While(1)
{ WDTRST=0x1e;
WDTRST=0xe1;
……;
……; 这部分执行时间必须少于0.016s
MOV 0A6H,#0E1H ;3 1us
AT89S51单片机的定时器计数器
7.4
定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,只是计数位数
不同。方式0为13位,方式1为16位。由于方式0是为兼容MCS48而设,计数初值计算复杂,所以在实际应用中,一般不用 方式0,常采用方式1。 7.4.1 P1口控制8只LED每0.5s闪亮一次 【例7-1】在AT89S51的P1口上接有8只LED,原理电路见图
T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的
状态控制位C/T* 、GATE、TR0 ,而TH0被固定为一个8位 定时器(不能作为外部计数模式),并使用定时器T1的状态 控制位TR1,同时占用定时器T1的中断请求源TF1。
12
图7-8
T0方式3的逻辑结构框图
2.T0工作在方式3时T1的各种工作方式 一般情况下,当T1用作串口波特率发生器时,T0才工作在
30
#include <reg51.h> //头文件reg51.h sbit P1_0=P1^0; //定义特殊功能寄存器P1的位变量P1_0 void main(void) //主程序 { TMOD=0x01; //设置T0为方式1 TR0=1; //接通T0 while(1) //无限循环 { TH0=0xfc; //置T0高8位初值 TL0=0x18; //置T0低8位初值 do {}while(!TF0); //判TF0是否为1,为1则T0溢出,往下 //执行,否则原地循环 P1_0=!P1_0; // P1.0状态求反 TF0=0; //TF0标志清零 } }
void main( )
{ TMOD=0x50; TH1=0xff; TL1=0xfc; EA=1; ET1=1; TR1=1; while(1) ; }
AT89S51单片机的定时器计数器
图7-5 方式1的逻辑结构框图
方式1和方式0差别仅仅在于计数器的位数不同
整理ppt
8
7.2.3 方式2
方式0和方式1最大特点是计数溢出后,计数器为全0。因此在 循环定时或循环计数应用时就存在用指令反复装入计数初值的问
题,这会影响定时精度,方式2就是为解决此问题而设置的。
当M1、M0=10时,工作方式2,等效逻辑结构见图7-6(以T1 为例,x=1)。
图7-3 TCON格式
整理ppt
6
这里仅介绍高4位功能。
(1)TF1、TF0—计数溢出标志位
当计数器计数溢出时,该位置“1”。使用查询方式时,此 位可供CPU查询,但应注意查询后,用软件及时将该位清 “0”。使用中断方式时,作为中断请求标志位,进入中断服务 程序后由硬件自动清“0”。
(2)TR1、TR0—计数运行控制位
工作方式2为自动恢复初值(初值自动装入)的8位定时器/计
数器,TLx(x=0,1)作为常数缓冲器,当TLx计数溢出时,在溢
出标志TFx置“1”的同时,还自动将THx中的初值送至TLx,使
TLx从初值开始重新计数。定时器/计数器方式2工作过程见图7-7
。
整理ppt
9
图7-6 方式2逻辑结构框图
整理ppt
15
(4)T1设置在方式3 T0方式3时,再把T1也设置成方式3,此时T1停止计数。
7.3 对外部输入的计数信号的要求 计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输
入信号产生负跳变时,计数值增1。每个机器周期S5P2期间, 都对外部输入引脚T0或T1进行采样。如在第1个机器周期中采 得值为1,而在下一个机器周期中采得的值为0,则在紧跟着的 再下一个机器周期S3P1期间,计数器加1。由于确认一次负跳 变要花2个机器周期,即24个振荡周期,因此外部输入的计数 脉冲的最高频率为系统振荡器频率1/24。
第6章 定时器计数器习题
20
IT0P:
CLR
TR0
;T0中断服务程序,停止T0计数
;把T0引脚接收过负脉冲标志F0置1, ;即接收过负跳变
SETB F0
RETI IT1P: CPL RETI P1.0 ;T1中断服务程序,P1.0位取反
程序说明:当单片机复位时,从0000H跳向主程序 MAIN处执行程序。其中调用了对T0,T1初始化子程序 PT0M2。子程序返回后执行标号LOOP处指令,循环等待 T0引脚上负脉冲的到来。由于负脉冲到来的标志位F0的
;装初值的高8位
;允许T0中断 ;总中断允许 ;启动T0 ;中断子程序,T0重装初值 ;P1.0的状态取反
程序说明:当单片机复位时,从程序入口0000H跳向主 程序MAIN处执行。其中调用了T0初始化子程序PT0M0。
6
子程序返回后,程序执行“AJMP HERE”指令,则
循环等待。 当响应T0定时中断时,则跳向T0中断入口,再从T0中 断入口跳向IT0P标号处执行T0中断服务子程序。 当执行完中断返回的指令“RETI”后,又返回断点处 继续执行循环指令“AJMP HERE”。在实际的程序中, “AJMP HERE” 实际上是一段主程序。当下一次定时 器T0的1ms定时中断发生时,再跳向T0中断入口,从而重
基本思想:设为方式2(自动装入常数方式)计数模式,
TH0、TL0初值均为0FFH。当T0脚发生负跳变时,T0计 数溢出,TF0置“1”,单片机发出中断请求。
13
初始化程序:
ORG 0000H ;跳到初始化程序 ;跳到外中断处理程序 AJMP IINI
ORG
IINI: MOV
000BH
TMOD,#06H ;设置T0为方式2
复执行上述过程。
第6章_89C51的定时器计数器
Tcy
6.4 定时器/计数器的编程和应用
4种工作方式中,方式0与方式1基本相同,由于方式0是为 兼容MCS-48而设,初值计算复杂,在实际应用中,一般不 用方式0,而采用方式1。 ⒈ 计算定时/计数初值 89C51定时/计数初值计算公式:
其中: N与工作方式有关: 方式0时,N=13; 方式1时,N=16; 方式2、3时,N=8。 机周时间与主振频率有关:机周时间=12/fosc fosc=12MHZ时,1机周=1S; fosc=6MHZ 时,1机周=2S。
从上例中看到,方式0时计算定时初值比较麻烦,根据 公式计算出数值后,还要变换一下,容易出错,不如直接用 方式1,且方式0计数范围比方式1小,方式0完全可以用方式 1代替,方式0与方式1相比,无任何优点。
⒉ 定时/计数器应用步骤 ⑴ 合理选择定时/计数器工作方式 ⑵ 计算定时/计数器定时初值(按上述公式计算) ⑶ 编制应用程序 ①定时/计数器的初始化 包括定义TMOD、写入定时初值、设置中断系统、 启动定时/计数器运行等。 ②正确编制定时/计数器中断服务程序 注意是否需要重装定时初值,若需要连续反复使 用原定时时间,且未工作在方式2,则应在中断服务程 序中重装定时初值。
6.1.2
TCON 位名称
定时器/计数器控制寄存器TCON
T1 中断 标志 TF1 T1 运行 标志 TR1 T0 中断 标志 TF0 T0 运行 标志 TR0 INT1 中断 标志 IE1 INT1 触发 方式 IT1 INT0 中断 标志 IE0 INT0 触发 方式 IT0
位地址
8FH
8EH
【计算定时/计数初值】 已知晶振6MHz,要求定时 0.5ms,试分别求出T0工作于方式0、方式1、方式2、 方式3时的定时初值。
单片机控制系统应用第六章习题与思考题
第六章习题与思考题
6.1 A T89S51中有几个定时器/计数器?是加1计数还是减1计数?
6.2 定时器/计数器有哪几种工作方式?各有什么特点?
6.3 定时器/计数器的定时频率和计数频率怎样确定?对外部计数频率有何限制?
6.4 控制寄存器TMOD和TCON各位的定义是什么?怎样确定各定时器/计数器的工作方式?
6.5 在工作方式3中,定时器/计数器T0和T1的应用有什么不同?
6.6 已知单片机时钟频率fosc=12MHz,当要求定时时间为50ms和25ms时,试为定时器/计数器编写初始化程序。
6.7 已知A T89S51时钟频率fosc=6MHZ,试利用定时器编写程序,使P1.0输出一个高低电位分别为40μs和120μs 的连续矩形脉冲波。
6.8 设外部脉冲由INT1端输入,试编写利用门控位GA TE和定时器T1测试脉冲宽度的程序。
6.9 一个定时器的定时时间有限,试设计几种能实现较长时间(超过一个定时器的定时时间)定时的方案。
6.10 已知A T89S51时钟频率为6MHz,试编写程序,利用T0工作在方式3,使P1.0和P1.1分别输出400μs和800μs 的方波。
6.11 试用中断方式设计秒发生器,即在A T89S51的P1.0口每秒产生一个机器周期的正脉冲,有P1.1口每分钟产生一个机器周期的正脉冲。
6.12 试用定时器中断技术设计一个秒闪电路,要求使发光二极管LED每秒闪亮400ms,设时钟频率为6MHz。
第6章 AT8S51单片机定时器计数器
ET0=1;
TR0=1; while(1) ; */ }
/*定时器T0中断允许*/
/*启动定时器T0*/ /*无穷循环,等待定时中断
23
/*以下为定时器T0的中断服务程序*/ void T0_int(void) interrupt 1 {TH0=0xee; T0溢出*/ TL0=0x00; /*给T0装入16位初值,计4608个数后,
4
6.1 概述
②T0两种工作状态( C T ) 位 (TMOD.2) =0 为内部定时 C T =1 为外部计数 ③T0可读可写 写T0就是对之赋初值 读T0就是检查T0当前的计数结果存 入单片机寄存器中 MOV DPTR,#DADA (此一条按字操作) ④中断功能 T0溢出时 计数结果为0000H 进位丢 失—CY(CY短时间还有)置位中断申请标志位 TF0 TCON.5 ⑤T0的启停可以被脚 P3.2 ,TR0位 GATE位所控制 T1同T0
本例由于采用定时器T1中断,因此需将IE寄存器中的EA、
ET1位置1。 (4)启动和停止定时器T1 将定时器控制寄存器TCON中的TR1=1,则启动定时器T1 计数;TR1=0,则停止定时器T1计数。 参考程序如下:
27
#include <reg51.h>
void Delay(unsigned int i)/* 定义延时函数Delay( ),i是形式参数,不 能赋初值*/ {unsiБайду номын сангаасned int j; for(;i>0;i--) /* 变量i由实际参数传入一个值,因此i不能赋初值*/ for(j=0;j<125;j++) {; } } /*空函数*/
22
#include<reg51.h>
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 6章 讲授内容:
AT89S51的定时器/计数器
1. 定时器/计数器的结构与功能。 2. 两种工作模式和四种工作方式。 3. 定时器/计数器的编程及应用。 重点理解: 1.定时/计数器的编程结构 2.控制字与编程方法 3. 应用编程
第6章 AT89S51的定时器/计数器 两个可编程的定时器/计数器T1、T0。
• 省去用户软件中重装 初值的指令执行时间 • 简化定时初值的计算方法 • 可以相当精确地确定定时时间
图6-7 方式2工作过程
四、方式3
是为增加一个8位定时器/计数器而设,使AT89S51
单片机具有3个定时器/计数器。 只适用于T0,T1不能工作在方式3。 T1工作在方式3时相当于TR1=0,停止计数(此 时T1可用来作串行口波特率产生器)。
四、方式3(续)
工作于方式3的T0与各引脚的逻辑关系如图所示:
图6-8 定时器/计数器T0方式3的逻辑结构框图
四、方式3(续)
2. T1的各种工作方式( T0工作在方式3时)
在T0为方式3时, T1可设置为方式0、1或2,且一般是 作为串行口波特率发生器,或用于不需要中断的场合。 (1)T1工作在方式0 (2) T1工作在方式1
图6-9 T0在方式3时T1为方式0的示意图
图6-10 T0在方式3时T1为方式1的示意图
(3) T1工作在方式2
图6-11 T0在方式3时T1为方式2的示意图
6.3 定时器/计数器对输入信号的要求
外部计数脉冲的最高频率为系统振荡器频率的1/24
若用12MHz晶振,则外部脉冲最高频率500KHz。
GATE位:决定定时器/计数器的运行取决于TRx 一个条件还是TRx和INTx引脚两个条件。
0:仅取决于TRx的状态。 1:由TRx和INTx两个条件来控制的。
二、方式1 (M1M0=01,16位的计数器,以T1为例:)
加1计数器为16位, 高8位溢出置位TF1
定时器启、停控制
图6-5 定时器/计数器方式1逻辑结构框图
⑸等待溢出信号的出现(如何进入处理程序?)
(查询法或中断法)
6.4 定时器/计数器的编程和应用(续)
2. 计数初值的计算
⑴计数器模式时的计数初值
X=2M-N (M为计数器位数,N为要求的计数值) X=0,计数值最大—— 2M 213=8192(方式0)
216=65536(方式1) 28=256(方式2、3)
0:定时器模式
二、 TCON寄存器(定时器/计数器控制寄存器)
图6-3 TCON格式
低4位与外部中断有关,已介绍。高4位的功能如下:
(1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位
1:启动定时器/计数器工作 0:停止定时器/计数器工作
例:设置T0工作于方式1定时方式,用指令 MOV TMOD,#01H 启动T0工作,用指令 SETB TR0
2种工作模式:
(1)计数器工作模式 (2)定时器工作模式 4种工作方式(方式0~方式3) 相关的2个特殊功能寄存器TMOD和TCON 可由用户程序选择其工作模式及工作方式
6.1 定时器/计数器的结构
TMOD:选择T0、T1的工作模式和工作方式。 TCON:控制T0、T1的启动和停止计数,同时包含 了T0、T1的状态。
(2)M1、M0——工作方式选择位
M1 M0 0 0 0 1 1 0 1 1 工 作 方 式 方式0,13位定时器/计数器。 方式1,16位定时器/计数器。 方式2,8位常数自动重新装载 方式3,仅适用于T0,T0分成两个8位计数器, T1停止计数。 1:计数器模式
(3)C/T——计数器模式和定时器模式选择位
⑵定时器模式时的计数初值
定时时间: t=(2M-计数初值X)*机器周期 f osc t M 计数初值:X =2 12 X=0,定时时间最长: tmax= 2M×机器周期
若系统时钟频率 fOSC=12MHz,则:1机器周期=1µ S。 方式0:M=13, tmax=213*机器周期=8192µ S 方式1:M=16, tmax=216*机器周期=65536µ S 方式2:M=8, tmax=28*机器周期=256µ S (方式3同)
四、方式3(续)
1. T0工作于方式3(TMOD的低2位为11)
T0被分为两个独立的8位计数器:TL0和TH0
•TL0使用T0的状态控制位C/T、GATE、TR0、TF0 •TH0只能做8位定时器(不能作外部计数模式) 运行控制位和溢出标志位则借用T1的TR1和TF1。 在T0设置为方式3工作时,一般是将定时器T1作为 串行口波特率发生器,或用于不需要中断的场合。 相当于增加了一个8位的定时器。
3. 应用举例
例6-1 假设系统时钟频率采用12MHz,要求在P1.0上 输出一个周期为4ms的方波。 基本思想:
方波周期用T0确定,T0每隔2ms 计数溢出1次(即T0每2ms产生一 次中断),CPU响应中断后,在中 断服务子程序中对P1.0取反。
图6-13 P1.0引脚输出周期2ms方波 (1)计算计数初值X (216-X)×1×10-6=2×10-3 X=63536=F830H 所以T0的初值为:TH0=0F8H TL0=30H (2)初始化程序设计 采用定时器中断方式工作,进行定时器和中断系 统初始化,即对TCON、TMOD、IP、IE相应位进行 正确设置,将计数初值送入定时器中。
方式0最长可定时8.192ms 方式1最长可定时65.536ms 方式2最长可定时256s (1)计算计数初值X: (216 − X) 1 10−6 = 50 10−3 X = 15536 = 3CB0H (2)10次计数的实现:
选方式1 隔50ms中断一次共10次 总定时长500ms
三、方式2 (M1M0=10,8位重装的计数器,以T1为例:)
计数满后自动装入计数初值
图6-6 定时器/计数器方式2逻辑结构框图
三、方式2(续)
TLx作为常数缓冲器,当TLx计数溢出时,在置 “1”溢出标志TFx的同时,还自动将THx中的初 值送至TLx,使TLx从初值开始重新计数。
定时器/计数器方式2工作过程如右下:
6.2 定时器/计数器的4种工作方式 一、方式0 (M1M0=00 ,13位的计数器,以T1为例:)
加1计数器为13位, 高8位溢出置位TF1
定时器启、停控制
图6-4 定时器/计数器方式0逻辑结构框图
一、方式0(续)
13位的计数器
C/T 位决定工作模式
0:定时器工作模式。 1:计数器工作模式,计数脉冲为P3.5引脚上的外部 输入脉冲,当引脚上发生负跳变时,计数器加1。
⑵计数器的初值送TH、TL (0/1) ⑶根据需要开放中断和设定优先级 ⑷启动T0/T1开始工作---置位TR0/1
MOV TH0/1,#—— MOV TL0/1,#——
即对IE和IP赋初值(可位寻址)
SETB TR0/1
若要求用软件启动,编程时对TR0或TR1置位即可启动; 若由外部中断引脚电平启动,对TR0或TR1置位后,还需给外引脚提供 启动电平。
3. 应用举例(续)
0000H MAIN 000BH ;T0中断服务程序入口 TIMER0 0040H TMOD,#01H ;选用定时器0,方式1 TH0,#3CH ;送定时器初值 TL0,#0B0H R0,#10 ;R0为中断次数计数器 P1.0 EA ;开总中断 ET0 ;T0开中断 TR0 ;启动定时开始 $ R0,EXIT ;未中断10次,中断返回 P1.0 ;中断10次到0.5S,将P1.0取反 R0,#10 ;重置中断次数计数器 TH0,#3CH ;送定时器初值 TL0,#0B0H
输入信号的高(低)电平至少要保持一个机器周期。
如图6-12所示,图中Tcy为机器周期。
图6-12
对外部计数输入信号的要求
6.4 定时器/计数器的编程和应用
1. 定时/计数器初始化程序的步骤
⑴方式控制字送 TMOD MOV TMOD,#——
分析定时器/计数器的工作方式,将方式字写入TMOD寄存器; ( 定/计、内/外启动、工作方式)
TH0 = 3CH,TL0 = 0B0H
采用R0作为中断次数计数器
ORG AJMP (3)参考程序: ORG AJMP ORG MAIN: MOV MOV MOV MOV SETB SETB SETB SETB SJMP TIMER0: DJNZ CPL MOV EXIT: MOV MOV RETI END
3. 应用举例(续)
(3)程序设计
ORG AJMP ORG AJMP MAIN: ORG MOV MOV MOV SETB SETB SETB AJMP 0000H MAIN 000BH IT0P ;T0的中断入口P:
0100H TMOD,#01H ;设置T0为定时器方式1 TL0,#30H ;T0置初值 TH0,#0F8H TR0 ;启动T0计数 ET0 ;允许T0中断 EA ;CPU开中断 HERE ;自身跳转
图6-1 AT89S51单片机的定时器/计数器结构框图
单片机复位时,两个寄存器都清0。
一、TMOD寄存器(工作方式控制寄存器)
不能 位寻址
图6-2 TMOD格式
(1)GATE——门控位
0:以TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚(INT0或INT1)上的高电平和TRX两个 条件来启动定时器/计数器运行。
MOV TL0,#30H ;T0中断服务子程序,T0重置初值 MOV TH0,#0F8H CPL P1.0 ;P1.0的状态取反 RETI END
3. 应用举例(续)
例6-2 电路如下图所示,编程使发光二极管D1间隔0.5秒 闪烁。
3. 应用举例(续)
思路:
采用定时器模式。因定时时 间较长,首先确定采用哪一 种工作方式。时钟为12MHz 时,定时器最长可定时时间:
AT89S51的定时器/计数器
1. 定时器/计数器的结构与功能。 2. 两种工作模式和四种工作方式。 3. 定时器/计数器的编程及应用。 重点理解: 1.定时/计数器的编程结构 2.控制字与编程方法 3. 应用编程
第6章 AT89S51的定时器/计数器 两个可编程的定时器/计数器T1、T0。
• 省去用户软件中重装 初值的指令执行时间 • 简化定时初值的计算方法 • 可以相当精确地确定定时时间
图6-7 方式2工作过程
四、方式3
是为增加一个8位定时器/计数器而设,使AT89S51
单片机具有3个定时器/计数器。 只适用于T0,T1不能工作在方式3。 T1工作在方式3时相当于TR1=0,停止计数(此 时T1可用来作串行口波特率产生器)。
四、方式3(续)
工作于方式3的T0与各引脚的逻辑关系如图所示:
图6-8 定时器/计数器T0方式3的逻辑结构框图
四、方式3(续)
2. T1的各种工作方式( T0工作在方式3时)
在T0为方式3时, T1可设置为方式0、1或2,且一般是 作为串行口波特率发生器,或用于不需要中断的场合。 (1)T1工作在方式0 (2) T1工作在方式1
图6-9 T0在方式3时T1为方式0的示意图
图6-10 T0在方式3时T1为方式1的示意图
(3) T1工作在方式2
图6-11 T0在方式3时T1为方式2的示意图
6.3 定时器/计数器对输入信号的要求
外部计数脉冲的最高频率为系统振荡器频率的1/24
若用12MHz晶振,则外部脉冲最高频率500KHz。
GATE位:决定定时器/计数器的运行取决于TRx 一个条件还是TRx和INTx引脚两个条件。
0:仅取决于TRx的状态。 1:由TRx和INTx两个条件来控制的。
二、方式1 (M1M0=01,16位的计数器,以T1为例:)
加1计数器为16位, 高8位溢出置位TF1
定时器启、停控制
图6-5 定时器/计数器方式1逻辑结构框图
⑸等待溢出信号的出现(如何进入处理程序?)
(查询法或中断法)
6.4 定时器/计数器的编程和应用(续)
2. 计数初值的计算
⑴计数器模式时的计数初值
X=2M-N (M为计数器位数,N为要求的计数值) X=0,计数值最大—— 2M 213=8192(方式0)
216=65536(方式1) 28=256(方式2、3)
0:定时器模式
二、 TCON寄存器(定时器/计数器控制寄存器)
图6-3 TCON格式
低4位与外部中断有关,已介绍。高4位的功能如下:
(1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位
1:启动定时器/计数器工作 0:停止定时器/计数器工作
例:设置T0工作于方式1定时方式,用指令 MOV TMOD,#01H 启动T0工作,用指令 SETB TR0
2种工作模式:
(1)计数器工作模式 (2)定时器工作模式 4种工作方式(方式0~方式3) 相关的2个特殊功能寄存器TMOD和TCON 可由用户程序选择其工作模式及工作方式
6.1 定时器/计数器的结构
TMOD:选择T0、T1的工作模式和工作方式。 TCON:控制T0、T1的启动和停止计数,同时包含 了T0、T1的状态。
(2)M1、M0——工作方式选择位
M1 M0 0 0 0 1 1 0 1 1 工 作 方 式 方式0,13位定时器/计数器。 方式1,16位定时器/计数器。 方式2,8位常数自动重新装载 方式3,仅适用于T0,T0分成两个8位计数器, T1停止计数。 1:计数器模式
(3)C/T——计数器模式和定时器模式选择位
⑵定时器模式时的计数初值
定时时间: t=(2M-计数初值X)*机器周期 f osc t M 计数初值:X =2 12 X=0,定时时间最长: tmax= 2M×机器周期
若系统时钟频率 fOSC=12MHz,则:1机器周期=1µ S。 方式0:M=13, tmax=213*机器周期=8192µ S 方式1:M=16, tmax=216*机器周期=65536µ S 方式2:M=8, tmax=28*机器周期=256µ S (方式3同)
四、方式3(续)
1. T0工作于方式3(TMOD的低2位为11)
T0被分为两个独立的8位计数器:TL0和TH0
•TL0使用T0的状态控制位C/T、GATE、TR0、TF0 •TH0只能做8位定时器(不能作外部计数模式) 运行控制位和溢出标志位则借用T1的TR1和TF1。 在T0设置为方式3工作时,一般是将定时器T1作为 串行口波特率发生器,或用于不需要中断的场合。 相当于增加了一个8位的定时器。
3. 应用举例
例6-1 假设系统时钟频率采用12MHz,要求在P1.0上 输出一个周期为4ms的方波。 基本思想:
方波周期用T0确定,T0每隔2ms 计数溢出1次(即T0每2ms产生一 次中断),CPU响应中断后,在中 断服务子程序中对P1.0取反。
图6-13 P1.0引脚输出周期2ms方波 (1)计算计数初值X (216-X)×1×10-6=2×10-3 X=63536=F830H 所以T0的初值为:TH0=0F8H TL0=30H (2)初始化程序设计 采用定时器中断方式工作,进行定时器和中断系 统初始化,即对TCON、TMOD、IP、IE相应位进行 正确设置,将计数初值送入定时器中。
方式0最长可定时8.192ms 方式1最长可定时65.536ms 方式2最长可定时256s (1)计算计数初值X: (216 − X) 1 10−6 = 50 10−3 X = 15536 = 3CB0H (2)10次计数的实现:
选方式1 隔50ms中断一次共10次 总定时长500ms
三、方式2 (M1M0=10,8位重装的计数器,以T1为例:)
计数满后自动装入计数初值
图6-6 定时器/计数器方式2逻辑结构框图
三、方式2(续)
TLx作为常数缓冲器,当TLx计数溢出时,在置 “1”溢出标志TFx的同时,还自动将THx中的初 值送至TLx,使TLx从初值开始重新计数。
定时器/计数器方式2工作过程如右下:
6.2 定时器/计数器的4种工作方式 一、方式0 (M1M0=00 ,13位的计数器,以T1为例:)
加1计数器为13位, 高8位溢出置位TF1
定时器启、停控制
图6-4 定时器/计数器方式0逻辑结构框图
一、方式0(续)
13位的计数器
C/T 位决定工作模式
0:定时器工作模式。 1:计数器工作模式,计数脉冲为P3.5引脚上的外部 输入脉冲,当引脚上发生负跳变时,计数器加1。
⑵计数器的初值送TH、TL (0/1) ⑶根据需要开放中断和设定优先级 ⑷启动T0/T1开始工作---置位TR0/1
MOV TH0/1,#—— MOV TL0/1,#——
即对IE和IP赋初值(可位寻址)
SETB TR0/1
若要求用软件启动,编程时对TR0或TR1置位即可启动; 若由外部中断引脚电平启动,对TR0或TR1置位后,还需给外引脚提供 启动电平。
3. 应用举例(续)
0000H MAIN 000BH ;T0中断服务程序入口 TIMER0 0040H TMOD,#01H ;选用定时器0,方式1 TH0,#3CH ;送定时器初值 TL0,#0B0H R0,#10 ;R0为中断次数计数器 P1.0 EA ;开总中断 ET0 ;T0开中断 TR0 ;启动定时开始 $ R0,EXIT ;未中断10次,中断返回 P1.0 ;中断10次到0.5S,将P1.0取反 R0,#10 ;重置中断次数计数器 TH0,#3CH ;送定时器初值 TL0,#0B0H
输入信号的高(低)电平至少要保持一个机器周期。
如图6-12所示,图中Tcy为机器周期。
图6-12
对外部计数输入信号的要求
6.4 定时器/计数器的编程和应用
1. 定时/计数器初始化程序的步骤
⑴方式控制字送 TMOD MOV TMOD,#——
分析定时器/计数器的工作方式,将方式字写入TMOD寄存器; ( 定/计、内/外启动、工作方式)
TH0 = 3CH,TL0 = 0B0H
采用R0作为中断次数计数器
ORG AJMP (3)参考程序: ORG AJMP ORG MAIN: MOV MOV MOV MOV SETB SETB SETB SETB SJMP TIMER0: DJNZ CPL MOV EXIT: MOV MOV RETI END
3. 应用举例(续)
(3)程序设计
ORG AJMP ORG AJMP MAIN: ORG MOV MOV MOV SETB SETB SETB AJMP 0000H MAIN 000BH IT0P ;T0的中断入口P:
0100H TMOD,#01H ;设置T0为定时器方式1 TL0,#30H ;T0置初值 TH0,#0F8H TR0 ;启动T0计数 ET0 ;允许T0中断 EA ;CPU开中断 HERE ;自身跳转
图6-1 AT89S51单片机的定时器/计数器结构框图
单片机复位时,两个寄存器都清0。
一、TMOD寄存器(工作方式控制寄存器)
不能 位寻址
图6-2 TMOD格式
(1)GATE——门控位
0:以TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚(INT0或INT1)上的高电平和TRX两个 条件来启动定时器/计数器运行。
MOV TL0,#30H ;T0中断服务子程序,T0重置初值 MOV TH0,#0F8H CPL P1.0 ;P1.0的状态取反 RETI END
3. 应用举例(续)
例6-2 电路如下图所示,编程使发光二极管D1间隔0.5秒 闪烁。
3. 应用举例(续)
思路:
采用定时器模式。因定时时 间较长,首先确定采用哪一 种工作方式。时钟为12MHz 时,定时器最长可定时时间: