|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Неразгледах кода на Ц, но ще дам код на асемблер за ПИК18Ф, който работи със сигурност.
EncoderRoutine:
movf PORTB,W
movwf TempRegister1
xorwf ENCODER_BIT_BUFFER,W
andlw B'11000000' ; проверка за промяна на входовете
skpnz
return
clrc
rrcf ENCODER_BIT_BUFFER,F
clrc
rrcf ENCODER_BIT_BUFFER,F
movf TempRegister1,W
andlw B'11000000'
iorwf ENCODER_BIT_BUFFER,F
movf ENCODER_BIT_BUFFER,W ; запис на новото състояние на входовете
xorlw B'11100001'
bz Encoder_Rotate_Right
movf ENCODER_BIT_BUFFER,W
xorlw B'11010010'
bz Encoder_Rotate_Left
return
Encoder_Rotate_Left:
movf InterfaceSTATUS,W
andlw B'11110000'
xorlw B'10000000'
movlw B'00010000'
skpz
subwf InterfaceSTATUS,F
return
Encoder_Rotate_Right:
movf InterfaceSTATUS,W
andlw B'11110000'
xorlw B'01110000'
movlw B'00010000'
skpz
addwf InterfaceSTATUS,F
return
Програмката се вика на всяка 1мс, и проверява 6,7 пин на ПОРТБ, ако има промяна новото състояние се записва в шивт буфера ENCODER_BIT_BUFFER, и се проверява съдържанието на буфера: ако е B'11100001' имаме врътка в едната посока, ако е B'11010010' съответно в другата посока.
|