我连接编码器,使用SSI方式,数据倒是读上来了是格雷码格式,可是数据不正确,转动编码器时显示数据不是连续变化的,乱跳。请搞过编码器的大侠指点一二。 编码器采集部分 void BIANMAQI(void) { uint8_t i; i_bianmadata = 0; i_bianmaquan = 0; cbi(PORTD,SSICLK); Delay_us(2); for(i=0; i<12; i++) // 读取前12位 { sbi(PORTD,SSICLK); Delay_us(1); if(bit_is_set(PIND,SSIDAT)) sbi(i_bianmaquan,0); if(i != 11) i_bianmaquan *= 2; cbi(PORTD,SSICLK); Delay_us(1); } for(i=0; i<13; i++) // 读取后13位 { sbi(PORTD,SSICLK); Delay_us(1); if(bit_is_set(PIND,SSIDAT)) sbi(i_bianmadata,0); if(i != 12) i_bianmadata *= 2; cbi(PORTD,SSICLK); Delay_us(1); } sbi(PORTD,SSICLK); } 解码使用以下方式 temp = i_bianmadata; while(i_bianmadata) { i_bianmadata /= 2; temp ^= i_bianmadata; } c_SendBuffet[2] = 0; c_SendBuffet[3] = temp / 0x100; temp &= 0xFF; c_SendBuffet[4] = temp; 谢谢各位大侠指点. |