这是前辈给的计数程序 基本看懂了 可是不知道怎么才能把测速和显示的程序加进去。。转向我是用触发器鉴相
帮忙看看原题图右何问题。 用中断测完脉冲后 如何才能得到转速啊 我把我的硬件图贴上来 还有计数的程序 麻烦大家帮我看看 如何加进来。 这个是代码:
//****************************************************************************** // 旋转编码器脉冲计数程序,在8051上通过外部中断0实现 // 特别说明:适应于旋转编码器脉冲频率较低的场合(对于12MHz晶体,大致可以支持 4KHz // 以下的旋转编码器脉冲频率),若旋转编码器脉冲频率更高,建议采用计数器 // T0和T1分别实现正反向计数,此时一般需要附加少量外部电路的配合 // 以下代码仅供参考,由此产生的任何后果,本人不承担任何责任 //****************************************************************************** #include "reg51.h"
long counter=0; //旋转编码器的脉冲计数值,左转为正,右转为负 void main() { IT0 = 1; //外部中断0为边沿触发 EX0 = 1; //使能外部中断0 EA = 1; //使能中断 while(1) { // 在这里写代码实现你想做的事,比如计数值的进一步处理等等等等 } }
//****************************************************************************** // 延时函数delay(unsigned char dly) // 延时值与晶体频率有关,可以自己调整变量x的值以取得合适的单位延时值 //****************************************************************************** void delay(unsigned char dly) { unsigned int x; while(dly--) { x = 1000; while(x--); } }
//****************************************************************************** // 外部中断0的中断处理函数void ISR0() // 注意:旋转编码器的A接P3.2,B接P1.7(跟你图上一样不变) //****************************************************************************** void ISR0() interrupt 0 { if((P1&0x80) == 0x80) { delay(10); //消抖动,延时一会,确认P1.7仍然为高,如果频率比较高,延时要缩短 if((P1&0x80) == 0x80) counter++; } else { delay(10); //消抖动,延时一会,确认P1.7仍然为低,如果频率比较高,延时要缩短 if((P1&0x80) == 0x00) counter--; } }
|