;**************************************************************************
; tut1_4_led.asm - Nigel Goodwin - Legutóbb módosítva: 2017.08.22.        *
;**************************************************************************
; Tesztprogram IR-kapuhoz (Kisszabó)                                      *
;**************************************************************************

    ;Following is the code to switch on alternate LEDs for 1 seconds
;**************************************************************************
; 8 LED vezérlése 74HC595 shift-regiszterrel.
;****_***|***|**_*************_********************************************

     LIST       p=16F628A     ; A processzor típusát közli az assemblerrel
     #include  <P16F628A.inc> ; Alapértelmezett beállítások a chip-hez
     ERRORLEVEL 0,-302        ; Elnyomja a bank-váltás üzeneteit
     __config   _BODEN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

     CBLOCK  0x20
         TX ;
         COUNTSPI
         d1
         d2
         d3
     ENDC

     #define DATA1 PORTA,0
     #define CLOCK PORTA,1
     #define LATCH PORTA,2
     
     ORG     0x0000
     GOTO    MAIN

     #include "HC595.INC"     ; Thanks to Nebojsa Matic
                              ; of mikroElektronika for idea

MAIN
     MOVLW   0x07
     MOVWF   CMCON

     BSF     STATUS,RP0
     MOVLW   B'00000'
     MOVWF   TRISA
     BCF     STATUS,RP0
     CLRF    PORTA

LUPHR
     CLRF    PORTA
     MOVLW   B'10101010'
     MOVWF   TX
     HC595   TX,COUNTSPI
     CALL    DELAY1s
     CLRF    PORTA
     MOVLW   B'01010101'
     MOVWF   TX
     HC595   TX,COUNTSPI
     CALL    DELAY1s
     GOTO    LUPHR

DELAY1s                       ; 1 sec delay
     MOVLW   0x07             ; 999990 cycles
     MOVWF   d1
     MOVLW   0x2F
     MOVWF   d2
     MOVLW   0x03
     MOVWF   d3
Delay_01
     DECFSZ  d1, f
     GOTO    $+2
     DECFSZ  d2, f
     GOTO    $+2
     DECFSZ  d3, f
     GOTO    Delay_01

     GOTO    $+1              ; 6 cycles
     GOTO    $+1
     GOTO    $+1

     RETURN                   ; 4 cycles (including call)

     END
