1 / 21

第六章 MCS- 定时器 / 计数器

第六章 MCS- 定时器 / 计数器. 6.1 51 的定时 / 计数器 6.2 定时器 / 计数器的工作方式 6.3 定时器 / 计数器的应用. 6.1 51 的定时 / 计数器. 6.5.1 定时 / 计数器概述. 2 个 16 位 定时器 / 计数器 —— (52 系列有 3 个 16 位 Timer) 定时器 : 对片内机器时钟 ( 周期方波 ) 进行计数 计数器 : 对 Tx 引脚 输入的负脉冲进行计数. 与 Timer 工作有关的特殊功能寄存器: TCON 和 TMOD. 6.5.2 定时 / 计数控制.

aleron
Télécharger la présentation

第六章 MCS- 定时器 / 计数器

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. 第六章 MCS-定时器/计数器 6.1 51的定时/计数器 6.2 定时器/计数器的工作方式 6.3定时器/计数器的应用

  2. 6.1 51的定时/计数器 6.5.1 定时/计数器概述 2个16位定时器/计数器 ——(52系列有3个16位Timer) 定时器:对片内机器时钟(周期方波)进行计数 计数器:对Tx引脚输入的负脉冲进行计数 与Timer工作有关的特殊功能寄存器: TCON 和 TMOD

  3. 6.5.2 定时/计数控制 Timer的2个特殊功能寄存器(TCON,TMOD) 一、定时器控制寄存器TCON(88H) TF1 TR1 TF0TR0IE1 IT1 IE0 IT0 TFx: Timer0/1计数溢出标志位。 =1 计数溢出; =0 计数未满TFx标志位 可用于申请中断或供CPU查询。 在进入中断服务程序时会自动清零;但在 查询方式时必须软件清零。 TRx: Timer0/1运行控制位。 =1 启动计数; =0 停止计数

  4. 定时器T0/T1 中断申请过程 定时/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数 •  在已经开放T0/T1中断允许且已被启动的前提下: • T0/T1加满溢出时 TF0/TF1标志位自动置“1”  检测到TCON中TF0/TF1变“1”后,将产生指令: • LCALL 000BH/LCALL 001BH 执行中断服务程序, •  TF0/TF1标志位会自动清“0”,以备下次中断申请。 TCON (88H) TF1 TR1 TF0 TR0IE1 IT1 IE0 IT0 TR0/TR1:Timer0/1运行控制位: TR0/TR1 =0 时,Timer0/1停止计数 TR0/TR1 =1 时,Timer0/1启动计数

  5. 二、定时器方式寄存器TMOD (89H) T1 T0 GATE C / T M1 M0 GATE C / T M1 M0 M1,M0:工作方式定义位 ( 定义4 种方式 ): 0 0:13位 Timer——用它无益,不要记它! 0 1:16位 Timer——经常用到 1 0:可自动重装的 8位 Timer——经常用到 1 1:T0 分为2个8位 Timer;T1 此时不工作 ——因为没有带来甚麽好处,几乎无用 C/T :计数器/定时器选择位 = 1 外部事件计数器。对Tx引脚的负脉冲计数; = 0 片内时钟定时器。对机器周期脉冲计数定时

  6. (89H) GATE C / T M1 M0 GATE C / T M1 M0 T0 T1 GATE门控位: Timer可由软件与硬件两者控制 GATE = 0 ——普通用法 Timer的启/停由软件对TRx位写“1”/“0”控制  GATE = 1 ——门控用法 Timer的启/停由软件对TRx位写“1”/“0” 和在INTx引脚上出现的信号的高/低共同控制

  7. 6.2 定时器的工作方式及 应用 6.2.1工作方式1 一、工作方式1的结构图 振荡器 12 C/T=0 TLx THx (8位) (8位) 申请中断 TFx C/T=1 Tx端 控制 =1开关接通 TRx位 & GATE位 ≥1 与门 INTx端 或门

  8. 二、工作方式1 的编程要点: THx/TLx赋初值:THx赋高8位,TLx赋低8位 TMOD选方式: 写“M1,M0”=01 b 选方式1  若不用门控位,直接用软件写TRx控制启/停  若使用门控位,先置位TRx,然后由INTx端 的高/低电平来控制其启/停  若要允许中断,还须先置位ETx、EA等中断 允许控制位,并编写中断服务程序  若不用中断,可查询“计数溢出标志TFx” 的方式工作,但溢出标志TFx须软件清0

  9. 例1 若晶振频率为6MHz,计算单片机的最小与最大定时时间: 分析:已知fosc= 6MHz 则: (振荡周期)1Tc=1/6MHz (机器周期)1Tm=12Tc=12/6MHz=2S 粗略地说:Tmin  2S 16位定时器最大数值为:216=65536=0FFFFH+1 故选择方式 1 工作可以得到: Tmax = 655362 = 131072S=131.072mS

  10. 例2 要求对T0产生100mS定时进行初始化。(晶振=6MHz) 分析:已知fosc= 6MHz 则: (机器周期)1Tm=12Tc=12/6MHz=2S 100mS÷2 S = 50000 16位定时器最大数值为: 216 = 65536 (=0FFFFH+1) 故选择方式1工作可以满足要求。 计算初值:65536-50000=15536=3CB0H

  11. 由分析得知:T0选择方式1,初值=3CB0H GATE C / T M1 M0 GATE C / T M1 M0 X X X X 0 0 0 1 初始化:MOV TMOD,#01H ;选 T0 方式 1 MOV TH0, #3CH ;赋初值高8位 MOV TL0, #0B0H ;赋初值低8位 SETB TR0 ;启动 T0定时 若需要定时器0产生中断还应当写如下语句: SETB ET0 ;开T0中断允许 SETB EA ;开总中断允许 以及相应的中断服务程序。

  12. 6.2.2工作方式2 一、工作方式2的结构图 振荡器 12 C/T=0 申请中断 TLx (8位) TFx C/T=1 溢出位 Tx端 控制 =1开关接通 TRx位 & 门开 THx (8位) GATE位 ≥1 与门 INTx端 或门

  13. 二、工作方式 2 的编程 ☞ THx/TLx赋相同初值 在TLx计数达到0FFH 再加“1”时,TL0 将溢出,进位位直接进入“TFx”去申请 中断,同时打开三态门,使THx中的值 自动重装(Copy)进TLx ☞ TMOD寄存器选方式: 写“M1,M0” = 10 b 选中方式2 ☞ 其他用法与各种方式1完全相同

  14. 例3 从P1.0 脚输出频率=1KHz方波。 设:晶振=6MHz。利用T1定时中断。 分析:fosc= 6MHz 1机器周期 = 2 S 1KHz方波周期 = 1 mS 半个方波周期 =500S 500uS÷2 uS = 250 若选择方式2 工作,8位定时器最大数值为: 28 =256 =0FFH + 1 可以满足要求。 计算初值:256-250=6 Th:半周期 T:周期

  15. ORG 0000H AJMP MAIN ORG 001BH ;T1的中断矢量 CPL P1.0 ;中断服务:P1.0取非 RETI ;中断返回 MAIN: MOV TMOD,#20H MOV TH0, #6 MOV TL0, #6 SETB ET1 SETB EA SETB TR1 HERE: AJMP HERE ;原地等待中断 END ;选T1方式2 ;赋重装值 ;赋初值 ;开T1中断 ;开总中断 ;启动T1 初始化

  16. 6.2.3 Timer工作方式 3 T0: 组织成TL0和TH0两个8位定时/计数器 T1: 不再是定时/计数器了 T1 的TR1和TF1出借给TH0当控制位使用, 剩下的TH1/TL1寄存器只能当作普通寄存 器用。

  17. 一、Timer工作方式 3 结构: TR1位 控制 =1 申请中断 TH0 (8位) TF1 振荡器 12 C/T=0 申请中断 TL0 (8位) TF0 C/T=1 控制 =1开关接通 T0端 TR0位 & GATE位 ≥1 与门 INT0端 ☞T0成为双 8位Timer ☞T1不再有Timer功能 ☞TF1,TR1出借给TH0 或门

  18. 6.3定时器/计数器的应用 例3长定时举例(设晶振=6MHz,要定时1秒): ORG 0000H ; AJMP MAIN ORG 001BH AJMP TINT ;见下一页 MAIN: MOV TMOD,#10H ;选T1方式1 MOV TH1, #3CH ;赋初值3CB0H=15536(只能定100mS) MOV TL1,#0B0H MOV 30H,#10 ;软件计数单元30H 初值=10 CLR F0 ;芯片复位时已经是“0”,此句可有可无 SETB ET1 ;开T1中断 SETB EA ;开总中断 SETB TR1 ;启动T1 HERE: JBC F0,TIMEUP ;原地等待“1秒到”的标志 F0 AJMP HERE TIMEUP:(do something) ;定时1秒到了以后要做的事情 AJMP HERE 中断服务在主程序中

  19. 长定时举例(续): ORG 0000H AJMP MAIN ORG 001BH AJMP TINT MAIN: ………………… TINT:DJNZ 30H,RTN ;若中断不到10次就返回 SETB F0 ;已经中断够10次了“置1”标志位 MOV 30H,#10 ;为下一个1秒定时做准备 RTN: MOV TH1,#3CH ;再赋定时100mS的初值3CB0H MOV TL1,#0B0H RETI ;中断返回 END

  20. 将此例的中断服务改写在中断服务程序中: ORG 0000H AJMP MAIN ORG 001BH AJMP TINT ;见下一页 MAIN: MOV TMOD,#10H ;选T1方式1 MOV TH1,#3CH ;赋初值3CB0H=15536(只能定100mS) MOV TL1,#0B0H MOV 30H,#10 ;软件计数单元30H 初值=10 CLR F0 ;芯片复位时已经是“0”,此句可有可无 SETB ET1 ;开T1中断 SETB EA ;开总中断 SETB TR1 ;启动T1 HERE: AJMP HERE ;原地等待中断

  21. 长定时举例(续): ORG 0000H AJMP MAIN ORG 001BH AJMP TINT MAIN: ………………… TINT:DJNZ 30H,RTN ;若中断不到10次就返回 MOV 30H,#10 ;为下一个1秒定时做准备 (do something);定时1秒到了以后要做的事情) RTN: MOV TH1,#3CH ;再赋初值 MOV TL1,#0B0H RETI ;中断返回 END 中断服务

More Related