Квадратурный счетчик для PIC16

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View

   Привет All

   Kто может поделиться исходником квадратурного счетчика (16-bit) для PIC16.
Интересует полная программная реализация счета с энкодера. Импульсы с
энкодера заведены на int portb<7:6>. Hеобходим минимальный код реализации.
Может, кто-то уже писал и готов поделиться исходником.

   С Уважением Евгений.

    Удачу надо не ждать, а делать.

Квадратурный счетчик для PIC16
Hi Evgeniy, hope you are having a nice day!


06 Дек 04, Evgeniy Dontsov wrote to All:


 ED>    Kто может поделиться исходником квадратурного счетчика (16-bit) для
 ED> PIC16. Интересует полная программная реализация счета с энкодера.
 ED> Импульсы с энкодера заведены на int portb<7:6>. Hеобходим минимальный
 ED> код реализации. Может, кто-то уже писал и готов поделиться исходником.

В этом примере датчик подключен к RB4, RB5. Думаю как переделать для твоего
случая понятно.

_portb          equ 0x27    ; копия порта B
_new_val        equ 0x28
_old_val        equ 0x29
_dup            equ 0x2a    ; (word) текущее значение углового датчика

;------------------------------------------------
_dup_tbl
    addwf   PCL,F
    retlw   0
    retlw   -1
    retlw   +1
    retlw   0   ; неизвестное состояние
    retlw   +1
    retlw   0
    retlw   0   ; неизвестное состояние
    retlw   -1
    retlw   -1
    retlw   0   ; неизвестное состояние
    retlw   0
    retlw   +1
    retlw   0   ; неизвестное состояние
    retlw   +1
    retlw   -1
    retlw   0

;================================================
; прерывание от углового датчика
;------------------------------------------------
_rb_int:
    movf    PORTB,W
    bcf     INTCON,RBIF
    movwf   _portb
    movwf   _new_val
    rrf     _new_val,F
    rrf     _new_val,W
    andlw   B'00001100'
    iorwf   _old_val,W
    call    _dup_tbl
    addwf   _dup,F
    btfsc   STATUS,C
    incf    _dup+1,F
    andlw   B'10000000'
    btfss   STATUS,Z
    decf    _dup+1,F
    swapf   _portb,W
    andlw   B'00000011'
    movwf   _old_val
    return


WBR,
    AVB


Site Timeline