1 / 23

第 5 章 MCS-51 的定时器 / 计数器

第 5 章 MCS-51 的定时器 / 计数器. 5.1 定时器 / 计数器的结构 5.2 定时器 / 计数器的工作原理 5.3 定时器 / 计数器的控制 5.4 定时器 / 计数器的工作方式 5.5 定时器 / 计数器的精度 5.6 定时器 / 计数器的程序设计及应用实例. 退出. 5.1 定时器 / 计数器的结构. 图 5-1 定时器 / 计数器结构图 特殊功能寄存器 TH0 、 TL0 、 TH1 、 TL1 、 TMOD 、 TCON. 5.2 定时器 / 计数器的工作原理.

Download Presentation

第 5 章 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. 第5章 MCS-51的定时器/计数器 • 5.1 定时器/计数器的结构 • 5.2 定时器/计数器的工作原理 • 5.3 定时器/计数器的控制 • 5.4 定时器/计数器的工作方式 • 5.5 定时器/计数器的精度 • 5.6 定时器/计数器的程序设计及应用实例 退出

  2. 5.1定时器/计数器的结构 图5-1定时器/计数器结构图 特殊功能寄存器TH0、TL0、TH1、TL1、TMOD、TCON

  3. 5.2定时器/计数器的工作原理 • 两个16位的定时/计数器T0(TH0TL0)和T1 (TH1TL1),基本工作原理是加1计数,即对指定的脉冲信号进行加1操作,直到出现溢出。 • (1)定时器,对机器周期加1计数,因此,计数周期固定为12/ • (2)计数器,对单片机外部输入的脉冲信号加1计数,T0(P3.4),T1(P3.5)

  4. 5.3定时器/计数器的控制5.3.1定时器/计数器方式控制寄存器TMOD5.3定时器/计数器的控制5.3.1定时器/计数器方式控制寄存器TMOD TMOD用于控制定时器/汁数器的工作模式及工作方式,其字节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。

  5. 1、M1和M0工作方式控制位M0和M1为工作方式控制位,确定4种工作方式,如表5-1所示。1、M1和M0工作方式控制位M0和M1为工作方式控制位,确定4种工作方式,如表5-1所示。

  6. 2、 定时器/计数器方式选择位 • =0,定时方式,对机器周期进行计数; =1,计数方式,对外部信号进行计数,外部信号接至T0(P3.4)或T1(P3.5)引脚。 3、GATE门控位 • GATE=0时,只要用软件使TR0(或TR1)置1就能启动定时器T0(或T1); • GATE=1时,只有在INT0(或INT1)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器T0(或T1)工作

  7. 5.3.2 定时器/计数器的控制寄存器TCON • 控制寄存器TCON的位地址是88H,可以对它进行位寻址。其功能: • (1)启动:设定好了定时器/计数器的工作方式后,通过设置控制寄存器TCON中的相应位来启动。 • (2)停止:要使定时器/计数器停止运行,也通过设置TCON中的相应位来实现。 • (3)标志:TCON能标明溢出和中断情况。

  8. 1. TR0:定时器T1运行控制位。可由软件置1(或清零)来启动(或关闭)定时器T0,使定时器T0开始计数。。 2. TF0:定时器T0溢出标志位。当定时器T0溢出时,由硬件自动使TF1置1,并向CPU申请中断。CPU响应中断后,自动对TF0清零。TF0也可以用软件查询和清零。 3. TR1 :定时器T1运行控制位。功能与TR0 相同。 4. TF0 :定时器T0溢出标志位。功能与TF0相同。 IE1:外部中断1请求标志位。 IT1:外部中断1触发方式控制位。 IE0:外部中断0请求标志位。 IT0:外部中断0触发方式控制位。

  9. 5.4 定时器/计数器的工作方式 5.4.1 工作方式0(M1 M0:00) 定时器/计数器工作在方式0时,16位计数器只用了13位,即THx的高8位和TLx的低5位,组成一个13位定时器/计数器。(x=0或1)

  10. 图5-2 定时器/计数器方式0结构框图

  11. 5.4.2 工作方式1 (M1 M0:01) 定时器/计数器工作在方式0时,16位计数器,即THx作为高8位,TLx作为低8位。 图5-3 定时器/计数器方式1结构框图

  12. 5.4.3 工作方式2 (M1 M0:10) 自动重装初值8位计数器。TLx作为8位计数器, THx用作常数寄存器。 TLx计数满产生溢出时,一方面置1溢出标志TFx;另一方面自动将THx中的内容送至TLx ,使8位定时器/计数器从所装初值开始更新开始计数。 图5-4 定时器/计数器方式2结构框图

  13. 5.4.4 工作方式3 (M1 M0:11) 将16位的计数器T0分为两个独立的8位计数器TH0和TL0。定时器T1只能工作在方式0~2,不需中断的场合。 图5-5 定时器/计数器方式3结构框图

  14. 5.5 定时器/计数器的精度 定时: 对机器周期(即12/ fosc )计数。精度取决于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振(MCS-51最高为12MHz)。 如:fosc=12MHz时,机器周期1微秒,计数脉冲周期间隔为1微秒,误差为1微秒。 fosc=6MHz时,机器周期2微秒,计数脉冲周期间隔为2微秒,误差为2微秒。 注:在使用中断情况下,如果有其它中断服务正在执行,延迟取决于其它中断服务程序执行的时间。

  15. 计数:由于确认一次下跳变要花两个机器周期的时间,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24。且高低电平至少保持一个机器周期Tcy 。 Tcy:一个机器周期

  16. 另外,在读取运行中的定时器/计数器时,需要加以注意,否则读取的计数值有可能出错。原因是不可能在同一时刻同时读取THx和TLx的内容。另外,在读取运行中的定时器/计数器时,需要加以注意,否则读取的计数值有可能出错。原因是不可能在同一时刻同时读取THx和TLx的内容。 • 一种解决读错问题的方法是:先读(THx),后读(TLx),再读(THx),若两次读得的(THx)相同,则可确定读得的内容是正确的。 • 如下面的程序,读得的(TH0)和(TL0)分别放置在R1和R0内。 RDTIME: MOV A,TH0 ;读(TH0) • MOV R0,TL0 ;读(TL0) • CJNE A,TH0,RDTIME • ;比较两次读得的(TH0) • MOV R1,A • RET

  17. 5.6 定时器/计数器的程序设计及应用使用定时器/计数器时必须计算计数初值。假设T为定时时间,计数器位数为n,系统时钟频率为fosc,计数初值为x,则它们满足下列关系式: 即

  18. 【例5-1】利用定时器T0产生1ms定时。由P1.0输出占空比为1:1的周期为2ms的方波信号。(设时钟频率为6MHZ)。【例5-1】利用定时器T0产生1ms定时。由P1.0输出占空比为1:1的周期为2ms的方波信号。(设时钟频率为6MHZ)。 1. 确定计数初值 由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2µs t=(213-T0初值) 机器周期 当t=1ms时,(213-T0初值)210-6=1 10-3 解得:T0初值=7692=1111000001100B 高8位11110000B=0F0H赋给TH0, 低5位01100B=0CH赋给TL0。

  19. 设计程序 • MOV TMOD , #00H;设定T0的工作方式 • SETB TR0; 启动T0工作 • LOOP: MOV TH0 , #0F0H; 给定时器T0送初值 • MOV TL0 , #0CH • LOOP1: JNB TF0 , $; $为当前指令指针地址 • CLR TF0 • CPL P1.0 • SJMP LOOP

  20. 【例5-2】 用定时器T0产生25HZ的方波。由P1.0输出此方波(设时钟频率为12MHZ)。 25HZ的方波周期为40ms,可用定时器产生20ms的定时,每隔20ms改变一次P1.0的电平,即可得25HZ的方波。 1. 确定计数初值 由于时钟频率为12MHZ,所以,机器周期为:12/fosc=1µs t=(216-T0初值) 机器周期 当t=20ms时,(216-T0初值)110-6=20 10-3 解得:T0初值=45536=0B1E0H 高8位0B1H赋给TH0, 低8位0E0H赋给TL0。

  21. 2.设计程序 MOV TMOD, #01H;设定T0的工作方式1 SETB TR0; 启动T0工作 LOOP: MOV TH0, #0B1H;给定时器T0送初值 MOV TL0 , #0E0H LOOP1: JNB TF0, $; $为当前指令指针地址 CLR TF0 CPL P1.0 SJMP LOOP

  22. 【例5-3】 用定时器T1产生500us的定时。由P1.0输出周期为1ms的方波(设时钟频率为6MHZ)。 1ms的方波,可用定时器产生500us的定时,每隔500us改变一次P1.0的电平。 1. 确定计数初值 由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2µs t=(28-T1初值) 机器周期 当t= 500us时,(28-T1初值)210-6=500 10-6 解得:T1初值=06H 06H赋给TL1, 06H同时赋给TH1。

  23. 2.设计程序 MOV TMOD , #20H;设定T1的工作方式2 MOV TH1, #06H; 给定时器T1送初值 MOV TL1, #06H SETB TR1; 启动T1工作 LOOP: JNB TF1 , $; $为当前指令指针地址 CLR TF1 CPL P1.0 SJMP LOOP

More Related