1 / 32

单片机原理与应用

单片机原理与应用. 第7章 定时器/计数器. 第7章 定时器 /计数器. 本章要点:. 7.1 定时器/计数器的功能和结构 7.2 定时器/计数器的工作原理 7.3 定时器/计数器的工作方式 7.4 定时器/计数器的编程. 7.1 定时器/计数器的功能和结构. 第7章 定时器 /计数器. 7.1.1定时器/计数器的功能. 7.1.2定时器/计数器的结构. 第7章 定时器 /计数器. 7.1.2定时器/计数器的结构. 7.2 定时器/计数器的工作原理. 第7章 定时器 /计数器. 第7章 定时器 /计数器.

theta
Download Presentation

单片机原理与应用

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. 单片机原理与应用

  2. 第7章 定时器/计数器

  3. 第7章 定时器/计数器 本章要点: • 7.1 定时器/计数器的功能和结构 • 7.2 定时器/计数器的工作原理 • 7.3 定时器/计数器的工作方式 • 7.4定时器/计数器的编程

  4. 7.1 定时器/计数器的功能和结构 第7章 定时器/计数器 7.1.1定时器/计数器的功能 7.1.2定时器/计数器的结构

  5. 第7章 定时器/计数器 7.1.2定时器/计数器的结构

  6. 7.2 定时器/计数器的工作原理 第7章 定时器/计数器

  7. 第7章 定时器/计数器 7.3 定时器/计数器的工作方式 7.3.1工作方式寄存器-TMOD

  8. 第7章 定时器/计数器 7.3.1工作方式寄存器-TMOD (1)GATE: 门控位,实现选通控制 GATE=0时,只需用软件使TR0(或TR1)置1就可以启动定时器,而不管INT0(或INT1)的电平是高电平还是低电平; GATE=1时,只有在INT0(或INT1)引脚为高电平,而且TR0(或TR1)置1时,才能启动定时器工作. (2)C/T:计数/定时方式选择位 C/T=0,设置为定时方式,定时器计数单片机内部计数脉冲;当C/T=1,设置为计数功能,计数器对来自T0(P3.4)或T1(P3.5)端的外部脉冲计数。

  9. 第7章 定时器/计数器 7.3.1工作方式寄存器-TMOD (3)M1 M0:这两位指定定时器/计数器的工作方式,可形成四种编码

  10. 7.3.2 定时器/计数器工作方式 第7章 定时器/计数器 1.方式0

  11. 第7章 定时器/计数器 2.方式1 7.3.2 定时器/计数器工作方式

  12. 3.方式2 第7章 定时器/计数器 7.3.2 定时器/计数器工作方式

  13. 第7章 定时器/计数器 4.方式3 7.3.2 定时器/计数器工作方式

  14. 7.3.4 计数初值的计算 第7章 定时器/计数器 由于定时器/计数器以加1方式计数,假设计数值为x,则应装入定时器/计数器的初值为: (n为不同方式下计数器的位数)

  15. 第7章 定时器/计数器 7.3.4 计数初值的计算 每个机器周期包括12个振荡周期,若晶振频率 为6MHz,一个机器周期: 计数个数为: 其中Tp为机器周期 则应装入的计数初值为: 【例】要求定时为1mS,晶振频率12MHz。

  16. 7.4定时器/计数器的编程 第7章 定时器/计数器 应注意以下两点: (1)正确编制定时器/计数器的初始化程序 包括定义TMOD、写入定时初值、设置中断系统和启动定时器/计数器运行等。 (2)正确编制定时器/计数器中断服务程序 注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。

  17. 第7章 定时器/计数器 7.4.1定时器应用实例 【例7-2】使用定时器/计数器T0的方式0,设定1ms的定时。在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。解:(1)定时常数计算振荡器频率为fosc=6MHz=6×106HZ,方式0计数器长度 n=13, 2n=213=8192定时时间: t=1ms=1×10-3s机器周期: Tp=12/6×106=2us计数值: x=Tc/Tp=1ms/2us=500那么应装入的初值为 8192-500=7692定时常数TC转换成二进制数TCB=11110 0000 1100 B。所以TCH=1EH,TCL=0CH。那么应该写入T0的形式为TH0=1EH,TL0=0CH。

  18. 第7章 定时器/计数器 7.4.1定时器应用实例 (2)TMOD的设定(即控制字)

  19. 第7章 定时器/计数器 (3)编 程 ORG 0000H AJMP MAIN ;转到主程序ORG 000BH ;T0中断矢量地址AJMP INQP ;转到中断服务程序ORG 0050HMAIN: MOV TMOD,#00H ;设置T0为方式0定时MOV TH0,#1EH ;装入T0的定时常数MOV TL0,#0CH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断SETB EA ;CPU开中断SJMP $ ;等待T0中断发生ORG 0100H ;中断服务程序INQP: MOV TH0,#1EH ;重装定时常数MOV TL0,#0CH CPL P1.0 ;P1.0变反输出RETI ;中断返回

  20. 7.4.2计数器应用实例 第7章 定时器/计数器 【例7-3】试设定定时器/计数器T0为计数方式2。当T0引脚出现负跳变时,向CPU申请中断。 解: (1)定数常数计算 当T0引脚出现负跳变时,即向CPU申请中断,意思是说当计数器计数到28时就会溢出,设计数初值为X,再计数一次计数器就溢出,用公式表示为X+1=28,所以X=28-1=255=11111111B=0FFH,故此时的定数常数应为TCB=0FFH。

  21. 第7章 定时器/计数器 (2)TMOD的设定(即控制字) 7.4.2计数器应用实例

  22. 第7章 定时器/计数器 (3)编 程 ORG 0000H AJMP MAIN ;转到主程序 ORG 000BH ;T0的中断入口 AJMP INTS ;转到中断服务程序 ORG 0100H ;主程序入口地址 MAIN: MOV SP , #60H ;设栈指针 MOV TMOD,#06H ;设T0为计数方式2 MOV TL0,#0FFH ;设TL0初值 MOV TH0,#0FFH ;设TH0初值 SETB TR0 ;启动计数 SETB ET0 ;允许T0中断 SETB EA ;中断开放 SJMP $ ;等待T0中断发生 ;中断处理程序 INTS: PUSH A ;现场保护,把寄存器A中的值压入堆栈中 PUSH DPL ;把数据指针的低位DPL中的值压入堆栈中 PUSH DPH ;把数据指针的高位DPH中的值压入堆栈中 ;现场恢复 POP DPH ;把数据指针的高位DPH中的值从堆栈中取出 POP DPL ;把数据指针的低位DPL中的值从堆栈中取出 POP A ;把寄存器A中的值从堆栈中取出 RETI

  23. 第7章 定时器/计数器 7.5实例解析 【实例7-1】已知晶振12MHZ,参见图7-9,要求利用定时器T0使图中发光二极管D进行秒闪烁。 解析:发光二极管进行秒闪烁。即一秒钟一亮一暗,亮500ms,暗500ms。晶振12MHz,一个机器周期是1μs,T0方式1最大定时只能65ms多(注:216=65536)。 取T0定时50ms,计数10次,即可实现500ms定时。 (1)计算定时初值 T0初值=216-50000μs/1μs =65536–50000=15536=3CB0H TH0=3CH;TL0=B0H

  24. 第7章 定时器/计数器 (2)设置TMOD 00000001 B = 01H T0方式 T0 与 INT0 无关 T1控制位 (3)编程 ORG 0000H ;复位地址 LJMP MAIN ;转入主程序 ORG 000BH ;T0中断入口地址 LJMP IT0 ;转入T0中断服务程序 ORG 0100H ;主程序首地址 MAIN: MOV TMOD,#01H ; 设置T0为工作方式1 MOV TH0,#3CH ; 装入定时常数 MOV TL0,#0B0H MOV IE,#10000010B ;T0开中断 MOV R7,#0AH ; 设置循环次数为10次 SETB TR0 ;T0运行 SJMP $ ;等待中断

  25. 第7章 定时器/计数器 7.5实例解析 ;中断服务程序: ORG 000BH ITO: MOV TL0,#0B0H ;重新装入时间常数 MOV TH0,#3CH DJNZ R7,LOOP ;循环10次 CLR TR0 ; 500ms定时到了,停止T0工作 LOOP: RETI ;中断返回 END ;程序结束

  26. 第7章 定时器/计数器 7.5实例解析 【实例7-2】利用定时器/计数器,测定如图所示波形的一个周期长度。

  27. 第7章 定时器/计数器 7.5实例解析 解析:这里利用门控位GATE启动定时器的方法。设如图示定时器/计数器T0为定时器,为高电平时,启动定时器;定时器/计数器T1为计数器,T1的电平由1到0,计数器计数。 (1)定时器设置 当每秒脉冲数低于3个时,每个脉冲周期330ms左右,故而设置定时器的基本定时为100ms,可以满足测时的精度要求。因此,采用门控方式,触发启动定时器;采用方式1,16位计数器。

  28. 第7章 定时器/计数器 7.5实例解析 定时器T0的TMOD的设置: 控制字为9H 时间常数计算:晶体振荡器为6MHz,基本定时时间为100ms,机器周期Tc为 设置初值为x: x=216-50000=15536=3CB0H 预置:(TH0)=3CH,(TL0)=0B0H

  29. 第7章 定时器/计数器 7.5实例解析 (2)计数器设置 定时器/计数器T1为计数器。计数值为2,当计数1时,启动定时器;当计数2时,中断计数器T1,并停止定时器T0的定时;中断方式,其优先级高于定时器T0。 计数器T1的TMOD的设置: 控制字为5H。 计数器初值为:FFFEH, 预置:(TH1)=0FFH,(TL0)=0FEH。

  30. 第7章 定时器/计数器 (3)编 程 ORG 0000H AJMP MAIN ORG 000BH ;T0的中断入口 AJMP TIME0 ; 转入中断程序 ORG 001BH ;T1的中断入口 AJMP TIME1 ;转入中断程序 ORG 0033H MAIN: MOV SP,#60H ;设置堆栈指针初值 MOV R3,#0 ;清除软件计数器 SETB P3.2 ;将P3.2,P3.5置1,即为输入状态 SETB P3.5 MOV TMOD,#59H MOV TH0,#3CH ;装入定时器初值 MOV TL0,#0B0H MOV TH1,#0FFH ;装入计数器初值 MOV TL1,#0FEH SETB TR0 ;启动定时器、计数器

  31. 第7章 定时器/计数器 SETB TR1 MOV IP,#08H ;T0中断优先于T1 SETB ET1 ;允许T1中断 SETB TF1 ;设TF0、TF1为中断标志 LOOP:SETB TF0 SETB ET0 ;允许T0中断 SETB EA ;中断开放 JB TF0,$ ;判断TF0是否溢出,并一直等待 JB TF1,LOOP ;判断TF1是否溢出,如果溢出就转到LOOP RET TIME0:MOV TL0,#0B0H ;设TL0初值 MOV TH0,#3CH ;设TH0初值 INC R3 ;计数器加1 CPL TF0 ;TF0取反 RETI ;中断返回 TIME1:CLR TF0 ;清除中断标志 CLR TF1 CLR ET0 ;禁止T0、T1中断 CLR ET1 CLR EA ;关中断 RETI ;中断返回

  32. 第7章 定时器/计数器 7.5实例解析 本程序占用T0、T1,溢出标志TF0,TF1及寄存器R3。R3 x 100 ms即为周期长度,因此可测的最大周期长度为256×100ms=25.6s。

More Related