购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.18 TIMER1与TIMER2控制十字路口秒计时显示屏

图3-21所示的仿真电路运行时,东西向蓝色数码管与南北向红色数码管同步倒计时,若干秒后交换,如此往复,在倒计时过程中,如果仅剩下5s时,系统会发出报警提示声音。主程序同时启用了两个定时器TIMER1和TIMER2,其中16位的TIMER1定时器负责递减秒数及切换方向,8位的TIMER2定时器负责刷新数码管显示。

图3-21 TIMER1与TIMER2控制十字路口秒计时显示屏

1.程序设计与调试

(一)TIMER2技术要点

为实现所要求的功能,主程序同时启用16位的TIMER1和8位的TIMER2定时器,分别用于控制秒递减和数码管刷新显示。下面重点讨论TIMER2的技术要点与程序设计方法。

PIC16F877A的TIMER2是一个8位的带有预分频器(或称前分频器,Prescaler)和后分频器(Postscaler)的定时器,一般与CCP模块的PWM功能一起出现,TIMER2也可以作为普通的定时器使用,但不能对外部事件计数。

图3-22所示的是TIMER2的结构图,与同样是8位的TIMER0定时/计数器相比,TIMER2多出了一个周期(Period)寄存器PR2,TMR0仅仅在计数溢出时产生中断,而TMR2寄存器只有在计数递增至与PR2寄存器预设的值相等时,才会在下一计数脉冲到来时复位(Reset/归0)并产生中断。PIC单片机上电时PR2默认为0xFF,也正是因为这一点,在不设置PR2(保持默认值0xFF)时,TIMER2和TIMER0一样,也会递增至0xFF并在下一计数脉冲到来时“溢出”,此时的“溢出”实际也是一种“匹配”。

图3-22 TIMER2结构图

图3-22中的“TMR2输出”可通过软件配置为SPI模块主控模式下的波特率时钟(Baud Rate Clock),设置时将SSPCON1寄存器中的SSPM3:SSPM0设为0011,即可选择SPI Master mode,clock=TMR2输出/2。

通过设置T2CKPS[1:0]=00、01、1X,可分别设置TIMER2的三种前分频比:1:1、1:4、1:16;通过设置TOUTPS[3:0]=0000~1111,可分别设置TMR2与PR2匹配后的16种分频比,分别为1:1、1:2、1:3、…、1:16。

PIC单片机复位时TMR2自动归零,PR2默认为0xFF。当TMR2ON置位时定时器启动,预分频器分频后的计数时钟信号使TMR2递增,当TMR2递增至等于PR2时,下一计数脉冲将使TMR2归零。每当TMR2归零时并不一定会立即置位中断标志位TMR2IF,由图3-22可知,TMR2IF的置位还取决于后分频器的设置,如果T2OUTPS[3:0]=0000,则后分频比为1:1,此时TMR2归零会立即触发中断,假如后分频比设为1:15,则每当TMR2与PR2匹配15次时,才会置位一次TMR2IF。

(二)TIMER2程序设计

由以上讨论可知,通过直接设置PR2即可实现TIMER2的定时功能,它无需像TIMER0那样在每次溢出时均需重置TMR0初值。只有在保持PR2的默认初值(0xFF)不变,而又不需要实现最大定时,才必须与TIMER0一样在每次中断时重置TMR2的计数初值。实际上一般都不会这么做。下面是用TIMER2实现同一定时的两种设置方法。

(1)现假设前分频为1:16,后分频为1:1,需要定时0.004s时,如果PR2为默认值0xFF,则TMR2的初值设置如下:

(2)如果改为设置PR2,则有:

源程序中选择的是第2种方法(设置PR2)。

TIMER2定时器中断程序以4ms周期刷新数码管显示,中断程序根据方向的切换,控制(0、1)位或(2、3)位数码管刷新显示。主函数用TMR2IE=1使能TIMER2中断,根据技术手册可知,所使能的中断被称为“与PR2匹配中断”,而不是TIMER0与TIMER1的“溢出中断”。

2.实训要求

① 改用TIMER0和TIMER2定时器重新进行设计。

② 进一步完善设计,仿真十字路口计时屏的切换效果。 PiGpTixGdq4L+PMBav8x5tvSZ05pJFMaFstNiNCy1XZuHBP7NQsrMmrILdzl8DME

3.源程序代码
点击中间区域
呼出菜单
上一章
目录
下一章
×