; A program neve: ENYÉM
;
; Ez a program a saját fejlesztésű gyakorló panelre íródott
; Rendeltetése: Futófény megvalósítása lépésről lépésre 4 LED Diódával

 LIST P=16F877A
 #INCLUDE "P16F877A.INC"
 ; -------------------------------------------------------------------------------------------------------
 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _LVP_OFF
	;RADIX DEC
; --------------------------------------------------------------------------------------------------------
	CBLOCK	0x20			           ;A 0x20 egy szabad memória rész kezdő címe
	T1                                               ; 
	T2
	T3
	ENDC
; -------------------------------------------------------------------------------------------------------------------------------------------------------------
	ORG	0
; -------------------------------------------------------------------------------------------------------------------------------------------------------------
START
	BSF	STATUS,RP0			;BANK1-be átlépünk
; --------------------------------------------------------------------------------------------------------------------- PORTA Digitális I/O-vá tétel
	MOVLW	0x06			
	MOVWF	ADCON1			;Mindegyik PORTA digitális
	MOVLW	B'00011111'		;Betöltjük az akkumulátorba a TRISA-ba irandó adatot
	MOVWF	TRISA			;Beállítjuk a PORTA-t bemenetre (beírjuk a TRISA-ba)
	
; ----------------------------------------------- A "D" port tulajdonságának beállítása (kimenet legyen)---------------------------
	
	MOVLW	B'00000000'		;Betöltjük az akkumulátorba a TRISD-be valót
	MOVWF	TRISD                           ; Akkumulátorból áttöltjük az F regiszterbe
	BCF	STATUS,RP0			;BANK0-ba visszalépünk
; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FUTOFENY                                                ;Ez egy label....(cimke)
	MOVLW	B'10000001'		;Betöltjük a W-be (akkumulátorba) a kirandó adatot
	MOVWF	PORTD	            	; az Akkumulátorból  az F regiszterre kiírjuk a  az előzőleg bevitt adatot (PORTD-re)
	CALL	DELAY			; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét)
;-------------------------
	CLRW    PORTD                            ; A "W" nullázása
	MOVLW	B'01000010'		; Betöltjük a W-be az új adatot
	MOVWF	PORTD			; Mozgasd az előzőleg W-be töltött adatot az F Regiszterbe,
	CALL	DELAY                          ; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét)
; ------------------------
	CLRW    PORTD                             ; A "W" nullázása
	MOVLW	B'00100100'                   ; Betöltjük a W-be az új adatot 
	MOVWF	PORTD                         ; Mozgasd az előzőleg W-be töltött adatot az F Regiszterbe,   
	CALL	DELAY                          ; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét) 
; -------------------------
	CLRW    PORTD                            ; A "W" nullázása
	MOVLW	B'00011000'                   ; Betöltjük a W-be az új adatot
	MOVWF	PORTD                         ; Mozgasd az előzőleg W-be töltött adatot az F Regiszterbe,
	CALL	DELAY                           ; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét) 
; -------------------------
	CLRW    PORTD                            ; A "W" nullázása
	MOVLW	B'00100100'                   ; Betöltjük a W-be az új adatot
	MOVWF	PORTD                         ; Mozgasd az előzőleg W-be töltött adatot az F Regiszterbe,
	CALL	DELAY                          ; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét) 
; -------------------------
	CLRW    PORTD                            ; A "W" nullázása
	MOVLW	B'01000010'                   ; Betöltjük a W-be az új adatot
	MOVWF	PORTD                         ; Mozgasd az előzőleg W-be töltött adatot az F Regiszterbe,
	CALL	DELAY                          ; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét) 
; -------------------------------
	CLRW    PORTD                            ; A "W" nullázása
	MOVLW   B'10000001'                  ; Betöltjük a W-be az új adatot
	MOVWF   PORTD                         ; Mozgasd az előzőleg W-be töltött adatot az F Regiszterbe, 
	CALL    DELAY	                       ; Meghívjuk a Delay szubrutint ( várunk, hogy láthassuk a LED fényét)
; ----------------------------------------------------------------------------------------------------------------------
	
	GOTO	FUTOFENY		;Visszaugrunk a FUTOFENY cimkére
; -----------------------------------------------------------------------------------------------------------------------
DELAY						;Delay labelje
	MOVLW	d'80'			; Betöltti decimális 80-at a W akkumulátorba
	MOVWF	T1				; Akkumulátorból áttölti T1-be kerül 
DEL
	MOVLW	d'25'                        ; Betölti az akkumulátorba a Decimális 25-öt
	MOVWF	T2				;Akkumulátorból T2-be áttölti a 25-öt
DEL1
	MOVLW	d'20'                        ; Akkumulátorba betölti a Decimális 20-at
	MOVWF	T3				; áttölti T3-ba az akkumulátorból a  20-at
DEL2
	NOP                                       ;Nem csinál semmit várakozik
        DECFSZ	T3,f			       ;Csökkenti a T3-at, addíg, amig nulla nem lesz,ha F=0, akkor ugrik
	GOTO	DEL2			; mindig visszaugruk a DEL2-re, vagyis a NOP-ra
	DECFSZ	T2,f			       ;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
	GOTO	DEL1                      ; Vissza ugrik DEL1 szubrutinra
	DECFSZ	T1,f			       ;Majd a T1-el is
	GOTO	DEL                        ; Visszaugrik DEL szubrutinra
	RETURN			        ;Visszatér a DELAY szubrutinból
; ------------------------------------------------------------------------------------------------------------------ 
 	END					;Teljes program végét jelentő END