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

3.19 用工作于同步计数方式的TMR1实现按键或脉冲计数

在图3-23所示的仿真电路中,定时/计数器TIMER1的计数脉冲由RC0/T1CKI引脚输入,实现了按键和脉冲计数及显示功能,案例设计与调试的要点在于掌握TIMER1工作于同步计数方式的程序设计方法。

图3-23 用工作于同步计数方式的TIMER1实现10 000以内的脉冲或按键计数

1.程序设计与调试

(一)TIMER1的同步工作模式

PIC16F877A的16位定时/计数寄存器TIMER1可工作于3种模式:分别为(1)同步定时器模式;(2)同步计数器模式;(3)异步计数器模式。3种模式的配置由T1CON寄存器的TMR1CS和T1SYNC决定。当设置TMR1CS=1时,TMR1寄存器的计数时钟不再由系统时钟分频提供,而是由外部输入脉冲提供,此时TIMER1工作于计数器模式,T1SYNC=0时工作于同步模式,在同步计数器模式下:

(1)T1OSCEN=0对RC0/T1OSO/T1CKI输入的脉冲上升沿计数;

(2)T1OSCEN=1对RC1/T1OSI/CCP2输入的脉冲上升沿计数。

实测时发现当前版本的Proteus在这里存在BUG,它将这两位弄反了。

有关TIMER1的内部结构可参考本章案例3.17中的图3-20。

(二)计数程序设计

因为存在BUG,主程序中将T1OSCEN暂设为1,以便对RC0/T1OSO/T1CKI输入脉冲的上升沿计数,在实物电路上应根据技术手册设T1OSCEN=0。

主程序将TIMER1配置为工作于同步计数方式,所选择的计数脉冲将由RC0/T1OSO/T1CKI引脚输入,输入脉冲的上升沿使TMR1寄存器累加,实现脉冲计数,所输入脉冲信号可能是无固定周期的(如仿真电路中的按键计数操作),也可能是有固定周期的(如外部输入的10Hz计数脉冲)。运行时可观察到数码管并不会在按下按键时显示计数递增,只有按键释放时出现的脉冲上升沿才会使TMR1累加,数码管显示递增。

对于4位的计数值(实际最大可达65 535,受限于仿真电路中的数码管位数,仅取0000~9999范围之内计数值),为将其分解为4位待显示数字,中断函数内未直接使用常规的整除“/”与取余“%”运算符,而是完全由“+”,“−”运算符及循环语句实现数位分解,这样可有效地节约MCU时间,提高运行效率,因为“/”与“%”的运行效率是很低的。

2.实训要求

① 将输入脉冲改接到RC1/T1OSI/CCP2,修改程序,实现同样的计数功能。

② 添加信号调理电路,检测交流信号频率并显示。 2R3JcatRwwCcM+ICXOl7jBhHlK7OSaztQ/OYS7lNQO88m5phdyUs+6FOpvwKXOOA

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