//函數在C51運行正常,改動到ATMEGA8運行不計數,
#define PORTD_BIT (*((volatile BYTEBIT *)&PORTD))
#define PIND_BIT (*((volatile BYTEBIT *)&PIND))
void ShaoMiao(void)
{ //定義變量:標志 A相 B相
char EC11_Flag=0,Left_Flag=0,Right_Flag=0;//
char EC11_A, EC11_B;//定義兩個變量,AC11編碼器A相接PD0 B相接PD1
PORTD_BIT.BIT7=EC11_Flag; //狀態標志指示燈輸出
EC11_A=PIND_BIT.BIT0; //定義編碼器A相接PD0狀態送變量A
EC11_B=PIND_BIT.BIT1; //定義編碼器B相接PD1
if(EC11_A&&EC11_B) //表示開始第一個脈沖,第二個脈沖兩個都為1為轉動狀
{
EC11_Flag =1 ;// 1 在轉動狀態 0為停止狀態;
PORTD_BIT.BIT7=EC11_Flag; //狀態標志指示燈
}
if(EC11_A!=EC11_B)//第二個信號 A信號不等于B信號 記錄下來
{
Left_Flag = EC11_A ; //記錄A的信號狀態
PORTC_BIT.BIT2=Left_Flag; //A指示燈
Right_Flag = EC11_B ; //記錄B的信號狀態
PORTC_BIT.BIT3=Right_Flag; //B指示燈
}
if(EC11_Flag)//結果為真,在轉動狀態?如果這成立,第二行就不成立了,但是51上可以運行,如果這里條件不成立,下行不執行
{
if((EC11_A==0)&&(EC11_B==0)) // 第三個信號,處理第二個信號
{
if(Left_Flag) //左轉 A相當前低電平計數減
{
count-- ; //旋轉的值減1
}
else if(Right_Flag)//右轉 B相當前低電平計數減 ==0 !
{
count++; //旋轉的值加1
}
EC11_Flag = 0;// 標志位清零
} //
}
}
請教高人,哪里的問題 |