单片机原理与应用设计
单片机原理与应用设计 [张毅刚等编著][电子教案]
单片机原理与应用设计
第6 章
89C51的定时器/ 89C51的定时器/计数器 的定时器
两个可编程的定时器/计数器T1、T0。 两个可编程的定时器/计数器T1、T0。 T1 工作模式: 2种工作模式: 计数器工作模式 (1)计数器工作模式 定时器工作模式 (2)定时器工作模式 工作方式(方式0 方式3) 3)。 4种工作方式(方式0-方式3)。 定时器/ 6.1 定时器/计数器的结构 TMOD:选择定时器/计数器T0、T1的工作模式和工作 TMOD:选择定时器/计数器T0、T1的工作模式和工作 T0 方式。 方式。 TCON:控制T0 T1的启动和停止计数 T0、 的启动和停止计数, TCON:控制T0、T1的启动和停止计数,同时包含了 T0、T1的状态 的状态。 T0、T1的状态。
单片机原理与应用设计
图6-1 单片机复位时,两个寄存器都清0 单片机复位时,两个寄存器都清0。 工作方式控制寄存器TMOD 6.1.1 工作方式控制寄存器TMOD
图6-2
单片机原理与应用设计
8位分为两组,高4位控制T1,低4位控制T0。 位分为两组, 控制T1, T1 控制T0。 T0 GATE—— ——门控位 (1)GATE——门控位 TRX(X=0,1)来启动定时器/计数器运行。 0:仅以TRX(X=0,1)来启动定时器/计数器运行。 用引脚INT INT0 INT1 上的高电平和TRX TRX两个条 1:用引脚INT0* (或INT1*)上的高电平和TRX两个条 来启动定时器/计数器运行。 件来启动定时器/计数器运行。 ——工作方式选择位 (2)M1、M0——工作方式选择位 M1、M0工作方式选择 M1、M0工作方式选择 M1 工 作 方 式 方式0 13位定时器 计数器。 位定时器/ 0 方式0,13位定时器/计数器。 方式1 16位定时器 计数器。 位定时器/ 方式1,16位定时器/计数器。 0 方式2 1 方式2,8位常数自动重新装载 方式3 仅适用于T 分成两个8 1 方式3,仅适用于T0,T0分成两个8 位计数器, 停止计数。 位计数器,T1停止计数。 ——计数器模式和定时器 计数器模式和定时器模式选择位 (3) C/T*——计数器模式和定时器模式选择位 表6-1 M0 0 1 0 1
单片机原理与应用设计
0:定时器模式。 定时器模式。 1:计数器模式。 计数器模式。 6.1.2 定时器/计数器控制寄存器TCON 定时器/计数器控制寄存器TCON
图6-3 位与外部中断有关,已介绍。 位的功能如下: 低4位与外部中断有关,已介绍。高4位的功能如下: TF1、TF0——计数溢出标志位 (1) TF1、TF0 计数溢出标志位 TR1、TR0——计数运行控制位 计数运行控制位 (2) TR1、TR0 计数运行控制 1:启动定时器/计数器工作 启动定时器/ 0:停止定时器/计数器工作 停止定时器/
单片机原理与应用设计
定时器/计数器的4 6.2 定时器/计数器的4种工作方式 方式0 6.2.1 方式0 M1、M0为 定时器/计数器的框图: M1、M0为00 ,定时器/计数器的框图:
图6-4
单片机原理与应用设计
决定工作模式: 为13位的计数器 ,C/T* 位决定工作模式
: 13位的计数器 0:开关打在上面,为定时器工作模式; 开关打在上面, 定时器工作模式; 工作模式 1:开关打在下面,为计数器工作模式,计数脉冲为P3.4 开关打在下面, 计数器工作模式,计数脉冲为P3.4 工作模式 、P3.5引脚上的外部输入脉冲,当引脚上发生负跳变时,计 P3.5引脚上的外部输入脉冲,当引脚上发生负跳变时, 引脚上的外部输入脉冲 数器加1 数器加1。 GATE位:决定定时器/计数器的运行取决于TRx一个条件还是 GATE位 决定定时器/计数器的运行取决于TRx一个条件还是 运行取决于TRx TRx和 引脚两个条件。 TRx和INTx*引脚两个条件。 (1)0:A点(见图6-2)是否计数,仅取决于TRx的状态。 见图6 是否计数,仅取决于TRx的状态。 TRx的状态 点电位由INTX 的输入电平和TRX TRX的状态这两个条件 ( 2 ) 1 : B 点电位由 INTX* 的输入电平和 TRX 的状态这两个条件 来确定。是否计数是由TRx和 二个条件来控制的。 来确定。是否计数是由TRx和INTx*二个条件来控制的。 TRx
单片机原理与应用设计
6.2.2 方式1 方式1 M1、M0=01 16位的计数器。 =01, M1、M0=01,16位的计数器。
图6-5 方式2 6.2.3 方式2 计数满后自动装入计数初值。 计数满后自动装入计数初值。 M1、M0=10 ,等效框图如下: M1、M0=10 等效框图如下:
单片机原理与应用设计
图6-6 TLX作为常数缓冲器, TLX计数溢出时 在置“ 计数溢出时, TLX 作为常数缓冲器,当 TLX 计数溢出时 , 在置 “ 1 ” 溢出标志 作为常数缓冲器 TFX的同时 的同时, 自动的将THX中的初值送至TLX THX中的初值送至TLX, TLX从初值 TFX的同时,还自动的将THX中的初值送至TLX,使TLX从初值 开始重新计数。 定时器/ 开始重新计数 。 定时器 / 计数器的方式 2 工作过程如图 6 (X=0 7(X=0,1)。
单片机原理与应用设计
图6-7 省去用户软件中重装初值的程序,精确的定时。 省去用户软件中重装初值的程序,精确的定时。 方式3 6.2.4 方式3 增加一个附加 附加的 位定时器/计数器,从而具有3个定时器/ 增加一个附加的8位定时器/计数器,从而具有3个定时器/计数 器。
单片机原理与应用设计
只适用于定时器/计数器T0。T1不能工作在方式3 只适用于定时器/计数器T0。T1不能工作在方式3, T0 不能工作在方式 T1方式3 相当于TR1=0,停止计数(此时T1可用来作串行口 T1方式3时相当于TR1=0,停止计数(此时T1可用来作串行口 方式 TR1=0 T1 波特率产生器)。 波特率产生器)。 1.工作方式3下的T0 工作方式3下的T0 T0分为两个独立的 位计数器:TL0和 TL0使用T0的状态 使用T0 T0分为两个独立的8位计数器:TL0和TH0 。TL0使用T0的状态 分为两个独立 控制位C/T GATE、TR0、, TH0被固定为一个 、,而 被固定为一个8 控制位C/T*、GATE、TR0、,而TH0被固定为一个8位定时器 (不能作外部计数模式
),并使用定时器T1的状态控制位 不能作外部计数模式),并使用定时器T1的状态控制位 ),并使用定时器T1 TR1和TF1,同时占用定时器T1的中断请求源TF1。 TR1和TF1,同时占用定时器T1的中断请求源TF1。 占用定时器T1的中断请求源TF1 各引脚与T0的逻辑关系如图 各引脚与T0的逻辑关系如图6-8所示: T0的逻辑关系如 所示:
单片机原理与应用设计
图6-8(a)
图6-8(b)
单片机原理与应用设计
2.T0工作在方式3下T1的各种工作方式 T0工作在方式3 T1的各种工作方式 工作在方式 T0才工作在方式 才工作在方式3 当T1用作串行口的波特率发生器时, T0才工作在方式3。 T1用作串行口的波特率发生器时 用作串行口的波特率发生器 T0为方式3 T1可定为方式 可定为方式0 方式1和方式2 用来作为串 T0为方式3时, T1可定为方式0、方式1和方式2,用来作为串 为方式 行口的波特率发生器,或不需要中断的场合。 行口的波特率发生器,或不需要中断的场合。 (1)T1工作在方式0 T1工作在方式0 工作在方式
图6-9
单片机原理与应用设计
T1工作在方式 工作在方式1 (2) T1工作在方式1
图6-10 T1工作在方式 工作在方式2 (3) T1工作在方式2
图6-11
单片机原理与应用设计
6.3 计数器模式对输入信号的要求 外部计数脉冲的最高频率为系统振荡器频率的1/24 例如选 1/24, 外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选 12MHz频率的晶体,则可输入500KHz的外部脉冲 MHz频率的晶体 500KHz的外部脉冲。 用12MHz频率的晶体,则可输入500KHz的外部脉冲。 输入信号的高、低电平至少要保持一个机器周期。 输入信号的高、低电平至少要保持一个机器周期。 如图6-12所示,图中Tcy为机器周期。 所示,图中Tcy为机器周期。 Tcy为机器周期
图6-12
单片机原理与应用设计
定时器/ 6.4 定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,由于方式0是为兼容 种工作方式中,方式0与方式1基本相同,由于方式0 MCS-48而设,初值计算复杂,在实际应用中, MCS-48而设,初值计算复杂,在实际应用中,一般不用方式 而设 0,而采用方式1。 而采用方式1 6.4.1 方式1 方式1应用
假设系统时钟频率采用6MHz,要在P1.0 P1.0上输出一个周期 例6-1 假设系统时钟频率采用6MHz,要在P1.0上输出一个周期 为2ms的方波,如图6-13所示。 ms的方波, 13所示。 的方波 所示
图6-13
单片机原理与应用设计
方波的周期用T0来确定, T0每隔1ms计数溢出1 方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每1ms产 T0来确定 每隔 计数溢出 ms产 生一次中断) CPU响应中断后 在中断服务程序中对P1.0 响应中断后, 生一次中断),CPU响应中断后,在中断服务程序中对P1.0 取反。 取反。 (1)计算初值X (1)计算初值X 计算初值 设初值为X,则有: 设初值为X 则有: X)× (216-X)×2×10-6=1×10-3 X=
500 216-X=500 X=65036 X=65036 X化为16进制,即X=FE0CH=1111111000001100B。 化为16进制, X=FE0CH=1111111000001100B 16进制 1111111000001100 所以, 的初值为: 所以,T0的初值为: TH0 TH0=0FEH (2)初始化程序设计 (2)初始化程序设计 TL0 TL0=0CH
单片机原理与应用设计
对寄存器IP、IE、TCON、TMOD的相应位进行正确设置,将计数 对寄存器IP、IE、TCON、TMOD的相应位进行正确设置, IP 的相应位进行正确设置 初值送入定时器中。 初值送入定时器中。 (3)程序设计 (3)程序设计 中断服务程序除产生方波外, 中断服务程序除产生方波外,还要注意将计数初值重新装入定 时器中,为下一次中断作准备。 时器中,为下一次中断作准备。 参考程序: 参考程序: ORG 0000H 0000H RESET: RESET: AJMP MAIN ;转主程序 000BH ORG 000BH ;T0的中断入口 IT0 中断处理程序IT IT0 AJMP IT0P ;转T0中断处理程序IT0P 0100H ORG 0100H MAIN: SP,#60 60H MAIN: MOV SP,#60H ;设堆栈指针 设置T0为方式1 T0为方式 MOV TMOD,#01H ;设置T0为方式1
单片机原理与应用设计
PT0 ACALL PT0M0 HERE: HERE: AJMP HERE PT0 TL0,#0 PT0M0: MOV TL0,#0CH TH0,#0 MOV TH0,#0FEH TR0 SETB TR0 ET0 SETB ET0 SETB EA RET ITOP: MOV TL0,#0CH TH0,#0 MOV TH0,#0FEH CPL P1.0 RETI 查询方式的参考程序 的参考程序: 查询方式的参考程序: MOV TMOD,#01H
;调用子程序PT0M0 调用子程序PT0 PT ;自身跳转 中断服务程序, ;T0中断服务程序,T0重新置初值 ;启动T0 启动T 允许T ;允许T0中断 CPU开中断 ;CPU开中断 ;T0中断服务子程序,T0置初值 T0中断服务子程序,T0置初值 中断服务子程序 ;P1.0的状态取反
;设置T0为方式1 设置T0为方式1 T0为方式
单片机原理与应用设计
SETB LOOP: LOOP: MOV MOV LOOP1:JNB LOOP1 CLR CPL SJMP
TR0 TR0 TH0,#0 TH0,#0FEH TL0 TL0,# 0CH TF0,LOOP1 TF0,LOOP1 TR0 TR0 P1.0 LOOP
;接通T0 接通T ;T0置初值 ;查询TF0标志 查询TF0 TF 溢出,关闭T ;T0溢出,关闭T0 ;P1.0的状态求反
假设系统时钟为 MHz,编写定时器T 产生1秒定时的程 系统时钟为6 例 6- 2 假设 系统时钟为 6 MHz, 编写定时器T0 产生1 秒定时 的程 序。 (1)T0工作方式的确定 定时时间较长,采用哪一种工作方式? 定时时间较长,采用哪一种工作方式? 由各种工作方式的特性,可计算出: 由各种工作方式的特性,可计算出: 方式0最长可定时16 384ms 16. ms; 方式0最长可定时16.384ms;
单片机原理与应用设计
方式1最长可定时131.072ms; 方式1最长可定时131.072ms; 131 ms 方式2最长可定时512 方式2最长可定时512µs。 选方式1 每隔100ms中断一次,中断10次为1 选方式1,每隔100ms中断一次,中断10次为1s。 100ms中断一次 10次为 (2)计算计数初值 因为: X)× 因为:(216-X)×2×10-6 = 10-1 所以:X=15536= CB0 所以:X=15536=3CB0H 15536 因此:TH0=3CH,TL0=B0H 因此:TH0=3CH, 10次计数的实现 (3)10次计数的实现 采用循环程序
法。 采用循环程序法。 (4)程序设计 参考程序 :