六章定时器及应用.ppt

上传人:本田雅阁 文档编号:2594289 上传时间:2019-04-14 格式:PPT 页数:42 大小:866.01KB
返回 下载 相关 举报
六章定时器及应用.ppt_第1页
第1页 / 共42页
六章定时器及应用.ppt_第2页
第2页 / 共42页
六章定时器及应用.ppt_第3页
第3页 / 共42页
六章定时器及应用.ppt_第4页
第4页 / 共42页
六章定时器及应用.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《六章定时器及应用.ppt》由会员分享,可在线阅读,更多相关《六章定时器及应用.ppt(42页珍藏版)》请在三一文库上搜索。

1、2019/4/14,1,第六章 定时器及应用,6- 定时器/计数器,6- 综合应用举例,6- 定时器/计数器的扩展,2019/4/14,2,6- 定时器/计数器,一、定时方法: 1、硬件定时:较长时间;不够灵活、方便; 2、软件定时:编循环程序,时间精确;占用CPU; 3、可编程定时器定时:对系统时钟脉冲记数, 灵活、方便。,2019/4/14,3,二、定时器/计数器的工作原理: 定时器/计数器中的核心部件为可预置初值计数器。预置初值后开始计数,直至计数值回0或产生溢出,可申请中断(或供查询)。 计数器有加1计数或减1计数两种形式。,2019/4/14,4,作为定时器用时的计时速度:一个机器周

2、期计数器加1,直至计满溢出。 如晶振为12MHz的单片机,一个机器周期为1S,其计数频率为振荡频率的1/12 。 作为计数器用时的计数速度:每两个机器周期计数器加1,计数频率最高为振荡频率的1/24。 在S5P2对计数输入引脚T0、T1进行采样,下降沿计数。 说明: 定时器/计数器在工 作期间不占用CPU的时间。,三 MCS-51定时器/计数器,定时器初始化编程包括: 1.功能选择(定时/计数); 2.位数选择(8/13/16位); 3.启动方式选择(内部启动/外部启动); 4.启动控制(启动/停止); 5.恢复初值方式(自动重装/软件重装)。,2个可独立控制的16位定时器/计数器: 加法计数

3、器T0、T1,1、TMOD定时器方式寄存器(89H):,1)功能选择位C/T: =0:定时功能,计数内部机器周期脉冲; =1:计数功能,计数引脚T0(T1)输入的负脉冲。,2)方式选择位M1、M0:4种工作方式:13/16/8位,四、定时器控制、状态寄存器,3)门控方式选择位GATE : =0,非门控方式(内部启动): TRx=1,启动定时器工作; TRx=0,停止定时器工作。 =1,门控方式(外部启动): TRx=1且引脚INTx=1才启动。,确定定时器工作方式指令: MOV TMOD,#方式字 例:设T0用方式2非门控定时, T1用方式1门控计数。 MOV TMOD,#?,2、TCON定时

4、器控制/状态寄存器:,1)启动控制位TR0、TR1: =0,停止定时器工作; =1,启动定时器工作。 例:启动T0: SETB TR0,2)溢出中断标志位TF0、TF1: 定时器溢出使TFx=1,引起中断请求,CPU响应Tx中断 后,系统自动将TFx清0。,当然,也可用软件检测TFx,这时必须软件清0。 WAIT: JBC TF0,NEXT ;检测T0是否溢出 SJMP WAIT ;未溢出,继续检测 NEXT: ;溢出,TF0清0,处理溢出,2019/4/14,9,TCON的地址及格式如下,可按位寻址。 各位的意义如下: TF1(TCON.7, 8FH位)-T1溢出标志位。 TF0(TCON.

5、5, 8DH位)-T0溢出标志位。 TR1(TCON.6, 8EH位)-T1运行控制位。 0:关闭T1;1:启动T1运行。 TR0(TCON.4, 8CH位)-T0运行控制位。 0:关闭T0;1:启动T0运行。,2019/4/14,10,TCON各位的意义如下图所示:,3、可预置初值的16位加1计数器TH0、TL0、TH1、TL1: 如:预置T0初值指令: MOV TH0,#XH MOV TL0,#XL,五、 定时器工作方式,由方式选择位M1、M0设定。,1、方式0(M1M0=00): 13位定时/计数器。THx8位和TLx低5位组成加1计数器。,计数外部脉冲个数:18192(213) 定时时

