;=======================================================
; Проект 11. Статический 7-сегментный индикатор
; PIC16F84A, 4 МГц. Индикатор с ОБЩИМ КАТОДОМ на RB0..RB6
; Счёт 0..9 с интервалом ~1 с
;=======================================================
        LIST    p=16F84A
        #include <p16f84a.inc>
        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

        cblock  0x0C
        d1, d2, digit
        endc

        ORG     0x000
        goto    Start

;--- таблица сегментов (общий катод): dp g f e d c b a ---
Table
        addwf   PCL,f           ; смещение по W
        retlw   b'00111111'     ; 0
        retlw   b'00000110'     ; 1
        retlw   b'01011011'     ; 2
        retlw   b'01001111'     ; 3
        retlw   b'01100110'     ; 4
        retlw   b'01101101'     ; 5
        retlw   b'01111101'     ; 6
        retlw   b'00000111'     ; 7
        retlw   b'01111111'     ; 8
        retlw   b'01101111'     ; 9

Start
        bsf     STATUS,RP0
        clrf    TRISB           ; порт B — выходы на сегменты
        bcf     STATUS,RP0
        clrf    digit

Main
        movf    digit,w
        call    Table           ; получаем код сегментов
        movwf   PORTB
        call    Delay1s
        incf    digit,f
        movf    digit,w
        xorlw   .10             ; после 9 — снова 0
        btfsc   STATUS,Z
        clrf    digit
        goto    Main

Delay1s
        movlw   .255
        movwf   d1
DL1     movlw   .255
        movwf   d2
DL2     nop
        nop
        nop
        nop
        decfsz  d2,f
        goto    DL2
        decfsz  d1,f
        goto    DL1
        return

        END
