1 / 28

第 6 章 MCS-51 单片机的 定时 / 计数器

第 6 章 MCS-51 单片机的 定时 / 计数器. 第 6 章 MCS-51 单片机的 定时 / 计数器. 6.1 定时器的定时与计数功能 6.2 定时器的有关特殊功能寄存器 6.3 定时器的四种工作方式 6.4 定时器的应用. 6.1 定时器的定时与计数功能. 1 定时器的结构 2 定时器的计数功能 3 定时器的定时功能. 1 定时器的结构. 定时器的实质是 16 位 加 1 计数器. 2 定时器的 计数 功能. 设置为 计数器模式时 。在每个机器周期的 S5P2 期间采样 T0 、 T1 引脚电平。

afia
Download Presentation

第 6 章 MCS-51 单片机的 定时 / 计数器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 MCS-51单片机的定时/计数器

  2. 第6章 MCS-51单片机的定时/计数器 • 6.1 定时器的定时与计数功能 • 6.2 定时器的有关特殊功能寄存器 • 6.3 定时器的四种工作方式 • 6.4 定时器的应用

  3. 6.1 定时器的定时与计数功能 • 1 定时器的结构 • 2 定时器的计数功能 • 3 定时器的定时功能

  4. 1 定时器的结构 • 定时器的实质是16位加1计数器

  5. 2 定时器的计数功能 • 设置为计数器模式时。在每个机器周期的S5P2期间采样T0、T1引脚电平。 • 当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 s。

  6. 3 定时器的定时功能 • 设置为定时器模式时:加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。 • 计数值N乘以机器周期Tcy就是定时时间t。

  7. 6.2 定时器的有关寄存器

  8. D7 D6 D5 D4 D3 D2 D1 D0 TCON字节地址88H 8F 8E 8D 8C 8B 8A 89 88 位地址 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位定义 6.2.1 TCON定时器控制/状态寄存器 1)启动控制位TR0、TR1 =0,停止定时器工作;=1,启动定时器工作 例:启动T0: SETB TR0 停止T0: CLR TR0 2)溢出中断标志位TF0、TF1 定时器溢出时,由硬件置位TFx=1; 若中断开放,向CPU请求中断,CPU响应Tx中断后,自动清0 TFx。 若中断禁止,可用软件检测TFx(判跳),必须软件清0。 WAIT:JBC TF0,NEXT;检测T0是否溢出,溢出,TF0清0。 SJMP WAIT ;未溢出,继续检测 NEXT: …;处理溢出 JNB TF0, $ ;检测T0是否溢出,未溢出,继续检测 CLR TF0 ;溢出,TF0清0. …… ;处理溢出.

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

  10. 6.2.3 定时器的计数数据寄存器TH1 TL1、TH0 TL08DH 8CH、8BH 8AH • 任何时候都可对它的当前值进行读/写操作, • 它们都只能字节寻址。 可预置初值的16位加1计数器 TH0、TL0、 TH1、TL1 预置T0初值指令: MOV TH0,#XH MOV TL0,#XL

  11. 6.3 定时器的四种工作方式

  12. 6.3.1 定时/计数器的工作方式0 方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成加1计数器。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

  13. 6.3.2 定时/计数器的工作方式1 方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。 计数个数N与计数初值X的关系为:

  14. 6.3.3 定时/计数器的工作方式2 方式2为自动重装初值的8位计数方式。 计数个数N与计数初值X的关系为: 工作方式2特别适合于用作较精确的脉冲信号发生器。如:串行口波特率发生器的使用

  15. 6.3.4 定时/计数器的工作方式3 方式3只适用于定时/计数器T0,将T0分成为两个独立的8位计数器TL0和TH0。 TL0作为定时/计数器:TL0占用原T0控制位及相关引脚:其操作和功能与方式0、1基本相同 TH0仅作定时器:TH0占用T1控制位: TR1、TF1及T1中断源。

  16. 6.3.4 定时/计数器的工作方式3 定时器T0工作于方式3时, T1只能工作在方式0、1、2 计数溢出时输出送串行口,此时T1作为串行口波特率发生器使用。以确定串行通讯的速率。 启动:设置好工作方式0、1、2时相当于TR1=1,T1便自动开始运行; 停止:当设置为工作方式3时相当于TR1=0, T1停止计数。

  17. 6.4 定时器的应用 • 1、定时器的初始化编程 • 2、定时器的溢出处理编程格式 • 3、定时器的应用举例

  18. 1、定时器初始化编程 使用定时器工作之前,先写入方式、控制寄存器,确定好定时器工作方式: • MOV TMOD,# 方式字;启动方式选择(内外共同启动/内启动) 功能选择—(计数/定时) 位数选择—(8/13/16位) • MOV THx,#XH;计算时间常数X, MOV TLx,#XL ;Tx时间常数初值装入数据寄存器, • (SETB EA ) ;开Tx中断 (SETB ETx) • SETB TRx;启动控制Tx定时器(启动/停止) 定时器初始化编程:在主程序中进行

  19. .计算时间常数X(计算初值) 计数器运行之前,需要预先给定初值 由于计数器是加1计数器,并在益处时产生中断请求, • 因此不能将计数值N送入计数器作为初值X,而应送入计数值的补码数作为初值 计数功能:X= 2n -计数值N n:13/16/8 定时功能:X= 2n - t/T t:定时时间s、T:机器周期s • .预置初值 方式0 MOV THx,#X高8位 MOV TLx,#X低5位 方式1 MOV THx,#X高8位 MOV TLx,#X低8位 方式2 MOV THx,#X8位 MOV TLx,#X8位 方式3 MOV TH0,#X8位 MOV TL0,#Y8位

  20. 2、 溢出处理编程格式及初值恢复方式(自动重装/软件重装) 1)查询方式:先查询定时器溢出标志,再进行溢出处理。 …;定时器初始化 WAIT:JBC TFx,PT ;检测溢出标志 SJMP WAIT PT: MOV THx,#XH ;软件恢复初值,重装时间常数 MOV TLx,#XL …;溢出处理 SJMP WAIT 2)中断方式:初始化后执行其他任务,中断服务程序中处理溢出 ORG 0000H LJMP MAIN ORG 000BH(001BH);T0(T1)中断入口 LJMP PTS MAIN:…;初始化后执行其他程序 PTS: MOV THx,#XH;软件重装时间常数 MOV TLx,#XL …;溢出中断服务程序 RETI

  21. 2ms 3、定时器的应用举例 解:每隔1ms改变一次P1.0的输出状态。用T1非门控方式定时。 计算时间常数:方式1:X = 216 - t/T = 216 -1000/1 = FC18H 【例6-2、3】:设fosc=12MHz。由P1.0输出周期为2ms的等宽度连续方波,使用T1的方式0、1。 方式0:X = 213 - t/T = 213 -1000/1 = 1C18H (1)查询方式: ORG 0000H START:MOV TMOD, #10H ;(主程序开始)定时器T1工作方式1 CLR P1.0 ;设置方波的起始状态 MOV TL1, #18H MOV TH1, #0FCH ;送初值,保证定时时间为1ms SETB TR1 ;启动定时器 LOOP: JNB TF1, $ ;查询是否溢出,等待1ms定时到 MOV TL1, #18H ;溢出处理 MOV TH1, #0FCH ;再送计数初值,保证定时时间始终为1ms CLR TF1 ;清溢出标志,以便下次判断 CPL P1.0 ;改变P1.0的状态 SJMP LOOP ;产生连续的方波 END 0000 0000B MOV TL0,#18H MOV TH0,#0E0H 。。。。 MOV TL0,#18H MOV TH0,#0E0H

  22. (2)中断方式 ORG 0000H AJMP START ;跳转主程序 ORG 001BH LJMP PITO1 ;跳转中断服务程序 ORG 0100H START:MOV SP, #60H ;堆栈初始化 MOV TMOD, #10H;(主程序开始)定时器T1工作方式1 MOV TH1, #0FCH ;设置计数初值 MOV TL1, #18H CLR P1.0 ;设置方波的起始状态 SETB EA ;开中断 SETB ET1 SETB TR1 ;启动定时器 SJMP $ ;等待中断 PITO1: MOV TL1, #18H MOV TH1, #0FCH ;再送计数初值,保证定时时间始终为1ms CPL P1.0 ;输出方波 RETI ;中断返回 END 00000000B MOV TL0,#18H MOV TH0,#0E0H MOV TL0,#18H MOV TH0,#0E0H

  23. 【例6-4】用T0以工作方式2计数,每计100次进行累加器加1操作。【例6-4】用T0以工作方式2计数,每计100次进行累加器加1操作。 解:①计算初值:方式2:X = 28 - 100 = 156 = 9CH ②TMOD初始化: GATE=0 , C/T=1, M1M0=10B ORG 0000H AJMP START ;转主程序 ORG 0100H START:MOV IE, #00H ;(主程序开始)关中断 MOV TMOD, #06H ;设置定时器T0方式2计数 MOV TH0, #9CH ;设置计数初值 MOV TL0, #9CH SETB TR0 ;启动计数 LOOP: JBC TF0, LOOP1 ;查询计数是否计满溢出 SJMP LOOP LOOP1:INC A ;累加器加1 SJMP LOOP END

  24. 【例6-5】用T0以工作方式2产生5kHz的连续方波,并由P1.0输出。设fosc=6MHz,查询方式。【例6-5】用T0以工作方式2产生5kHz的连续方波,并由P1.0输出。设fosc=6MHz,查询方式。 解:①计算初值:方式2:X = 28 – t(fosc/12)=256-100(6/12)=CEH ②TMOD初始化: GATE=0 , C/T=0, M1M0=10B ORG 0000H START:MOV TMOD, #02H;定时器T0工作方式2 CLR P1.0 ;设置方波的起始状态 MOV TL0, #0CEH ;送计数初值, MOV TH0, #0CEH ; 保证定时时间始终为100μs SETB TR0 ;启动定时器 LOOP:JNB TF0, $ ;等待100μs定时到 CLR TF0 ;清溢出标志,以便下次判断 CPL P1.0 ;改变P1.0的状态 SJMP LOOP ;产生连续的方波 END

  25. 【例6-7】用单片机的定时器设计一个工频计,并用二极管以二进制形式显示所测频率。设fosc=6MHz【例6-7】用单片机的定时器设计一个工频计,并用二极管以二进制形式显示所测频率。设fosc=6MHz 解:频率=每秒钟内T0输入的脉冲数 T0:计数方式2,T1:定时方式1 ①计算基准初值:T1定时方式1: X = 216 – t(fosc/12) =65536-125000(6/12) =0BDCH ②TMOD初始化: T1:GATE=0 , C/T=0,M1M0=01B T0:GATE=0 , C/T=1,M1M0=10B

  26. ORG 0000H AJMP MAIN ORG 001BH AJMP T_1 ORG 0100H MAIN: MOV SP, #60H ;堆栈初始化 MOV P1,#00 ;测量前显示0 MOV TMOD, #16H; T0计数方式2,定时器T1定时方式1 MOV TH0, #00H ;设置T0计数初值 MOV TL0, #00H MOV TH1, #0BH ;设置T1定时初值125ms MOV TL1, #0DCH MOV R3,#8 ;设置软件计数器 SETB EA ;开中断 SETB ET1 ORL TCON,#0101000B;同时启动定时器T1和计数器T0 SJMP $ ;等待中断 T_1: DJNZ R3,NEXT ;1s时间未到则中断返回,继续定时 ANL TCON,#10001111B;1s定时到,同时关闭T1、T0 MOV A,TL0 ;读出频率值到A CPL A ;取反,低电平点亮二极管 MOV P1,A ;送P1口进行显示 MOV TH0, #00H ;重新设置T0计数初值 MOV TL0, #00H MOV TH1, #0BH ;重新设置T1定时初值125ms MOV TL1, #0DCH MOV R3,#8 ;重新设置软件计数器 ORL TCON,#0101000B;同时启动定时器T1和计数器T0 RETI ;中断返回 EXIT: MOV TH1, #0BH ; 1s未到,重新设置T1定时初值125ms MOV TL1, #0DCH RETI ;中断返回 END

  27. MCS-51定时/计数器 小结 • 1、定时/计数器的结构? • 2、定时/计数器的四种工作方式? • 3、定时/计数器的初始化编程? • 4、定时/计数器的溢出处理方式? • 作业:P112 一、二、三

More Related