6、间(若T=1s):1s8.19ms,fosc,T=12/fosc,2019/4/14,13,(一) 模式0工作时的构成: (1)运行控制部分;(2)定时/计数信号源; (3)13位计数器;(4)溢出标志。 (二) 特点 1、可定时(C/T=0)、可计数(C/T=1) ; 2、13位方式(TL0、1的低5位和TH0、1的8位); 3、INT0、INT1是定时器/计数器0、1的外部门, GATE=1允许使用外部门(TR0、1应置1), 此时用外部门控制运行 GATE=0禁止外部门,此时用TR0、1控制运行; 4、计数值N和定时时间t的计算 : N= 213- 初值X t=(213-初值X)*振荡周

7、期*12 =(213-初值X)*机器周期Tcy 最大计数值为: 213 = 8192,2019/4/14,14,(三) 应用举例 例6-1 设定时器T0选择工作模式0,定时时间为1ms, osc=6MHz。试确定T0初值,计算最大定时时间T。 解: (1)求T0的初值X 由公式:t=(213-T0初值)*机器周期Tcy t=1ms=1000s 机器周期Tcy=12/osc=12/6000000s=2s 得 1000=( 213 -X)*2 所以初值 X=8192-500=7692=1111000001100B T0的低5位:01100B=0CH T0的高8位:11110000B=F0H (2)

8、最大定时时间T 当T0的初值=0时为最大定时时间 T=(213 -0)*2=8192*2s =16384 s =16.384ms,7692 32 商为高8位, 余数为低5位,2019/4/14,15,例6-2 设T1以模式0定时,定时时间为1ms, osc=6MHz,编程实现其定时功能。 解: (1)计算初值(同上,略) F0HTH0,0CHTL0 (2)程序清单 ORG 0000H AJMP MAIN ORG 000BH AJMP IT0P ;主程序 ORG 0100H MAIN: MOV SP,#5FH,MOV TMOD ,#00H MOV TL0,#0CH MOV TH0,#0F0H S

9、ETB TR0 SETB ET0 SETB EA SJMP $,2019/4/14,16,;中断服务程序 ORG 0120H IT0P:MOV TL0,#0CH MOV TH0,#0F0H CPL P1.0 RETI,2019/4/14,17,例6-3 利用T0的工作模式0产生1ms的定时,编程实现在P1.0引脚上输出周期为2ms的方波。设单片机的晶振频率osc=12MHz。 解: 方法:定时1ms,对P1.0取反,然后继续定时 (1)设置模式字 TMOD= * 0000B =00000000B=00H (2)计算初值 由公式:t=(213-T0初值)*机器周期 t=1ms=1000s, 机器

10、周期Tcy=12/osc=12/12000000s=1s 得 1000=( 213 -X)*1=(8192-X)*1 所以初值 X=7192=1110000011000B T0的低5位:11000B=18H T0的高8位:11100000B=E0H,7192 32 商为高8位, 余数为低5位,2019/4/14,18,(3)程序清单 方法一:中断方式 ORG 0000H RESET:LJMP MAIN ORG 000BH LJMP CTC0 ;主程序 ORG 0030H MAIN: MOV SP,#5FH MOV TMOD,#0 MOV TL0,#18H MOV TH0,#0E0H SETB

11、EA SETB ET0 SETB TR0 SJMP $,;中断服务程序 ORG 0100H CTC0:MOV TL0,#18H MOV TH0,#0E0H CPL P1.0 RETI,2019/4/14,19,方法二:查询方式 ORG 0000H START:MOV SP,#5FH MOV TMOD,#0 MOV TL0,#18H MOV TH0,#0E0H SETB TR0 LOOP: JBC TF0,NEXT SJMP LOOP NEXT: MOV TL0,#18H MOV TH0,#0E0H CPL P1.0 SJMP LOOP,可替换为: LOOP:JNB TF0,$ CLR TF0

