资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第5章 定时器/计数器,内容提要:,5.1 定时器/计数器功能,5.2 定时器和计数器硬件结构,5.3 定时器/计数器工作方式,5.4 定时器/计数器编程,内容要求:,1、熟悉PIC16F87X单片机的定时/计数器功能,。,2、熟悉3个定时器/计数器模块的硬件结构,。,3、熟悉掌握与定时器/计数器模块相关的寄存器。,4、,熟练掌握定时器/计数器工作方式。,5、,熟练掌握定时器/计数器编程技术,。,5.1 定时/计数器功能,5.1 定时/计数器功能,5.4.1 定时器功能,起定时延时作用,和,在规定的引脚上 输出一定宽度的方波信号。,所谓定时功能就是通过来自单片机内部的时钟脉冲作计数脉冲,使计数器计数,即每个机器周期计数器加1,计数值达到予置值后,定时/计数模块产生溢出。,5.1 定时/计数器功能,5.1 定时/计数器功能,5.4.2 计数器功能,所谓计数是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。,5.2 定时和计数器硬件结构,PIC16F877单片机配置了3个定时器/计数器模块,分别为,TMR0,、,TMR1,和,TMR2,。,共同点:,它们的核心部分都是一个由时钟信号触发,按递增方式累加工作的循环计数器;从预先设定的某一初始值开始累计,在累计到计数器产生溢出,并同时建立一个相应的溢出中断标志。,三者的不同点:,TMR0,为8位宽,,有一个可选的预分频器,用于通用目的,可用于,定时和计数,;,TMR1,为16位宽,,附带一个可编程的预分频器和一个可选的低频时基振荡器,适合与,CCP,(捕捉/比较脉宽调制)模块配合使用来实现输入捕捉或输出比较功能,也可用于定时和计数;,TMR2,为8位宽,,附带一个配合使用来实现,PWM,脉冲宽度调制信号的产生,只能用于定时。,定时器/计数器TMR0的硬件结构,*,TMR0可以用于定时控制、延时、对外部事件进行计,数和检测等场合。,*,TMR0可以使用内部系统时钟,也可以使用外部始终。,*,TMR0用于内部定时或对外计数时都不占用CPU时间。,1.定时器/计数器TMR0具有以下特点:,(1)TMR0是一个8位宽的由时钟信号上升沿触发的循环累加计数寄存器。,(2)有一个专用的外部触发信号输入端(,T0CKI-RA4,)。,(3)TMR0也是一个在文件寄存器区域内统一编址的寄存器,地址为,01H,或,101H,,用户用软件方式可直接读/写计数器的内容。,(4)具有一个软件可编程的8位,预分频器,。,(5)当使用内部触发信号,即指令周期作为时钟信号源时,模块TMR0工作于定时方式,触发方式为固定上升沿触发有效。在计数器溢出时,相应的溢出中断标志T0IF自动置位,并可产生溢出中断。,(6)当外部时钟信号源时,模块TMR0工作于计数方式,触发方式可由程序设置位上升沿触发或下降 沿触发有效。在计数器溢出时,也可产生溢出中断。,2与定时器/计数器TMR0模块相关的寄存器,(1)选项寄存器,OPTION_REG,(1)是作为定时器还是作为计数器,(2)决定分频器的分频系数,(3)时钟是上升沿/下降沿触发,(2)中断控制寄存器,INTCON,(1)中断总控制-允许/禁止,(2)各类中断的控制,(3)各类中断的标志,(3)RA口方向寄存器,TRISA,当TMR0工作于计数器时,RA4必须设为输入,以便从该脚输,入时钟脉冲信号。,(4)定时器/计数器,TMR0,8位累加计数寄存器,与计数和定时无关,3 定时器/计数器TMR0模块的电路结构和工作原理,4.分频器和控制逻辑电路,分频器实际上也是一个8位累加计数器,它只能配合TMR0或WDT输出的时钟由PS2PS0设定分频比,这个分频比由OPTION_REG寄存器中的PS2PS0决定。,5.TMR0累加计数寄存器,TMR0有,定时器,和,计数器,两种工作模式。这两种模式之间的差异是触发信号的来源不同。TMR0的工作模式由T0CS位(选项寄存器OPTION_REG)决定,表,53 TMR0,的工作模式,T0CS,TMR0,工作模式,触发信号的来源,0,定时器,计数器的触发信号取自内部指令周期,1,计数器,计数器的触发信号取自外部引脚,T0CKI,电平的上升沿,/,下降沿,TMR0 定时时间的计算公式:,t=P(2,8,X)T,X=2,8,t/(TxP),t,:设定的定时时间uS,P,:分频器的分频比-2,256,取值为2、4、8、16、32、64、128、256。,X,:TMR0的计数初值-0,255,T,:指令周期uS,定时器最短的定时时间,:,t=2x(256-255)x1uS=2uS,定时器最长的定时时间,:,t=256x(256-0)x1uS=65535uS,TMR0的定时程序举例:,用TMR0产生10毫秒的定时时间,步骤如下:,(1)求出10毫秒定时时间对应的计数初值,X=2,8,t/(TxP),=256-10000/(1x64),=256-156,=100(64H),(2)根据题目的要求,对OPTION_REG配置,(3)将(X=100)写入TMR0计数寄存器,(4)等待T0IF溢出,溢出时,定时时间已到,TMR0定时器延时10毫秒程序举例:,BSF STATUS,RP0,MOVLW 05H ;Fosc/64,分频器分配给TMR0,,MOVWF OPTION_REG ;上升沿出发TMR0递增,,BCF STATUS,RP0,;内部时钟,;,MOVLW 64H,MOVWF TMR0 ;定初值写入TMR0,,;并启动TMR0,LOOP,BTFSS INTCON,T0IF ;是否溢出?,GOTO LOOP ;没溢出,继续等待,;,BCF INTCON,T0IF ;定时器0标志位清0,GOTO$;程序在原地踏步,TMR0定时器延时1000毫秒程序举例:,BSF STATUS,RP0,MOVLW 05H ;Fosc/64,分频器分配给TMR0,,MOVWF OPTION_REG ;上升沿出发TMR0递增,,BCF STATUS,RP0,;内部时钟,MOVLW .100,MOVWF COUNT,LOOP,MOVLW 64H,MOVWF TMR0 ;定初值写入TMR0,并启动TMR0,LOOP1,BTFSS INTCON,T0IF ;是否溢出?,GOTO LOOP1 ;没溢出,继续等待,;,BCF INTCON,T0IF ;定时器0标志位清0,DECFSZ COUNT,1,GOTO LOOP,GOTO$;程序在原地踏步,用定时器TMR0产生一个50Hz方波从RC0输出程序举例:,BSF STATUS,RP0,MOVLW 05H ;Fosc/64,分频器分配给TMR0,,MOVWF OPTION_REG ;上升沿出发TMR0递增,,CLRF TRISC ;C口为输出,BCF STATUS,RP0,;内部时钟,;,LOOP,MOVLW 64H,MOVWF TMR0 ;定初值写入TMR0,并启动TMR0,LOOP1,BTFSS INTCON,T0IF ;是否溢出?,GOTO LOOP1 ;没溢出,继续等待,;,BCF INTCON,T0IF ;定时器0标志位清0,MOVLW B00000001,XORWF PORTC,1 ;对RC0求反,GOTO LOOP ;继续循环,定时器/计数器TMR1的硬件结构,定时器/计数器TMR1不仅可作通用的定时器和计数器;而且利用内置的低频时基振荡器,还可实现实时时钟RTC功能;通过TMR1与CCP模块配合使用,定时器/计数器TMR1又可实现输入捕捉和输出比较功能。,定时器/计数器TMR1是一个16位的可读可写的计数寄存器,由高低两字节组成(TMR1H和TMR1L)16位寄存器从0000H到FFFFH加1计数,然后回到0000H。,在从FFFFH到0000H的过程中,置位中断标志位TMR1IF。定时器/计数器TMR1还带有一个3位的可编程预分频器和一个内置的低功耗低频时基振荡器。,定时器/计数器TMR1的硬件结构,1定时器/计数器TMR1模块具有的特点:,(1)一个16位的由时钟信号上升沿触发的累加计数寄存器对TMR1H:TMR1L;,(2)TMR1H和TMR1L是在RAM中统一编址的寄存器对,,地址为0EH和0FH,可用软件方式读/写TMR1寄存器对的内容;,(3)一个可选用的,3位可编程的预分频器,;,(4)累加计数的信号源可选择内部系统时钟、外部触,发信号或自带时基振荡器信号;,(5)既可工作于定时器模式,又可工作于计数器模式,还可用作实时时钟RTC;,(6)在计数器溢出时,相应的溢出中断标志自动置位,并可产生溢出中断。,定时器/计数器TMR1的硬件结构,2.与定时器/计数器TMR1模块相关的寄存器,(1)PIE1,外设中断使能寄存器,(2)PIR1,外设中断标志寄存器,(3)INTCON,中断控制寄存器,(4)T1CON,TMR1,控制积存器,(5)TMR1L,TMR1计数寄存器低字节,(6)TMR1H,TMR1计数寄存器高字节,参见表5-2,有关TMR1、TMR2模块电路结构不介绍。,TMR1 定时时间的计算公式:,t=P(2,16,X)T,X=2,16,t/(TxP),t,:设定的定时时间uS,P,:分频器的分频比-1,8,取值为1、2、4、8,X,:TMR1H和TMR1L的计数初值-0,65535,T,:指令周期uS,定时器最短的定时时间,:,t=1x(65536-65535)x1uS=1uS,定时器最长的定时时间,:,t=8x(65536-0)x1uS=524288uS,TMR1的定时程序举例:,用TMR1产生10毫秒的定时时间,步骤如下:,(1)求出10毫秒定时时间对应的计数初值,X=2,16,t/(TxP),=65536-10000/(1x8),=65536-1250,=64286(FB1EH),(2)根据题目的要求,对T1CON配置,(3)将(X=FB1E)写入TMR1H和TMR1L计数寄存器,(4)将T1SCEN位置1,启动TMR1开始定时,(4)等待PIR1的TMR1IF位为1,为1时,定时时间已到,TMR1的定时程序举例:,LIST P=16F877A;列表伪指令,INCLUDE P16F877A.INC;把包含文件含入源程序,_CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭,;*,COUNTEQU20H,ORG 0 x000;主程序开始地址,GOTOMAIN;跳转到主程序,ORG0005H ;主程序开始地址为0005H,MAIN,MOVLW0F1H ;31H,MOVWFT1CON;设定定时器工作方式,分频比为1:8,;*,;定时0.5秒,;X=65536-t/(TxP)=65536-500000/(1x8)=3036=0BDCH,;,MOVLW0BH,MOVWFTMR1H;设定TMR1高位初值,MOVLW0DCH ;,MOVWFTMR1L ;设定TMR1低位初值,;*,BSFT1CON,TMR1ON ;启动定时器TMR1,LOOP1,BTFSS PIR1,TMR1IF ;是否溢出?,GOTOLOOP1 ;没溢出,继续等待,BCFPIR1,TMR1IF ;已溢出,清TMR1溢出标志,;*,GOTO$;程序在原地踏步,END ;源程序结束,本章小节,1、熟悉PIC16F87X单片机的定时/计数器功能,PIC16F87X单片机有3个定时器/计数器模块,它们的共同点是其核心部分都是一个由时钟信号触发,按递增方式累加工作的循环计数器;从预先设定的某一初始值开始累计,在累计到计数器产生溢出,并同时建立一个相应的溢出中断标志。,TMRO可用于定时控制、延时、对外部事件计数和检测等场合。,TMR1不仅可作通用的定时器和计数器;而且利用内置的低频时基振荡器,还可实现实时时钟RTC功能;通过TMR1与CCP模块配合使用,定时器/计数器TMR1又可实现
展开阅读全文