230 likes | 375 Views
第 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 定时器 / 计数器的工作原理.
E N D
第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定时器/计数器的工作原理 • 两个16位的定时/计数器T0(TH0TL0)和T1 (TH1TL1),基本工作原理是加1计数,即对指定的脉冲信号进行加1操作,直到出现溢出。 • (1)定时器,对机器周期加1计数,因此,计数周期固定为12/ • (2)计数器,对单片机外部输入的脉冲信号加1计数,T0(P3.4),T1(P3.5)
5.3定时器/计数器的控制5.3.1定时器/计数器方式控制寄存器TMOD5.3定时器/计数器的控制5.3.1定时器/计数器方式控制寄存器TMOD TMOD用于控制定时器/汁数器的工作模式及工作方式,其字节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。
1、M1和M0工作方式控制位M0和M1为工作方式控制位,确定4种工作方式,如表5-1所示。1、M1和M0工作方式控制位M0和M1为工作方式控制位,确定4种工作方式,如表5-1所示。
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)工作
5.3.2 定时器/计数器的控制寄存器TCON • 控制寄存器TCON的位地址是88H,可以对它进行位寻址。其功能: • (1)启动:设定好了定时器/计数器的工作方式后,通过设置控制寄存器TCON中的相应位来启动。 • (2)停止:要使定时器/计数器停止运行,也通过设置TCON中的相应位来实现。 • (3)标志:TCON能标明溢出和中断情况。
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触发方式控制位。
5.4 定时器/计数器的工作方式 5.4.1 工作方式0(M1 M0:00) 定时器/计数器工作在方式0时,16位计数器只用了13位,即THx的高8位和TLx的低5位,组成一个13位定时器/计数器。(x=0或1)
5.4.2 工作方式1 (M1 M0:01) 定时器/计数器工作在方式0时,16位计数器,即THx作为高8位,TLx作为低8位。 图5-3 定时器/计数器方式1结构框图
5.4.3 工作方式2 (M1 M0:10) 自动重装初值8位计数器。TLx作为8位计数器, THx用作常数寄存器。 TLx计数满产生溢出时,一方面置1溢出标志TFx;另一方面自动将THx中的内容送至TLx ,使8位定时器/计数器从所装初值开始更新开始计数。 图5-4 定时器/计数器方式2结构框图
5.4.4 工作方式3 (M1 M0:11) 将16位的计数器T0分为两个独立的8位计数器TH0和TL0。定时器T1只能工作在方式0~2,不需中断的场合。 图5-5 定时器/计数器方式3结构框图
5.5 定时器/计数器的精度 定时: 对机器周期(即12/ fosc )计数。精度取决于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振(MCS-51最高为12MHz)。 如:fosc=12MHz时,机器周期1微秒,计数脉冲周期间隔为1微秒,误差为1微秒。 fosc=6MHz时,机器周期2微秒,计数脉冲周期间隔为2微秒,误差为2微秒。 注:在使用中断情况下,如果有其它中断服务正在执行,延迟取决于其它中断服务程序执行的时间。
计数:由于确认一次下跳变要花两个机器周期的时间,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24。且高低电平至少保持一个机器周期Tcy 。 Tcy:一个机器周期
另外,在读取运行中的定时器/计数器时,需要加以注意,否则读取的计数值有可能出错。原因是不可能在同一时刻同时读取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
5.6 定时器/计数器的程序设计及应用使用定时器/计数器时必须计算计数初值。假设T为定时时间,计数器位数为n,系统时钟频率为fosc,计数初值为x,则它们满足下列关系式: 即
【例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初值)210-6=1 10-3 解得:T0初值=7692=1111000001100B 高8位11110000B=0F0H赋给TH0, 低5位01100B=0CH赋给TL0。
设计程序 • 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
【例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初值)110-6=20 10-3 解得:T0初值=45536=0B1E0H 高8位0B1H赋给TH0, 低8位0E0H赋给TL0。
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
【例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初值)210-6=500 10-6 解得:T1初值=06H 06H赋给TL1, 06H同时赋给TH1。
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