您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > PIC11定时器/计数器TMR1.
第九章定时器/计数器TMR1前面介绍了定时器/计数器TMR0的基本概念和用途,下面介绍PIC单片机中另外一种定时器/计数器TMR1。9.1TMR1的特性TMR1为16位宽,附带一个3位的分频器,还自带一个低功耗低频的时基振荡器。TMR1的主要用途:类似于TMR0,用于定时和计数;自带一个时基振荡器,可记录年、月、日、时、分、秒,实现实时时钟RTC(realtimeclock);可以与CCP模块配合使用,实现输入捕捉或输出比较功能。TMR1由二个8位寄存器TMR1H和TMR1L对组成的16位定时器/计数器,可以由软件读/写,这二个寄存器都是和RAM统一编址的,地址分别为0EH和0FH。TMR1H:TMR1L寄存器对,从0000H递增到FFFFH(0~65535)之后再返回到0000H时,就会产生溢出,并且将溢出中断标志位TMR1IF设置为1。如果此时相关的中断使能位TMR1IE和GIE都为1,就会引起CPU的中断响应。TMR1的触发信号源可来自内部系统时钟、外部触发信号或自带时基振荡器信号;因此即可以工作于定时器模式,又可工作于计数器模式,还可以用作实时时钟RTC模式;9.2TMR1相关的寄存器与TMR1有关的寄存器如下表所列。这些寄存器中的前3个的功能及其作用,在“中断系统”中已经介绍。在此先介绍T1CON控制寄存器。㈠TMRl控制寄存器T1CONTICON只用到其低6位,最高2位未用。其各位的含义如下:T1CKPS1~T1CKPS0:分频器分频比选择位,如表3.2所列T1OSCEN:TMR1自带振荡器使能位。1=允许TMR1振荡器起振;0=禁止TMR1振荡器起振。T1SYNC:TMR1外部输入时钟与系统时钟同步控制位。该位只有在TMR1工作于计数器方式(TMR1CS=1)才有效:1=TMR1外部输入时钟与系统时钟不保持同步;0=TMR1外部输入时钟与系统时钟保持同步;当TMR1工作于定时器方式,该位不起作用。TMR1CS:时钟源选择位。1=选择外部时钟源,即时钟信号来源于外部引脚或者自带振荡器;0=选择内部时钟源TMR1ON:TMR1使能控制位,这点不同于TMR0。1=启用TMR1,使TMR1进入活动状态;0=关闭TMR1,使TMR1退出活动状态。9.3TMR1的电路结构TMR1模块的内部结构如下图所示。⑴核心部分由TMR1H:TMR1L构成;⑵一个与门G1,对送入计数器的触发信号,起到是否允许通行的控制作用。⑶一个信号复用器MUX1,允许触发信号来自两个不同的路径。⑷同步控制逻辑,将经过外部引脚送入的触发信号,与单片机内部的系统时钟进行同步。⑸3位宽的预分频器,允许选择四种不同的分频比1:1、1:2、1:4或l:8。在对寄存器对TMR1H:TMR1L进行写操作时,可以使预分频器被清0。⑹另一个信号复用器MUX2,允许触发信号有两个不同的来源:一个是由内部系统时钟产生的指令周期;另一个是取自于外部引脚的触发信号或自带振荡器。⑺一个施密特触发器G2,用于对来自外部引脚的触发信号或自带振荡器产生的时钟信号进行整形。⑻一个由受控三态门G3构成的独立的低频低功耗晶体振荡器,用来为TMR1提供独立于系统时钟的时间基准信号,如图3.4所示。只有当使能端T1OSCEN为高电平时,振荡器才能够工作;而当T1OSCEN为低电平时,非门G3的输出端呈现高阻状态,振荡器不能工作,此时,工作于计数器方式的TMR1的触发信号,从T1OSO端加入。9.4TMR1的工作原理TMR1有定时器方式和计数器方式;计数器方式又分为同步计数器方式和异步计数器方式。TMR1的工作信号共有4种获取方式:⑴由内部系统时钟提供;⑵从RC0/T1OSO/T1CKI口线输入;⑶从RC1/T1OSI/CCP2口线输入;⑷自带振荡器产生。TMR1的工作方式由TMR1CS确定。当TMR1CS=0,TMR1工作于定时器方式,TMR1的16位计数器在每个指令周期到来时增加;当TMR1CS=1,TMR1工作于计数器方式,TMR1的16位计数器在每个外部时钟输入的上升沿到来时增加。一旦TMR1自带振荡器被使能(T1OSCEN=1),RC1/T1OSI/CCP2和RC0/T1OSO/T1CKI引脚就自动设为专用引脚,此时TRISC方向寄存器bit1和bit0的值将失效。当对寄存器TMR1H或TMR1L进行赋值时,预分频器将会自动清0。9.4.1禁止TMR1工作TMRl比TMR0多一种选择,即可以被关闭。具体方法是,将TMRl使能位TMR1ON清0。此时,与门G1的一只引脚被低电平封锁,因此使得累加计数器维持静止状态。等效电路如图3.5所示。9.4.2定时器工作方式当TMR1CS=0时,TMR1工作于定时器方式,时钟来自内部fosc/4指令周期。在此情况下,同步控制信号T1SYNC不起作用,因为,TMR1的输入信号与系统时钟总是同步的。其等效电路如图3.6所示。这种模式常用来延时、定时功能。9.4.3计数器工作方式当TMRlCS=1,TMR1工作于计数器方式,时钟来源于外部引脚或自带振荡器。TMR1累加计数器在触发信号的上升沿递增。TMR1在计数器方式时,存在输入触发信号与系统时钟同步的问题。图3.8所示。控制位T1SYNC的设定,既可以选择同步方式,也可以选择异步方式。工作于计数方式时,TMRl的触发信号有三种获取方法:第1种:当T1OSCEN=0时,外部触发信号从T1OSO/T1CKI引脚输入,如图3.9(a)所示;第2种,当T1OSCEN=1时,并且振荡器外部不接石英晶体时,外部触发信号从引脚T1OSI输入(如图3.9(b))所示;第3种:当T1OSCEN=1,并且振荡器外部引脚接有石英晶体时,TMR1是通过振荡器产生的时钟脉冲上升沿实现增量的(如图3.9(c))所示。⒈同步计数器工作方式当T1SYNC=0,TMR1工作在同步方式。此时,外部输入信号要与系统时钟脉冲在相位上进行同步。此时假如单片机进入了睡眠模式,即使有外部触发信号输入,TMR1也不会增加,因为同步逻辑电路被关闭,如下图所示。⒉异步计数器工作方式当T1SYNC=1时,TMRl工作在异步方式。此时,外部输入信号不与系统时钟脉冲相位进行同步。此时若单片机处于睡眠模式时,计数器随着外部触发信号所进行的增量操作不受影响,如图3.11所示。工作在异步计数器方式期间,对于TMR1寄存器对的读取、写入操作应特别注意。①读取操作:当对寄存器对TMR1H~TMR1L进行读操作时,可以分两次进行。但是,在读取期间存在TMR1的低字节向高字节产生进位的可能性。此时TMR1H:TMR1L可能正巧发生从00FFH到0100H或从FFFFH到0000H之类的递增。若TMR1H:TMR1L正好从00FFH到0100H递增,先读TMR1H再读TMR1L,则会读到0000H的错误结果;而先读TMR1L再读TMR1H,则会读到01FFH的错误结果。同理若正巧发生TMR1H:TMR1L从FFFFH到0000H的递增,无论是先读TMR1H再读TMR1L,或先读TMR1L再读TMRlH,都可能会产生错误结果。也就是说,在分为两个字节来读取TMR1时,可能会出现错误结果。下面是一段实用程序片段,可以避免在不断运行时读取TMR1而发生错误。BCFINTCON,GIE;所有中断被禁止MOVFTMR1H,W;读取高字节MOVWFTMPH;暂存到TMPHMOVFTMR1L,W;读取低字节MOVWFTMPL;暂存到TMPLMOVFTMR1H,W;读取高字节SUBWFTMPH,W;用第2次读取值减第1次读取值BTFSCSTATUS,Z.;结果为0否?GOTOCONTINUE;是!无溢出,结果正确,结束读操作MOVFTMR1H,W;否!重新读取MOVWFTMPH;暂存到TMPHMOVFTMR1L,W;读取低字节MOVWFTMPL;暂存到TMPLBSFINTCON,GIE;放开全局中断屏蔽位CONTINUE;继续执行其他程序……②写入操作:当对TMR1进行写操作时,如果计数器正在递增,可能会产生一个不确定值。因此,先让计数器停止运行,再写入所希望的值。假如非要在TMR1不间断运行的情况下写入,那么,就应该首先清零TMR1L,以确保在它向TMR1H寄存器发生溢出进位之前,有足够长的递增距离,尽量避免溢出进位。随即装载TMR1H寄存器,然后装载TMR1L寄存器。推荐程序段如下:BCFINTCON,GIE;所有中断被禁止CLRFTMR1L;清除低字节,确保不会发生向高字节的进位MOVLWHI_BYTE;取高字节给定值MOVWFTMR1H,F;装载高字节寄存器MOVLWLO_BYTE;取低字节给定值MOVWFTMR1L,F;装载低字节寄存器BSFINTCON,GIE;放开全局中断屏蔽位CONTINUE;继续执行其他程序9.5定时器/计数器TMR1的应用举例例1蠕动灯实现的功能把演示板上的8只发光二极管D0~D7,设计为“进三步,退两步”的蠕动前进的方式依次发光,即发光的规律是:D0→D1→D2→D3→D2→D1→D2→D3→D4→D3→D2→D3→D4→D5+D4+...…。并且在各个状态之间切换时,插入一个l/4s的延时。硬件电路规划:电路如图10.12所示。由RC振荡器为电路提供系统时钟信号,其频率按4MHz计算。硬件电路规划:电路如图10.12所示。由RC振荡器为电路提供系统时钟信号,其频率按4MHz计算。软件设计思路利用TMR1产生1/4s的延时。具体方法是,利用中断方式和反复装载初始值的方式,将预分频器的分频比设定为1:4。下面计算TMR1的16位寄存器的初值。㈠TMR1的初值⒈因为系统时钟为4MHZ,那么机器周期为1μs。⒉延迟时间为1/4s=250,000μs。⒊假设初值为X,则以下公式成立:4*(65536-X)*1μs=250,000μsX=65536-(250,000/4)=3,036=0BDCH㈡T1CON的控制字要求:分频比设定为1:4,定时模式,先关闭TMR1,则控制字为:00100000=20H。程序流程图:主程序流程图和中断服务子程序流程图,分别如图3.13和图3.14所示。PCLEQU02H;程序计数器低字节寄存器地址STATUSEQU3H;状态寄存器地址ZEQU2H;状态寄存器中的0标志位的位地址INTCONEQU0BH;中断控制寄存器地址PORTCEQU7H;端口C的数据寄存器地址TRISCEQU87H;端口C的方向控制寄存器地址COUNTEQU20H;定义一个计数器变量寄存器RP0EQU5H;状态寄存器中的页选位RP0TMR1LEQU0EH;TMR1低字节寄存器地址TMR1HEQU0FH;TMR1高字节寄存器地址PIR1EQU0CH;第一中断标志寄存器PIE1EQU8CH;第一中断使能寄存器T1CONEQU10H;TMR1控制寄存器_TMR1LBEQU0DCH;TMR1低字节寄存器初始值TMR1HBEQU0BH;TMR1高字节寄存器初始值ORG0000HNOPGOTOMAINORG0004H;***********TMR1延时子程序(1/4S)*******************DELAYBCFPIR1,0;清除TMR1溢出标志位BCFT1CON,0;关闭TMR1计数器MOVLWTMR1LB;TMR1低字节赋初值MOVWFTMR1LMOVLWTMR1HB;TMR1高字节赋初值MOVWFTMR1HMOVFCOUNT,0;COUNT作为查表地址偏移量送WCALLREAD;调用读取显示信息子程序MOVWFPORTC;将查表得到的驱动码送显INCFCOUNT,1;计数器加1MOVLWD'40';表中只有40个元素,计数值只能=0~39SUBWFCOUNT,0;检查计数器=40?;BTFSCSTATUS,Z;否!跳一步CLRFCOUNT;是!应该回到0RETFIE;中断返回;***********************************MAINBSFSTATUS,RP0;设置文件寄存器的体1MO
本文标题:PIC11定时器/计数器TMR1.
链接地址:https://www.777doc.com/doc-2850821 .html