资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第七章 定时器,/,计数器,TMR0,PIC,系列单片机内部配备有数量不等的定时器计数器模块:例如,PIC17CX,系列和,PIC18CX,系列都都配置了,4,个定时器计数器模块;而,PIC16F87X,系列都配置了,3,个定时器计数器模块,分别记为,TMR0,、,TMR1,和,TMR2,。,TMR0,、,TMR1,和,TMR2,在电路上均不相同,而且用途也各有所异,但是三者也存在许多共同之处。本章讲解的是,TMR0,,,TMRl,和,TMR2,将在后面章节中讲解。,其实定时器都是一个由时钟信号触发的递增的计数器;都是从预先设定的初始值开始累计,在累计数超过最大值,或者超过预先设定的值时便产生溢出,并同时会建立一个相应的,溢出标志,(,即中断标志位,),。,TMR0,的特性:,核心部分是一个,8,位宽,在时钟信号上升沿触发的循环累加计数寄存器,TMR0,;,TMR0,是一个特殊功能寄存器,地址为,01H,或,101H,;,有一个可选用的,8,位可编程分频器;,有一个可选用的,8,位可编程分频器;,信号源可以是内部时钟信号源,(,定时器模式,),,也可以是外部时钟信号源,(,计数器模式,),。,当使用外部触发信号作为时钟信号源时,可定义触发方式,即上升沿触发或下降沿触发;,具有溢出中断功能。,7.1,与,TMR0,模块相关的寄存器,与,TMR0,模块有关的特殊功能寄存器有四个:,8,位的累加寄存器,TMR0,、中断控制寄存器,INTCON,、选项寄存器,OPTION_REG,和端口,RA,方向控制寄存器,TRISA,,如下表所列。,以上,4,个寄存器都是特殊功能寄存器,可以把它们当做普通,RAM,单元来进行读写访问。下面对几个起控制作用的寄存器进行介绍:,选项寄存器,OPTION_REG,选项寄存器是一个可读、写的寄存器,与,TMR0,有关各位的含义如下:,PS2,PS0,:,分频器分频比选择位。如下表所列。,PSA,:,分频器分配位。,1,分频器分配给,WDT,;,0,分频器分配给,TMR0,。,T0SE,:,TMR0,时钟源触发边沿选择位,只有当,TMR0,工作于计数器模式时,,该位才有效。,1=,外部时钟,T0CKI,下降沿触发,TMR0,递增;,0=,外部时钟,T0CKI,上升沿触发,TMR0,递增。,T0CS,:,TMR0,的时钟源选择位。,1=,由,T0CKI,外部引脚输入的脉冲作为,TMR0,时钟源;,0=,由内部提供的指令周期信号作为,TMR0,时钟源。,中断控制寄存器,INTCON,中断控制寄存器也是一个可读写的寄存器,与,TMR0,有关的各位的含义如下:,T0IF,:,TMR0,溢出标志位,(,也就是溢出中断标志,),。,l=TMR0,发生溢出;,0=TMR0,未发生溢出。,T0IE,:,TMR0,溢出中断使能位。,l=,允许,TMR0,溢出后产生中断;,0=,屏蔽,TMR0,溢出后产生中断。,GIE,:,全局中断总使能位。,1=,允许,CPU,响应所有外围设备产生的中断请求;,0=,禁止,CPU,响应所有外围设备产生的中断请求。,端口,RA,方向控制寄存器,TRISA,TRISA4,:由于,TMR0,的外部输入信号,T0CKI,与端口,RA4,是复合在同一条脚上的,当,TMR0,工作于计数模式时,要求该脚必须设置为输入方式,作为,T0CKI,信号专用输入引脚。,1=,引脚,RA4,设为输入,以便从该脚送进,T0CK1,信号。,7.2 TMR0,的电路结构和工作原理,定时器计数器,TMR0,的结构方框图如图,8.2,所示。,在图,8.2,中,可以将整个电路按功能简化为三个相对独立的主要组成部分:计数寄存器,TMR0,、,分频器和看门狗定时器,WDT,。,因为看门狗在电路上与,TMR0,之间共同分享同一个分频器,于是两者就有了同时出现在同一张图上。,7.2.1,分频器,看门狗定时器,WDT,与,TMR0,共同分享一个分频器,但两者不能同时使用。即在同一时刻,分频器只能分配给两者中之一。,分频器也是一个,8,位累加计数器,不过它不能像,TMR0,那样直接进行读、写操作,它只能配合,TMR0,或,WDT,起分频作用。,当,PSA=0,时,分频器归,TMR0,所有,进入累加器,TMR0,的时钟信号,都要先经过分频器;而当,PSA=1,时,分频器与,TMR0,隔离,进入,TMR0,的时钟信号,不再经过分频器。,当分频器分配给,TMR0,时,任何以,TMR0,为目标的写操作指令,(,如,CLRF TMR0,,,MOVWF TMR0),都会将分频器清,0,;,当分频器分配给,WDT,时,执行,CLRWDT,的指令将会同时将其分频器清零。,注意分频器清零时,而分频比和分配对象并不会改变。,7.2.2 TMR0,累加计数寄存器,定时器计数器,TMR0,既可以作为定时器使用,也可以作为计数器使用,即,TMR0,具有定时和计数两种工作模式。,两种模式的差异就是进入,TMR0,的时钟信号源不同,,TMR0,的工作模式由,T0CS,位,即选项寄存器,OPTION_REG,位,5,决定。,1.,定时器模式:,当,T0CS=0,时,,TMR0,为定时器模式,,TMR0,的触发信号来自于内部的指令周期信号。,在定时器模式下,一旦往,TMR0,中写入初始值,,TMR0,便启动累加计数。未使用分频器时,,TMR0,会在每个指令周期信号到来时自动加,1,;使用了分频器时,,TMR0,会在收到,n,个指令周期信号后自动加,1,,,n,由分频比决定。,2,计数器模式,工作在计数器模式时,,T0SE,位决定了外部时钟信号的触发边沿:,T0SE=1,,下降沿触发;,T0SE=0,,上升沿触发。,TMR0,工作于计数器模式时,一旦往计数寄存器中写入初始值后,,TMR0,立即开始新一轮的累加计数。,没有使用分频器时,,TMR0,会在每个,T0CKI,信号的上升沿或下降沿到来时自动加,1,。,在此模式下,外部随机送入的脉冲信号和内部的工作时钟之间存在一个同步的问题。也就是说,并不是外部触发信号一进入,,TMR0,就立即加,1,,而是要经过一个同步逻辑,(,见图,8.1),,外部信号与系统时钟同步之后,方能进入累加计数器,TMR0,,,引发 一次加,1,操作。,7.5 TMR0,的应用举例,定时器计数器是一种应用比较灵活的外设模块,在本节中充分利用,ICD2,演示板上的硬件资源,设计了几个实验。,7.5.1 TMR0,用作硬件定时器,前面章节中介绍了用软件方式实现延时,下面利用定时器,TMR0,来实现硬件延时。,例,7.1,:闪烁式队列灯,实验项目的功能,把演示板上的,8,只,LED,发光二极管,设计为轮流发光,也就是在下图所示,16,个状态间轮流,切换,并且在各个状态之间切换时,插入,256 ms,的延时。,8,只,LED,的亮灭规律符合数据结构中的队列操作规则,:“最先移入队列的亮灯,最先移出队列”。,即开始亮灯的顺序是:,LED0,LED1 LED0,.LED7 LED0,。,熄灯的顺序也是以上顺序。,软件设计,延时时间设计:,当,8,个,LED,在,16,个状态之间切换时,要插入,256 ms,的延时;每个灯在发光时有闪烁,即每个灯不断在“亮灭”,“亮灭”之间的 延时为,64 ms,,这些延时要求由,TMR0,产生。,定时器,/,计数器,TMR0,控制字设计:,将分频器配置给,TMR0,使用,即,PSA=0;,分频比设定为最大,(1:256),即,PS2PS0=111,那么,OPTION_REG=07H,TMR0,的初值,X,计算,(,假设,Tcyc,=1s),:,256*(256-X)*,Tcyc,=64000s,X=256-64000/256=6,设计一个查表子程序,READ,,在表中预先存储要显示的状态,,LED,显示码可以调用,READ,获取。,程序流程图如下:,程序清单,TMR0 EQU 01H,PCL EQU 02H,STATUS EQU 03H,OPTION EQU 81H,INTCON EQU 0BH,PORTC EQU 07H,TRISC EQU 87H,TMR0B EQU 6 ;,定义,TMR0,寄存器初始值,COUNT EQU 20H ;,定义一个计数器变量,RP0 EQU 5 ;,定义,RAM,的页选位,RP0,ORG 000H,BSF STATUS,RP0 ;,转向,RAM,的体,1,MOVLW 00H ;,将端口,C,设为输出,MOVWF TRISC,MOVLW 07H ;,设置分频器给,TMR0,MOVWF OPTION ;,分频比值设为,1:256,BCF STATUS,RP0 ;,恢复到文件寄存器的体,0,CLRF COUNT ;,计数器清,0,LOOP MOVF COUNT,0 ;,把,COUNT,作为查表地址,;,偏移量送入,W,CALL READ ;,调用读取显示信息子程序,MOVWF PORTC ;,将查表得到的驱动码送显,INCF COUNT,1 ;,计数器加,1,MOVLW 0FH ;,屏蔽,COUNT,高,4,位,ANDWF COUNT,1 ;,以免偏移量超出表格范围,CALL DELAY ;,调用延时子程序,CALL DELAY ;,调用延时子程序,CALL DELAY ;,调用延时子程序,CALL DELAY ;,调用,4,次共延时,256 MS,GOTO LOOP ;,跳转,;*TMR0,延时子程序,(64 MS)*,DELAY BCF INTCON,2 ;,清除,TMR0,溢出标志位,MOVLW TMR0B ;TMR0,赋初值,MOVWF TMR0 ;,并重新启动定时计数,LOOP1 BTFSS INTCON,2 ;,检测,TMR0,溢出标志位,GOTO LOOP1 ;,没有溢出,循环检测,RETURN ;,子程序返回,;*,读取显示信息的查表子程序*,READ,ADDWF PCL,1 ;,地址偏移量加当前,PC,值,RETLW B00000001 ;,显示信息码,下同,RETLW B00000011,RETLW B00000111,RETLW B00001111,RETLW B00011111,RETLW B00111111,RETLW B01111111,RETLW B11111111,RETLW B11111110,RETLW B11111100,RETLW B11111000,RETLW B11110000,RETLW B11100000,RETLW B11000000,RETLW B10000000,RETLW B00000000,END ;,
展开阅读全文