12、MOV TL0,#18H :,16位定时/计数器。 THx8位和TLx8位组成16位加1计数器。,计数外部脉冲个数:165536(216) 定时时间(若T=1s):1s(65536T=65.54ms),2、方式1(M1M0=01):,T=12/fosc,3、方式2(M1M0=10):,自动恢复初值8位定时/计数器。TLx为8位加1计数器, THx为8位初值暂存器。,用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(若T=1s): 256s,T=12/fosc,4、方式3(M1M0=11):,T0分成2个8位定时器:TL0定时/计数器和TH0定时器; TL0占用T0控制

13、位:C/T,TR0,GATE; TH0占用T1控制位:TR1、TF1; T1不能使用方式3工作,常作串口的波特率发生器使用。,2019/4/14,23,TMOD各位的意义如下: M1和M0-工作模式控制位。其功能如下表: C/T-定时器/计数器方式选择位。 0:定时器;1:计数器。 GATE-外部门控位。 0:不用外部门;1:使用外部门。,2019/4/14,24,求THX、TLX的方法:,T0运行于计数器状态,工作于方式1 (16位方式),要求外部引脚出现3个 脉冲后,TH0、TL0全回0(以便申请 中断)。求计数初值C。 解:C=(0003H)求补=FFFDH,例1:,加1计数,例2:,T

14、0运行于定时器状态,时钟振荡周期为12MHZ,要求定 时100s。求不同工作方式时的定时初值C。 解:fosc=12MHz T=1s X=100s/1s=(100)D=64H 方式0(13位方式):C=(64H)求补=0 0000 0110 0100 B+1 =1F9CH 方式1(16位方式):C=(64H)求补=0000 0000 0110 0100 B+1 =FF9CH 方式2、3(8位方式):C=(64H)求补=0110 0100 B+1 =9CH,注意:工作方式0的初值装入方法: 1F9CH=0001 1111 1001 1100 B 可见,TH0=FCH,TL0=1CH,TL0的低5

15、位,TH0的8位,MOV TH0,#0FCH MOV TL0,#1CH,T=12/fosc,六、MCS-51定时器的应用,1计数功能: 生产线上产品计数:每个产品通过得到一个脉冲信号, 计数器记录脉冲个数,当计数值与 设定值相等,启动包装机器。 检测转速:电机转动一圈发出一个脉冲,计数器记录一 秒时间内脉冲个数,显示转速。 2定时功能: 用于实时控制:定时采样、定时启动等。 当定时时间与设定值相等,执行规定操作。,3.定时器初始化编程 使用定时器工作之前,先写入控制寄存器, 确定好定时器工作方式。 初始化编程格式:,MOV TMOD,# 方式字 ;选择方式 MOV THx,#XH ;装入Tx时

16、间常数 MOV TLx,#XL (SETB EA ) ;开Tx中断 (SETB ETx ) SETB TRx ;启动Tx定时器 需考虑:1. 按实际需要选择定时/计数功能; 2. 按时间或计数长度选择工作方式; 3. 计算时间常数:,计算时间常数X(计算初值): 计数功能:X= 2n -计数值 (n:8/13/16) 定时功能:X= 2n - t/T (t:定时时间; T:机器周期),4. 溢出处理编程格式,1)查询方式:先查询定时器溢出标志,再进行溢出处理。 ;定时器初始化 WAIT: JBC TFx,PT ;检测溢出标志 SJMP WAIT PT: MOV THx,#XH ;重装时间常数

