论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-11-1 17:27:31
|
显示全部楼层
本帖最后由 likunxue 于 2016-11-1 17:29 编辑
sbit BianMa_A = P2^0; //编码器A相输出脉冲线
sbit BianMa_B = P2^1; //编码器B机输出脉冲线
unsigned char data ShuChuZhuangTai = 0; //ABZ信号状态寄存器(静态变量)
signed long data WeiZhiJiShuQi = 0; //光电编码器位置计数器
/*********************************************************************************************
函数名:记数器中断处理函数
调 用:无
参 数:无
返回值:无
结 果:完成编码器的采集工作,记录编码器的位置状态
TIM2->CNT = 65427; //重装定时常数0.00456ms(220KHz)
/**********************************************************************************************/
void name(void) interrupt 1
{
unsigned char k,Cal;
Cal = P2&0x03;//取得当前光电编码器输入状态值
if(Cal != ShuChuZhuangTai)
{
k = (ShuChuZhuangTai << 2 )+ Cal;//得到4倍频编码输入状态值
switch(k)
{
case 0x07:WeiZhiJiShuQi++;break;
case 0x0E:WeiZhiJiShuQi++;break;
case 0x08:WeiZhiJiShuQi++;break;
case 0x01:WeiZhiJiShuQi++;break;
case 0x0D:WeiZhiJiShuQi--;break;
case 0x04:WeiZhiJiShuQi--;break;
case 0x02:WeiZhiJiShuQi--;break;
case 0x0B:WeiZhiJiShuQi--;break;
}
ShuChuZhuangTai = Cal; //输入状态存副本
}
} |
|