1 / 33

咸阳职业技术学院电子信息系

项目二 电子打铃装置. 第 4 讲 单片机的定时器 / 计数器. 《 单片机原理及应用 》. 咸阳职业技术学院电子信息系. 内容提要:. 一、定时方法概述. 二、定时器 / 计数器的结构和工作原理. 三、定时器 / 计数器的控制. 四、定时器 / 计数器工作方式. 五、定时器 / 计数器综合应用举例. 一、定时方法概述. 定时方法. 硬件延时 由硬件电路实现延时,长时间延时;. 软件延时 通过执行循环而获得延时,短时间延时;. 可编程定时 通过对系统时钟脉冲的计数而获得延时。. 定时器 T1.

viet
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. 项目二 电子打铃装置 第4讲 单片机的定时器/计数器 《单片机原理及应用》 咸阳职业技术学院电子信息系

  2. 内容提要: 一、定时方法概述 二、定时器/计数器的结构和工作原理 三、定时器/计数器的控制 四、定时器/计数器工作方式 五、定时器/计数器综合应用举例

  3. 一、定时方法概述 定时方法 • 硬件延时 由硬件电路实现延时,长时间延时; • 软件延时 通过执行循环而获得延时,短时间延时; • 可编程定时 通过对系统时钟脉冲的计数而获得延时。

  4. 定时器T1 定时器T0 1、结构 计数溢出置标志位 设置T0工作方式 启动/停止T0工作 2个定时器T0和T1:16位加1计数器,通过编程来设置工作状态 定时器方式寄存器TMOD:设置定时器的工作方式 定时器控制寄存器TCON:启动和停止定时器的计数;计数溢出标志

  5. 2、工作原理 MCS-51单片机定时/计数器的工作原理: 归根结底是计数器。每接收到一个计数脉冲,加法计数器的值就加一,当计满时发生溢出,并从0开始继续计数。 (1)定时功能(设置TMOD中位C/T=0) 对片内机器周期进行计数,即每个机器周期产生一个计数脉冲,计数加1。 (2)计数功能(设置TMOD中位C/T=1) 对片外从T0(P3.4)、T1(P3.5)引脚输入的外部脉冲信号进行计数,下降沿计数加1。

  6. 三、定时器/计数器的控制 位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位符号 TCON除字节寻址外,各位还可以位寻址。 例如 启动T0开始计数工作,可运行指令 MOV TCON , #00010000B 或者 SETB TR0 与定时/计数器有关的控制寄存器有2个 1、定时器控制寄存器TCON(字节地址88H) TR0 (TR1)-- 定时计数器T0 (T1)运行控制位。 该位由软件置1或清0。 TR0 (TR1)=1 启动定时计数 =0 停止定时计数

  7. 位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位符号 TF0 (TF1)--计数溢出标志位 当T0/T1计数溢出时,该位由硬件自动置“1”。 查询方式下,此位作计数溢出状态位供查询,注意溢出后应以软件方法及时清0; 中断方式下,此位会当T0溢出时,由硬件自动置1,并向CPU申请中断, 当CPU响应中断进入中断服务程序后,它又被硬件自动清0 与定时/计数器有关的控制寄存器有2个 1、定时器控制寄存器TCON(字节地址88H)

  8. 2、定时器工作方式寄存器TMOD(89H) 用于2个定时器T0、T1的工作方式设定 , TMOD不能位寻址,只能用字节指令设置定时器工作方式。 M1 M0设置定时工作方式 C/T

  9. C/T =“0”,对片内机器周期进行计数,作定时器用; C/T =““1”,对片外从T0(P3.4)、T1(P3.5)引脚输入 的外部脉冲信号进行计数,作计数器用。 M1 M0设置定时工作方式 C/T C/T--定时/计数功能选择位。

  10. M1 M0设置定时工作方式 C/T TR0 GATE--门控位。 GATE=0,允许软件控制位TR0或TR1启动定时器; GATE=1,允许外中断引脚INT0(或INT1)为高电电平,且由软件使TR0(或TR1)置1时,才能启动定时器工作。

  11. M1 M0设置定时工作方式 C/T TR0 M1 M0--工作方式选择位 00 方式0 13位计数器 01 方式1 16位计数器 10 方式2 初值自动重装8位计数器 11 方式3 2个8位计数器,仅适用于T0

  12. 四、定时器/计数器工作方式 1、工作方式0 当GATE=0时,封锁或门输出恒为1,使外部中断输入引脚INT0信号失效,同时又打开与门,由TR0控制定时器T0的开启和关断。若TR0=1,接通控制开关,启动定时器T0工作,计数器被控制为允许计数。若TR0=0,则断开控制开关,停止计数。 当GATE=1时,与门的输出由INT0的输入电平和TR0位的状态来确定。若TR0=1,则打开与门,外部信号电平通过INT0引脚直接开启或关断定时器T0。 当INT0为高电平时,允许计数,否则停止计数。这种工作方式可用来测量外部信号的脉冲宽度等。 M1M0=00 TH0的高8位和TL0的低5位组成一个13位计数器

  13. 1、定时器的计数规律: T0从某初值X,对脉冲计数到1111111111111B(213D=8192D)溢出 计数个数:213-X 2、最大计数范围:从初值X=0D,计数到1111111111111B(213D) 计数个数为213-0=8192D 3、定时时间: 定时值 = 计数个数×机器周期 =(213-X)×机器周期 = (213-X)×晶振周期×12 最大定时值 = (213-0) ×机器周期 注意:定时计数器的计数范围与初值X的计算

  14. 四、定时器/计数器工作方式 例1 如要求计数值为1000,试计算定时计数器T0的初值 分析: 由 213-X=1000 得 X= 213-1000=8192-1000 =1C18H=0001 1100 0001 1000B 故 TH0= 1 1100 000=0E0H TL0= 1 1000B = 0001 1000B =18H。 补足8位

  15. 例2 利用T0方式0在P1.0引脚上输出周期500us的方波。设单片机 晶振频率6MHz。 分析: 要在P1.0输出周期为500us的方波,只要P1.0每隔250us取反一次即可,即定时时间为250us: (1)TMOD寄存器初始化: TMOD.1 TMOD.0 M1M0=00,T0为方式0; TMOD.2 C/T=0 T0为定时状态; TMOD.3 GATE=0 表示计数不受INT0控制; TMOD.4 TMOD.7 因T1不用,可取任意值,这里取为0 。 故TMOD=00H (2)计算250us定时T0的初值: 设T0的计数初值为X,则 X=8067D=1F83H=0001 1111 1000 0011B 故 TH0= 1 1111 100高8位=FCH TL0=0000 0011B低5位=03H

  16. (3) 编写程序。采用查询TF0的状态来控制P1.0输出 MOV TMOD,#00H ;置T0为方式0 MOV TH0,#0FCH ;送计数初值 MOV TL0,#03H SETB TR0 ;启动T0 LOOP: JBC TF0, NEXT ;查询定时时间到否? SJMP LOOP NEXT: CLR TF0 ; 对溢出标志位清0 MOV TH0,#0FCH;重赋计数初值 MOV TL0,#03H CPL P1.0 ;输出取反 SJMP LOOP ; 重复循环 采用查询方式的程序很简单,但在定时器整个计数过程中,CPU要不断查询溢出时标志TF0的状态, 这就占用了CPU工作时间,以致CPU的效率不高。采用定时溢出中断方式,可以提高CPU的效率。

  17. M1 M0=01 TH0高8位和TL0低8位组成一个16位定时器/计数器 定时器工作于方式1下,其结构与操作几乎与方式0完全相同,差别仅在于计数器的位数不同。 四、定时器/计数器工作方式 2、工作方式1

  18. 1、定时器的计数规律: T0从初值X,一直对脉冲计数到1111111111111B(216D)溢出 计数个数:216-X=65536-X 2、最大计数范围:从初值X=0D,计数到1111111111111111B(216D) 计数个数为216-0=65536D 3、定时时间:定时值 = (216-X) ×机器周期 = (216-X) ×晶振周期×12 最大定时定时值 = (216-0) ×机器周期 例如. 若单片机晶振为6MHZ,则1个机器周期为2us 最大定时定时值 = (216-0) ×机器周期 =65536×2us = 131ms 注意:定时计数器的计数范围与初值X的计算

  19. 四、定时器/计数器工作方式 例3 用定时器T1产生一个100HZ的方波, 由P1.0输出,设晶振12MHz, 采用查询方式。 解:方波周期 T=1/100Hz=0.01s=10ms 用T1定时5ms 计数初值 X为: X=60536=EC78H 程序如下: MOV TMOD, #10H ; T1方式1,定时方式 SETB TR1 LOOP:MOV TH1, #0ECH ; 置初值 MOV TL1, #78H JNB TF1 ,$ ; 判断溢出 CLR TF1 CPL P1.0 SJMP LOOP

  20. 3、工作方式2 工作方式2下的定时器(T0、T1):为8位计数器 以T0为例: 8位计数器的TL0 重置初值的缓冲器TH0构成。

  21. 方式2与方式0、1的区别: 方式0和方式1若用于循环重复定时或计数时,当计数溢出时,要重新对计数器装入初值,而方式2的优点在于它具有初值自动装入的功能,可省去重装计数初值的语句,故定时时间精确,特别适用于作串行口波特率发生器。 做法:在方式2中,16位计数器拆成两个部分,TL0用作位计数器,TH0用来保存计数初值。在程序初始化时,由软件赋予同样的初值,一旦TL0计数溢出,便使TF0置位,将TH0中的初值则由硬件自动装入TL0又继续计数,循环往复不止。 由于定时工作方式时,其定时时间(TH0溢出周期)为: t=(28-TH0初值)×机器周期 用于计数工作方式时,最大计数长度=28-0初值=256。 若单片机晶振为6MHZ,则1个机器周期为2us 最大定时定时值 = (28-0) ×机器周期 =256×2us=512us

  22. 单片机应用技术 例4 利用T0方式0在P1.0引脚上输出周期200us的方波。设单片机晶振频率6MHz。 分析:要在P1.0输出周期为200us的方波,只要P1.0每隔100us取反一次即可,即定时时间为100us (1)TMOD.1 TMOD.0 M1M0=10,T0为方式2; TMOD.2 C/T=0 T0为定时状态; TMOD.3 GATE=0 表示计数不受INT0控制; TMOD.4 TMOD.7 因T1不用,可取任意值,这里取0 故TMOD=02H (2)计算250us定时T0的初值: 设T0的计数初值为X,则 X=206D=11001110B=CEH 故 TH1=TL1=CEH

  23. (3)程序如下: MOV TMOD,#02H ;T0方式2,定时方式 MOV TH0,#0CEH ;T0计数初值 MOV TL0,#0CEH SETB TR0 ;启动T0 LOOP:JBC TF0,NEXT ;TF0=1转 SJMP LOOP ;否则等待 NEXT:CPL P1.0 ; P1.0取反输出 SJMP LOOP

  24. 模式3只适用于定时器T0,若将T1置为模式3,则T1将停止计数。模式3只适用于定时器T0,若将T1置为模式3,则T1将停止计数。 TL0使用原T0的各控制位、引脚(C/T,GATE,TR0,TF0和INT0引脚),其功能和操作与模式0和模式1相同,TL0既可以工作在定时器方式,也可以工作在计数器方式。 当T0工作在模式3下,TH0和TL0被分成两个相互独立的8位计数器TL0和TH0如图所示。 TH0只可作简单的8位定时器, 它占用T1的控制位TR1和T1的中断标志位TF1,同时也占用了T1的中断源,由TR1来负责启动和关闭。

  25. 在定时器T0已工作在方式3时,T1只能工作在方式0、1、2下。因为它的运行控制位TR1和计数溢出标志位TF1已经被定时器T0借用。其逻辑图简化为左图在定时器T0已工作在方式3时,T1只能工作在方式0、1、2下。因为它的运行控制位TR1和计数溢出标志位TF1已经被定时器T0借用。其逻辑图简化为左图 在图中,由于TR1、TF1以及T1的中断源已被定时器T0占用,此时T1仅由控制位C/T切换其定时器或计数器工作方式,计数器计数满溢出时,只能将输出送入串行口或用于不需要中断的场合。把T1作为波特率发生器使用时,一般将T1设置为模式2。 • 工作方式3下的定时器T1

  26. 例5 P1.0、P1.1经7407驱动LED交替发光并以每秒一次的频率闪烁。硬件连接见下图(采用6MHZ晶振) 五、定时器/计数器综合应举例 分析:闪烁周期为1S,亮、灭各占一半,定时时间需要500mS。使用6MHZ晶振,单片机最长定时时间仅为131mS,所以需要采用软件记数方法扩展定时时间。

  27. 使用定时/计数器0,定时方式,工作方式1。 设置TMOD控制字: TMOD = 01H 使用6MHZ晶振,机器周期为2μs,设定时时间100mS,定时初值3CB0H。定时器溢出5次为500mS。 程序如下: ORG 0140H LED1: MOV TMOD,#01H ;设置T0工作方式 SETB P1.0 ;输出初始状态 CLR P1.1 SETB TR0 ;启动定时器 LOOP0: MOV R2,#05H ;送软件计数初值 LOOP1: MOV TL0,#0B0H ;送定时常数 MOV TH0,#3CH JBC TF0,$ ;循环等待定时时间到 DJNZ R2,LOOP1 ;软件计数–1≠0循环 XRL P1,#03H ;P1.0、P1.1求反 SJMP LOOP0 ;循环

  28. 例6 当GATEX =“1”时,定时/计数器只有INTX为高电平才能进行计数。利用这一点,可以方便的测量脉冲信号的宽度。设被测脉冲接至INT1引脚,将定时/计数器1设置为定时方式,即可进行脉宽测量。要求测量脉宽单位为1μs,选用12MHZ晶振。 分析: 设置TMOD控制字: GATE1 =“1”,定时/计数器T1为定时方式C/T =“0”,选用工作方式1。TMOD = 90H。 定时初值为零,在脉冲下跳沿读出计数器的计数值即为脉冲宽度。

  29. 程序如下: ORG 0180H MOV TOMD,#90H;设置T1工作方式 CLR A ;定时初值为零 MOV TH1,A MOV TL1,A JB P3.3, $ ;等待P3.3变低电平 SETB TR1 ; P3.3变低,准备启动T1 JNB P3.3,$ ;等待P3.3变高,启动T1 JB P3.3,$ ;T1一直定时计数,等待P3.3再次变低,脉冲结束 CLR TR1 ;停止计数 MOV R2,TH1 ;读出脉冲宽度 MOV R3,TL1 运行上面程序后,只要将R2、R3两单元内容转换成十进制数,即可送显示以读出脉冲宽度。由于工作方式1的最大计数值为65536,所以上面程序所测脉冲宽度不能大于65536μs。

  30. 例7 利用单片机定时/计数器测量脉冲信号频率。 分析:频率定义为单位时间1S内的周期数,用定时/计数器测频率,需要用一路定时器产生单位时间,另一路计数器对脉冲计数。若被测量的信号频率较高,而测量精度有限的话,单位时间可以小于1S。单位时间选用10mS,其间计的脉冲数乘以100即为信号频率。 设置工作方式: 设单片机时钟频率 fosc = 12MHz。定时器1定时,工作方式1,产生10mS单位时间;定时/计数器0计数,工作方式1。 TMOD = 00010101B = 15H 计数初值: 定时器1计数值10000,计数初值的十六进制补码为 D8F0H。 计数器0计数初值为0000H。

  31. 单片机应用技术 程序 ORG 01C0H FREQ:MOV TMOD,#15H ;设置工作方式 MOV TH0,#0 ;送计数初值 MOV TL0,#0 MOV TH1,#0D8H MOV TL1,#0F0H MOV TCON,#50H ;启动定时/计数器 JNB TF1,$ ;等待单位时间到 MOV TCON,#0 ;停止计数 MOV R2,TH0 ;读出计数值 MOV R3,TL0 …… 将R2,R3中的计数值转换成BCD码,即为频率,单位是0 .1KHz。用此种方式测量的频率上限为500KHz。

  32. 1、MCS-51单片机内有几个定时计数器?有几种工作方式? 2、简要介绍T0的定时工作方式1 3、定时器编程前要事先确定什么参数? 4、用定时器1产生一个50Hz的方波,由P1.2输出,用程序查询方式,fosc=12MHz。 ??? 思考题:

  33. 第4题参考答案: 方式1是16位定时/计数器, 其定时时间t为:t=(216-X) ×12/fosc 其计数初值X为:X=216-t×fosc/12 方波周期T=1/50=0.02s=20ms,用T1定10ms, 计数初值X1: X1=216-12×10×10-3/(12×106) =65536-10000=55536=D8F0H 源程序如下: MOV TMOD,#10H ;T1模式1,定时 SETB TR1 ;启动T1 LOOP:MOV TH1,#0D8H ;T1计数初值 MOV TL1,#0F0H JNB TF1,$ ;T1没有溢出等待 CLR TF1 ;产生溢出清标志位 CPL P1.2 ;P1.2取反输出 SJMP LOOP ;循环

More Related