17、MOV TLx,#XL ;溢出处理 SJMP WAIT,2)中断方式:初始化后执行其它任务,中断服务程序处理溢出。 ORG 0000H LJMP MAIN ORG 000BH(001BH) ;Tx中断入口 LJMP PTS MAIN: ;初始化后执行其他程序 PTS: ;溢出中断服务程序 MOV THx,#XH ;重装时间常数 MOV TLx,#XL RETI,练习:80C51单片机选择16位加1计数器。 按要求选择功能和初值。 1、要求检测到100个脉冲,发中断请求,通知CPU。 选计数功能,计数初值为156。 2、要求定时每隔100s时间,发一次中断请求。 设内部时钟周期1s 选定时功能,

18、计数初值为156。,80C51单片机内有2个16位的T0和T1,如在应用中,定时器/计数器的数量或功能不能满足要求,则可在外部扩展。 扩展的芯片主要有8253(最高时钟频率为2MHz)和8254(最高时钟频率为8MHz)等。它们均为减法计数。各有3个独立的16位计数器T0、T1和T2,它们既可用于计数,又可用于定时,并可运行在0模式5模式共6种不同的工作模式中。,6- 定时器/计数器的扩展,6- 定时器/计数器与中断综合应用举例,例1:由P1.0输出方波信号,周期为2ms, 设fosc=12MHz。,解:每隔1ms改变一次P1.0的输出状态。 用T0非门控方式1定时。 计算时间常数:X=216

19、-t/T=216-1000/1 =FC18H,(1)查询方式: START:MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB TR0 LOOP: JBC TF0,PTF0 SJMP LOOP PTF0: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH SJMP LOOP,(2)中断方式:,ORG 0000H AJMP MAIN ORG 000BH ;T0定时器 AJMP PT0INT ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB

20、 EA SETB ET0 SETB TR0 HERE: SJMP HERE PT0INT: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH RETI,利用C51程序实现:,#include sbit P1_0=P10; Void main (void) TMOD=0x01; /*定时器0方式1*/ TR0=1; /*启动T/C0*/ for (;) TH0=(65536-1000)/256; /*装载计数初值*/ TL0=(65536-1000)%256; do while (! TF0); /*等待查询TF0置位*/ P1_0=! P1_0; /*定时时间到P1.0反

21、相*/ TF0=0; /*软件清TF0*/ ,用定时器0的方式1编程,采用查询方式。,reg51.h文件定义了所有8051的特殊功能寄存器及中断,#include sbit P1_0=P10; Void timer0 (void)interrupt 1 using 1 /*T/C0中断服务程序入口*/ P1_0=! P1_0; /*定时时间到P1.0反相*/ TH0=(65536-1000)/256; /*计数初值重装载*/ TL0=(65536-1000)%256; Void main(void) TMOD=0x01; /*定时器0工作在方式1*/ P1_0=0; TH0=(65536-10

22、00)/256; /*预置计数初值*/ TL0=(65536-1000)%256; EA=1; /*CPU开中断*/ ET0=1; /*T/C0开中断*/ TR0=1; /*启动T/C0开始定时*/ do while(1); ,用定时器0的方式1编程,采用中断方式。,例2:,长定时方法:增加一个软件 计数器或一个硬件计数器。,本题采用硬件方式: T0定时,定时10ms; T1计数T0的定时跳变信号P1.0的负跳变次数,计满50个跳变为1秒。(查询方法),START: MOV TMOD,#61H MOV TL1,#0CDH MOV TH1,#0CDH CLR P1.0 SETB TR1 LOOP

23、1: CPL P1.7 LOOP2: MOV TL0 ,#78H MOV TH0,#0ECH SETB TR0 LOOP3: JBC TF0,LOOP4 SJMP LOOP3 LOOP4: MOV TL0 ,#78H MOV TH0,#0ECH CPL P1.0 JBC TF1,LOOP1 SJMP LOOP2,T=2s,X=5105个T,而最大只能65536个T, 不能满足要求,必须借助硬件计数器或软件循环。 T0定时初值: (方式1) t=10ms,X=5000D=1388H,C=(1388H)补=EC78H T1计数初值: (方式2) X=50D,C=(32H)补=CDH,P1.7驱动L

