小弟想对光电编码器输出的脉冲进行计数,从而来确定小车走过的距离,前进还是后退,前进距离前加+号,后退距离前加-号显示。
光电编码器原理:它输出有两路,分为A B相,通过A B两路脉冲的相位来确定,正转还是反转;通过脉冲计数来确定走过的距离。
我的思路:把光电编码器输出的脉冲接到INT0,有IT0=0这条语句设置中断由下降沿触发,然后在中断内对脉冲进行计数从而来确定距离。在硬件上由鉴相器来确定前进和后退。
有个问题:看了别人的程序有几个问题没搞懂
1.别人只用了编码器输出的一相脉冲,通过对数据求模,知道了正反转(见下面caiji程序)。数据求模不就是求绝对值吗?怎么能知道正反转?
2.程序如果相应中断,肯定是来了个下降沿,A1应该为低电平,中断程序里怎么判断A1==1了?
void caiji() interrupt 0
{
if(A1==0)
pulse++;
else if(A1==1)
pulse--;
}
3.下边这个就能求出正负号?
/***************发送数据求模******************************/
uchar tab1[]={0,0,0,0,0,0,0,0};
void qiumo(long int i)
{
if (i>=0)
{tab1[1]=10;}
else
{
tab1[1]=11; //负数符号位
i=~i+1; //负数数字位
}
tab1[2]=i/100000;
tab1[3]=i%100000/10000;
tab1[4]=i%10000/1000;
tab1[5]=i%1000/100;
tab1[6]=i%100/10;
tab1[7]=i%10;
} |