;=======================================================
; Проект 19. Точная задержка на таймере TMR0
; PIC16F84A, 4 МГц. Светодиод RB0 мигает с периодом 1 с
; TMR0 с предделителем 1:256 — опрос флага T0IF
;=======================================================
        LIST    p=16F84A
        #include <p16f84a.inc>
        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

        cblock  0x0C
        ovf                     ; счётчик переполнений
        endc

        ORG     0x000
        goto    Start

Start
        bsf     STATUS,RP0      ; банк 1
        clrf    TRISB           ; порт B — выходы
        movlw   b'00000111'     ; TMR0 от кварца, предделитель 1:256
        movwf   OPTION_REG
        bcf     STATUS,RP0
        clrf    PORTB

Main
        call    Delay500ms
        movlw   b'00000001'
        xorwf   PORTB,f         ; переключаем светодиод
        goto    Main

;--- 500 мс: 1 переполнение = 256*256 мкс = 65,5 мс ---
;--- нужно примерно 8 переполнений ---
Delay500ms
        movlw   .8
        movwf   ovf
Wait
        bcf     INTCON,T0IF     ; сбрасываем флаг
        clrf    TMR0            ; начинаем счёт с нуля
TWait
        btfss   INTCON,T0IF     ; ждём переполнения
        goto    TWait
        decfsz  ovf,f
        goto    Wait
        return

        END