24、ED亮1秒灭1秒地闪烁,设时钟频率为6MHz。,利用C51程序实现:,#include sbit P1_0=P10; sbit P1_7=P17; timer0 interrupt 1 using 1 /*T/C0中断服务程序*/ P1_0=! P1_0; /*10ms定时时间到, P1.0反相*/ TH0=(65536-5000)/256; /*计数初值重装载*/ TL0=(65536-5000)%256; timer1 interrupt 3 using 2 /*T/C1中断服务程序入口*/ P1_7=! P1_7; /*1s定时时间到, 灯改变状态*/ main( ) P1_7=0; /

25、*置灯初始灭*/ P1_0=1; /*保证第一次反相便开始计数*/ TMOD=0x61; /*定时器0工作在方式1定时,定时器1工作在方式2计数 */ TH0=(65536-5000)/256; /*预置计数初值*/ TL0=(65536-5000)%256; TH1=256-50; TL1=256-50; IP=0x08; /*置优先级寄存器*/ EA=1; /*CPU开中断*/ ET0=1; /*开T/C0中断*/ ET1=1; /*开T/C1中断*/ TR0=1; /*启动T/C0*/ TR1=1; /*启动T/C1*/ for (;) ,reg51.h文件定义了所有8051的特殊功能寄

26、存器及中断,例3:,外部负脉冲引起中断请求,选计数方式,时间常数为FFH。,START:MOV TMOD,#90H MOV TL1,#00H MOV TH1,#00H WAIT1:JB P3.3,WAIT1 SETB TR1 WAIT2:JNB P3.3,WAIT2 WAIT3:JB P3.3,WAIT3 CLR TR1 MOV R2,TL1 MOV R3,TH1 ,TR1=1 T1启动 TR1=0 T1停止,定时器外部引脚T0(T1)用作外部中断信号输入端 (单片机振荡频率为 12M)。,ORG 0000H LJMP MAIN ORG 001BH AJMP PRIC MAIN: SETB T

27、R1 SETB ET1 ;开T1中断 SETB EA WAIT2: JNB P3.3,WAIT2 ;等待正脉冲到来 WAIT3: JB P3.3,WAIT3 ;等待正脉冲结束 CLR TR1 ;关闭T1 MOV IE,#00H ;关闭中断 MOV R2,TL1 ;读出T1 MOV R3,TH1 LCALL PPS ;计算脉宽 HERE: SJMP HERE ;其他任务 PRIC: INC R4 ;记录溢出次数 RETI PPS: ;计算脉宽子程序,计算脉宽的子程序的计算式如下: 脉宽t=(R4216 +R3 R2)T (T为机器周期),(2)设脉宽大于65.5ms: 中断方式记录TH1TL1溢

28、出中断次数。,1、5个中断源及其对应入口地址: 外中断2个:INT0、INT1 定时中断2个:T0、T1 串行中断1个:RI/TI 2、中断优先原则:分2个优先级; 同级: INT0T0INT1T1RI/TI。 3、中断响应过程: 4、中断系统内部结构: 5、中断请求的撤消:3类中断请求撤消的异同点。 6、中断源的扩展。 7、定时器/记数器的工作原理、4种工作方式。 8、定时器/记数器与中断的综合应用。,小 结,2019/4/14,40,9、利用定时器/计数器形成中断源,把定时器/计数器T0(T1)设置成记数状态,并把 计数器初值设置成只要加1个外部脉冲后计数器就回0的 数值时,在打开了中断的条件下,外部信号只要出现1 个脉冲周期就可引起中断请求。 当计数器设置成方式0时,计数器初值应为FF1FH; 当计数器设置成方式1时,计数器初值应为FFFFH; 当计数器设置成方式2/3时,计数器初值应为FFH。 方式2能自动重装初值; 方式0、1、3不能,必须需重装。,2019/4/14,41,例如以定时器/计数器0扩展一个外部中断,其初始化程序段为:,MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB EA SETB ET0 SETB TR0,2019/4/14,42,P/141 例,设计实时时钟程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1