【大学课件】定时计数器PPT-精品文档
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6000000
定时时间为:TC=XTu。其中,Tu为单位时间间隔,TC为定时时间。 STC12C5410AD单片机的定时器/计数器0或1是对脉冲进行不断加1 进行计数的,因此,不能直接将实际的计数值作为计数初值送入计数寄 存器THX、TLX中,而必须将实际计数值以28、213、216为模求补,以补 码作为计数初值设置THX和TLX。即应装入计数/定时器的初值为:
$include ORG LJMP ORG LJMP ORG MAIN: MOV MOV MOV SETB SETB SETB HERE: LJMP T0_ISR: MOV RETI END (STC12.INC) ;包含STC12C5410AD单片机寄存器定义文件 0000H MAIN ;转主程序 000BH ;定时器T0中断服务程序入口地址 T0_ISR ;转中断服务程序 0100H ;主程序的存放起始地址 MOV SP,#60H ;给栈指针赋初值 TMOD,#06H ;定时器T0工作于方式2 TL0,#0FFH ;送时间常数 TH0,#0FFH ET0 ;允许T0中断 EA ;CPU开中断 TR0 ;启动T0计数器 HERE ;等待 DEC A ;T0中断服务程序 P1,A ;累加器A内容减1送P1口
13/49
单片机应用技术
【例8-l】 设计利用定时/计数器T0、T1端作为外部中断源输入线进行外部中断源扩充 的程序。 解:为了扩充外部中断源,可以利用定时/计数器工作于计数状态时,T0(P3.4) 或T1(P3.5)引脚上发生负跳变,计数器增1这一特性,把P3.4、P3.5作为外部中断源 请求输入线,使计数器的计数值为-1(即0FFH),则外部T0、T1输入一个脉冲即计数溢 出,从而置位相应的中断请求标志,以此来申请中断,则相当于扩充了一根/INT线。 编程时,将T0置为方式2计数,计数初值0FFH,计数输入端T0(P3.4)发生一次负 跳变,计数器加1并产生溢出标志向CPU申请中断,中断处理程序使累加器A内容减1,送 P1口,然后返回主程序。汇编语言程序清单如下:
Tc N2 Tu
n
n=8,13或16
10/49
单片机应用技术
系统时钟频率为6MHz,进行12分频时,定时器的最大定时能力
位数 最大定时能力
8
13
T=(28 -0)×2μs=512μs
T=(213 -0)×2μs=16384μs=16.384ms
16
T=(216 -0)×2μs=131072μs=131.072ms
3/49
单片机应用技术
单片机中的微处理器、寄存器TCON和TMOD与定时/ 计数器T0、T1之间的关系
P3.5 7 TH1 CPU 的 微处理器 TCON TMOD AUXR 内部总线 0 7 TL1 0 7 TH0 0 7 TL0 P3.4 0
4/49
单片机应用技术
2、定时/计数器方式和控制寄存器 定时器工作方式控制寄存器TMOD
单片机应用技术
第 8章
定时/计数器
8.1 STC12C5410AD单片机的定时/计数器
8.2 STC12C5410AD的PCA/PWM模块
1/49
单片机应用技术
在计算机控制中可供选择的定时方法
(1)软件定时 执行一个循环程序来实现。 (2)硬件定时 定时全部由硬件电路完成,不占用CPU时间,但需要 通过改变电路的元件参数来调节定时时间,在使用控制上 不够方便,同时增加了开发成本。 (3)可编程定时器定时 由单片机内部的定时模块单元完成。
12/49
单片机应用技术
5、定时/计数器编程举例 定时/计数器的应用编程主要有两点:一是能正确初始化,包 括写入控制字,进行时间常数的计算并装入;二是中断服务程序的
编写,即在中断服务程序中编写实现定时完成的任务代码。一般情
况下,定时/计数器初始化部分的步骤大致如下: (1)设置工作方式,将控制字写入TMOD寄存器。 (2)设置分频方式,将控制字写入AUXR寄存器。默认的情 况是12分频(兼容传统8051单片机),因此,如果使用传统8051 单片机模式,可以不进行设置。 (3)把定时/计数初值装入TLX、THX寄存器。 (4)置位ETX允许定时/计数器中断(如果需要)。 (5)置位EA使CPU开放中断。 (6)置位TRX以启动定时/计数。
3)TF0:定时器/计数器0溢出标志位。 4)TR0:定时器T0的运行控制位。 TCON的0~3位与外部中断有关。
6/49
单片机应用技术
AUXR:辅助寄存器
地址 8EH D7 T0x12 D6 T1x12 D5 UART_M0x6 D4 EADCI D3 ESPI D2 ELVDI D1 D0 复位值 000000XXB
15/49
单片机应用技术
【例8-2】 设系统时钟频率为6MHz,利用定时器T0定时,每隔1s 将P1.0的状态取反。
思路:将定时器的定时时间设为50ms,在中断服务程序中对定时器溢
出中断请求进行计数,当计够20次时,将P1.0的状态取反,否则直接 返回主程序。 选择定时器T0的工作方式:软件启动、定时方式、16位定时器, 方式字为01H。由于系统时钟频率为6MHz,12分频时,计数单位为 2μ s。定时器T0的装入初值为
T
:功能选择位。用于“计数器”或“定时器”功能的选择。
3)GATE:门控位。GATE用于选通控制。
5/49
Hale Waihona Puke 单片机应用技术定时器控制寄存器 TCON
地址 88H
D7
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0
复位值
00H
1)TF1:定时器/计数器1溢出标志位。
2)TR1:定时器T1的运行控制位。
11/49
单片机应用技术
(2)硬件扩展方法 硬件扩展方法可以使用外接通用定时器芯片对单片机的定时 能力进行扩展,如使用定时/计数器芯片8253,也可以利用单片 机自身的资源对定时能力进行扩展。 由于单片机的定时器没有对外输出引脚,所以两个16位的定 时/计数器不能直接连在一起,可以通过单片机的端口P0~P3实 现连接。下图给出了一种具体的连接方法。
STC12C5410AD单片机中提供的定时/计数器可以使用户很方便地实现定 时和对外部事件计数。但是在实际应用中,需要的定时时间或计数值可能超 过定时/计数器的定时或计数能力,特别是当单片机的系统时钟频率较高时, 定时能力就更为有限。为了满足需要,有时需要对单片机的定时计数能力进 行扩展。定时能力和计数能力扩展的方法相同,在此主要对定时能力的扩展 进行讨论,计数能力的扩展可参考定时能力扩展的方法进行。 当工作于定时状态时,定时/计数器是对时钟周期进行计数,若对时钟 进行12分频,则对每12个时钟周期计数。当晶振频率为6MHz,采用12分 频时,计数的单位时间间隔为 12 12 单位时间间隔Tu= 晶振频率= s=2μs
OSC
方式3
不分频 OSC/1 T0(P3.4)
C/T=0 C/T=1
TL0 (8位) 控制
TF0
中断
TR0 GATE INT0(P3.2) 12分频 OSC/12 OSC 不分频 OSC/1 T0x12=0,1 0 1 TR1
TH0 (8位) 控制
TF1
中断
9/49
单片机应用技术
4、定时/计数器量程的扩展
OSC12分频或不分频 C/T =0 C/T =1 加1 T FX中断 计数器
TX端
控制信号
定时/计数器的核心是一个加1计数器,加1计数器的脉冲有两 个来源,一个是外部脉冲源,另一个是系统的时钟振荡器。计数 器对两个脉冲源之一进行输入计数,每输入一个脉冲,计数值加1 。当计数到计数器为全1时,再输入一个脉冲就使计数值回零,同 时从最高位溢出一个脉冲使特殊功能寄存器TCON(定时器控制 寄存器)的某一位TF0或TF1置1,作为计数器的溢出中断标志。
STC12C5410AD单片机内部有 ★两个16位的定时/计数器 ★四路可编程计数器阵列(Programmable Counter Array, PCA )/脉宽调制(Pulse Width Modulation,PWM)。
2/49
单片机应用技术
8.1
STC12C5410AD单片机的定时/计数器
1、定时/计数器的结构及工作原理
T1 T0 计数器方 定时器方式 T1(P3.5) P1.0
1)T0设置为16位定时器方式,当T0溢出时,执行T0的中断服务 程序。在T0的中断服务程序中将P1.0取反。这样在P1.0将输出一个方 波,其周期为T0定时时间的2倍。设T0的定时时间为TIME,则由P1.0 输出的方波的周期为2×TIME。 2)T1设置为16位计数器方式,将P1.0输出的方波接到T1的定时 器外部输入端T1(P3.5),作为定时/计数器1的外部计数脉冲,其每个 周期的下降沿使T1加1。设计数器T1的计数脉冲数为COUNT,则当T1 溢出时,总定时时间T为:T = 2×TIME×COUNT。
TL0 TH0 (低5位) (8位) T F0 控制
中断
方式1
OSC 12分频T0x12=0,1 OSC/12 0 1 C/T =0 不分频 OSC/1 C/T =1 T 0(P3.4) T R0 GAT E INT 0(P 3.2)
TL0 TH0 T F0 (8位) (低8位) 控制
中断
8/49
单片机应用技术
UART_M0x6用于设置UART模式0的速度,详细内容请见“串行通信”一章。
7/49
单片机应用技术
3、定时/计数器的工作方式 方式0
OS C T0x12=0,1 12分频 OSC/12 0 1 不分频 C/T =0 OSC/1 C/T =1 T 0(P3.4) T R0 GAT E INT 0(P3.2)
扩展方法: (1)软件扩展方法 扩展方法是在定时器中断服务程序中对定时器中断请求进行 计数,当中断请求的次数达到要求的值时才进行相应的处理。例 如,某事件的处理周期为1s,但由于受到最大定时时间的限制, 无法一次完成定时,此时可以将定时器的定时时间设为以10ms 为一个单位,启动定时器后的每一次定时器溢出中断产生10ms 的定时,进入中断服务程序后,对定时器的中断次数进行统计, 每100次定时器溢出中断进行一次事件的处理,然后再以同样的 方式进入下一个周期的事件处理。
地址 89H D7 D6 D5 D4 D3 D2 D1 D0 复位值 00H
定时器1
GATE C/
定时器0
M0 GATE C/ T M1 M0
T
M1
1)M1和M0:方式选择控制位。
M1 M0 工作方式 功能说明
0 0
0 1 1 0 1 1
2)C/
0
1 2 3
13位计数器
16位计数器 可自动装入的8位计数器 定时器0:分成两个8位计数器 定时器1:停止计数
1)T0x12:定时器0速度控制位。 0:定时器0的速度是传统8051单片机定时器的速度,即12分频。 1:定时器0的速度是传统8051单片机定时器速度的12倍,即不分频。 2)T1x12:定时器1速度控制位。 0:定时器1的速度是传统8051单片机定时器的速度,即12分频。 1:定时器1的速度是传统8051单片机定时器速度的12倍,即不分频。
14/49
单片机应用技术
对应的C语言程序如下: #include “stc12.h” //包含STC12C5410AD单片机寄存器定义文件 unsigned char cnt; void timer0_ISR (void) interrupt 1 //T0 中断函数 { cnt = cnt- -; //在C语言程序中,使用变量cnt代替汇编语言中的累加器A P1 = cnt; } void main(void) { cnt=0xff; TMOD=0x06; //定时器0工作于方式2 TL0=0xff; TH0=0xff; TR0=1; ET0=1; EA =1; while(1); //等待中断 }
Tc 16 3 6 X M 2 ( 50 10 )/(2 10 ) 65536 25000 9E58 Tp
方式2
OSC
12分频 T0x12=0,1 OSC/12 0 1 不分频 C/T =0 OSC/1 C/T =1 T 0 (P 3 .4 ) T R0 GAT E INT 0 (P 3 .2 )
12分频 OSC/12 T0x12=0,1 0 1
TL0 (8位) 控制
T F0
中断
重装载 TH0 (8位)
定时时间为:TC=XTu。其中,Tu为单位时间间隔,TC为定时时间。 STC12C5410AD单片机的定时器/计数器0或1是对脉冲进行不断加1 进行计数的,因此,不能直接将实际的计数值作为计数初值送入计数寄 存器THX、TLX中,而必须将实际计数值以28、213、216为模求补,以补 码作为计数初值设置THX和TLX。即应装入计数/定时器的初值为:
$include ORG LJMP ORG LJMP ORG MAIN: MOV MOV MOV SETB SETB SETB HERE: LJMP T0_ISR: MOV RETI END (STC12.INC) ;包含STC12C5410AD单片机寄存器定义文件 0000H MAIN ;转主程序 000BH ;定时器T0中断服务程序入口地址 T0_ISR ;转中断服务程序 0100H ;主程序的存放起始地址 MOV SP,#60H ;给栈指针赋初值 TMOD,#06H ;定时器T0工作于方式2 TL0,#0FFH ;送时间常数 TH0,#0FFH ET0 ;允许T0中断 EA ;CPU开中断 TR0 ;启动T0计数器 HERE ;等待 DEC A ;T0中断服务程序 P1,A ;累加器A内容减1送P1口
13/49
单片机应用技术
【例8-l】 设计利用定时/计数器T0、T1端作为外部中断源输入线进行外部中断源扩充 的程序。 解:为了扩充外部中断源,可以利用定时/计数器工作于计数状态时,T0(P3.4) 或T1(P3.5)引脚上发生负跳变,计数器增1这一特性,把P3.4、P3.5作为外部中断源 请求输入线,使计数器的计数值为-1(即0FFH),则外部T0、T1输入一个脉冲即计数溢 出,从而置位相应的中断请求标志,以此来申请中断,则相当于扩充了一根/INT线。 编程时,将T0置为方式2计数,计数初值0FFH,计数输入端T0(P3.4)发生一次负 跳变,计数器加1并产生溢出标志向CPU申请中断,中断处理程序使累加器A内容减1,送 P1口,然后返回主程序。汇编语言程序清单如下:
Tc N2 Tu
n
n=8,13或16
10/49
单片机应用技术
系统时钟频率为6MHz,进行12分频时,定时器的最大定时能力
位数 最大定时能力
8
13
T=(28 -0)×2μs=512μs
T=(213 -0)×2μs=16384μs=16.384ms
16
T=(216 -0)×2μs=131072μs=131.072ms
3/49
单片机应用技术
单片机中的微处理器、寄存器TCON和TMOD与定时/ 计数器T0、T1之间的关系
P3.5 7 TH1 CPU 的 微处理器 TCON TMOD AUXR 内部总线 0 7 TL1 0 7 TH0 0 7 TL0 P3.4 0
4/49
单片机应用技术
2、定时/计数器方式和控制寄存器 定时器工作方式控制寄存器TMOD
单片机应用技术
第 8章
定时/计数器
8.1 STC12C5410AD单片机的定时/计数器
8.2 STC12C5410AD的PCA/PWM模块
1/49
单片机应用技术
在计算机控制中可供选择的定时方法
(1)软件定时 执行一个循环程序来实现。 (2)硬件定时 定时全部由硬件电路完成,不占用CPU时间,但需要 通过改变电路的元件参数来调节定时时间,在使用控制上 不够方便,同时增加了开发成本。 (3)可编程定时器定时 由单片机内部的定时模块单元完成。
12/49
单片机应用技术
5、定时/计数器编程举例 定时/计数器的应用编程主要有两点:一是能正确初始化,包 括写入控制字,进行时间常数的计算并装入;二是中断服务程序的
编写,即在中断服务程序中编写实现定时完成的任务代码。一般情
况下,定时/计数器初始化部分的步骤大致如下: (1)设置工作方式,将控制字写入TMOD寄存器。 (2)设置分频方式,将控制字写入AUXR寄存器。默认的情 况是12分频(兼容传统8051单片机),因此,如果使用传统8051 单片机模式,可以不进行设置。 (3)把定时/计数初值装入TLX、THX寄存器。 (4)置位ETX允许定时/计数器中断(如果需要)。 (5)置位EA使CPU开放中断。 (6)置位TRX以启动定时/计数。
3)TF0:定时器/计数器0溢出标志位。 4)TR0:定时器T0的运行控制位。 TCON的0~3位与外部中断有关。
6/49
单片机应用技术
AUXR:辅助寄存器
地址 8EH D7 T0x12 D6 T1x12 D5 UART_M0x6 D4 EADCI D3 ESPI D2 ELVDI D1 D0 复位值 000000XXB
15/49
单片机应用技术
【例8-2】 设系统时钟频率为6MHz,利用定时器T0定时,每隔1s 将P1.0的状态取反。
思路:将定时器的定时时间设为50ms,在中断服务程序中对定时器溢
出中断请求进行计数,当计够20次时,将P1.0的状态取反,否则直接 返回主程序。 选择定时器T0的工作方式:软件启动、定时方式、16位定时器, 方式字为01H。由于系统时钟频率为6MHz,12分频时,计数单位为 2μ s。定时器T0的装入初值为
T
:功能选择位。用于“计数器”或“定时器”功能的选择。
3)GATE:门控位。GATE用于选通控制。
5/49
Hale Waihona Puke 单片机应用技术定时器控制寄存器 TCON
地址 88H
D7
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0
复位值
00H
1)TF1:定时器/计数器1溢出标志位。
2)TR1:定时器T1的运行控制位。
11/49
单片机应用技术
(2)硬件扩展方法 硬件扩展方法可以使用外接通用定时器芯片对单片机的定时 能力进行扩展,如使用定时/计数器芯片8253,也可以利用单片 机自身的资源对定时能力进行扩展。 由于单片机的定时器没有对外输出引脚,所以两个16位的定 时/计数器不能直接连在一起,可以通过单片机的端口P0~P3实 现连接。下图给出了一种具体的连接方法。
STC12C5410AD单片机中提供的定时/计数器可以使用户很方便地实现定 时和对外部事件计数。但是在实际应用中,需要的定时时间或计数值可能超 过定时/计数器的定时或计数能力,特别是当单片机的系统时钟频率较高时, 定时能力就更为有限。为了满足需要,有时需要对单片机的定时计数能力进 行扩展。定时能力和计数能力扩展的方法相同,在此主要对定时能力的扩展 进行讨论,计数能力的扩展可参考定时能力扩展的方法进行。 当工作于定时状态时,定时/计数器是对时钟周期进行计数,若对时钟 进行12分频,则对每12个时钟周期计数。当晶振频率为6MHz,采用12分 频时,计数的单位时间间隔为 12 12 单位时间间隔Tu= 晶振频率= s=2μs
OSC
方式3
不分频 OSC/1 T0(P3.4)
C/T=0 C/T=1
TL0 (8位) 控制
TF0
中断
TR0 GATE INT0(P3.2) 12分频 OSC/12 OSC 不分频 OSC/1 T0x12=0,1 0 1 TR1
TH0 (8位) 控制
TF1
中断
9/49
单片机应用技术
4、定时/计数器量程的扩展
OSC12分频或不分频 C/T =0 C/T =1 加1 T FX中断 计数器
TX端
控制信号
定时/计数器的核心是一个加1计数器,加1计数器的脉冲有两 个来源,一个是外部脉冲源,另一个是系统的时钟振荡器。计数 器对两个脉冲源之一进行输入计数,每输入一个脉冲,计数值加1 。当计数到计数器为全1时,再输入一个脉冲就使计数值回零,同 时从最高位溢出一个脉冲使特殊功能寄存器TCON(定时器控制 寄存器)的某一位TF0或TF1置1,作为计数器的溢出中断标志。
STC12C5410AD单片机内部有 ★两个16位的定时/计数器 ★四路可编程计数器阵列(Programmable Counter Array, PCA )/脉宽调制(Pulse Width Modulation,PWM)。
2/49
单片机应用技术
8.1
STC12C5410AD单片机的定时/计数器
1、定时/计数器的结构及工作原理
T1 T0 计数器方 定时器方式 T1(P3.5) P1.0
1)T0设置为16位定时器方式,当T0溢出时,执行T0的中断服务 程序。在T0的中断服务程序中将P1.0取反。这样在P1.0将输出一个方 波,其周期为T0定时时间的2倍。设T0的定时时间为TIME,则由P1.0 输出的方波的周期为2×TIME。 2)T1设置为16位计数器方式,将P1.0输出的方波接到T1的定时 器外部输入端T1(P3.5),作为定时/计数器1的外部计数脉冲,其每个 周期的下降沿使T1加1。设计数器T1的计数脉冲数为COUNT,则当T1 溢出时,总定时时间T为:T = 2×TIME×COUNT。
TL0 TH0 (低5位) (8位) T F0 控制
中断
方式1
OSC 12分频T0x12=0,1 OSC/12 0 1 C/T =0 不分频 OSC/1 C/T =1 T 0(P3.4) T R0 GAT E INT 0(P 3.2)
TL0 TH0 T F0 (8位) (低8位) 控制
中断
8/49
单片机应用技术
UART_M0x6用于设置UART模式0的速度,详细内容请见“串行通信”一章。
7/49
单片机应用技术
3、定时/计数器的工作方式 方式0
OS C T0x12=0,1 12分频 OSC/12 0 1 不分频 C/T =0 OSC/1 C/T =1 T 0(P3.4) T R0 GAT E INT 0(P3.2)
扩展方法: (1)软件扩展方法 扩展方法是在定时器中断服务程序中对定时器中断请求进行 计数,当中断请求的次数达到要求的值时才进行相应的处理。例 如,某事件的处理周期为1s,但由于受到最大定时时间的限制, 无法一次完成定时,此时可以将定时器的定时时间设为以10ms 为一个单位,启动定时器后的每一次定时器溢出中断产生10ms 的定时,进入中断服务程序后,对定时器的中断次数进行统计, 每100次定时器溢出中断进行一次事件的处理,然后再以同样的 方式进入下一个周期的事件处理。
地址 89H D7 D6 D5 D4 D3 D2 D1 D0 复位值 00H
定时器1
GATE C/
定时器0
M0 GATE C/ T M1 M0
T
M1
1)M1和M0:方式选择控制位。
M1 M0 工作方式 功能说明
0 0
0 1 1 0 1 1
2)C/
0
1 2 3
13位计数器
16位计数器 可自动装入的8位计数器 定时器0:分成两个8位计数器 定时器1:停止计数
1)T0x12:定时器0速度控制位。 0:定时器0的速度是传统8051单片机定时器的速度,即12分频。 1:定时器0的速度是传统8051单片机定时器速度的12倍,即不分频。 2)T1x12:定时器1速度控制位。 0:定时器1的速度是传统8051单片机定时器的速度,即12分频。 1:定时器1的速度是传统8051单片机定时器速度的12倍,即不分频。
14/49
单片机应用技术
对应的C语言程序如下: #include “stc12.h” //包含STC12C5410AD单片机寄存器定义文件 unsigned char cnt; void timer0_ISR (void) interrupt 1 //T0 中断函数 { cnt = cnt- -; //在C语言程序中,使用变量cnt代替汇编语言中的累加器A P1 = cnt; } void main(void) { cnt=0xff; TMOD=0x06; //定时器0工作于方式2 TL0=0xff; TH0=0xff; TR0=1; ET0=1; EA =1; while(1); //等待中断 }
Tc 16 3 6 X M 2 ( 50 10 )/(2 10 ) 65536 25000 9E58 Tp
方式2
OSC
12分频 T0x12=0,1 OSC/12 0 1 不分频 C/T =0 OSC/1 C/T =1 T 0 (P 3 .4 ) T R0 GAT E INT 0 (P 3 .2 )
12分频 OSC/12 T0x12=0,1 0 1
TL0 (8位) 控制
T F0
中断
重装载 TH0 (8位)