 LIST P=16F877
 #INCLUDE "P16F877.INC"
 __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
	CBLOCK	0x20			;A 0x20 egy szabad memória rész kezdő címe
	T1
	T2
	T3
	WORK_SAVE
	ENDC

	ORG	0

START
	BSF	STATUS,RP0			;BANK1-be átlépünk
	;PORTA Digitális I/O-vá tétel
	MOVLW	B'00000000'			
	MOVWF	ADCON1			;Mindegyik PORTA analog,REFERENCIA A VDD ÉS A VSS
	MOVLW	B'00111111'		;Betöltjük az akksiba a TRISA-ba irandót MINEN INPUT
	MOVWF	TRISA			;Beállítjuk a PORTA-t bemenetre (beírjuk a TRISA-ba)
	MOVLW	B'00000000'		;Betöltjük az akksiba a TRISD-be valót
	MOVWF	TRISD			;Beletöltjük (mind kimenet a nulla miatt)
	BCF		STATUS,RP0		;BANK0-ba visszalépünk
	MOVLW	B'10000001'			
	MOVWF	ADCON0			;FOSC/32 KIVÁLASZTVA,RA0 VIZSGÁLATA,KONVERTER BEKAPCSOLVA

	CLRC					;TÖRÖLJÜK A TÚLCSORDULÓ PUTTONYT
	MOVLW	B'10000000'		;Betöltjük a W-be (akkumulátorba) a kirandó adatot
	MOVWF	PORTD			;Akkumulátorból kiírjuk a PORTD-re

FUTOFENY					
	CALL	DELAY			;Várunk
	RRF		PORTD			;ROTÁLJUK JOBBRA A PORTB-T
	MOVWF	WORK_SAVE		;ELMENTJÜK A WORKOT
	BSF		ADCON0,GO		;ELINDITJUK AZ A/D KONVERZIOT
	BTFSS	ADCON0,GO		;VIZSGÁLJUK HOGY ELKÉSZÜLT-E
	GOTO	$-1				;VÁRUNK AZ ELKÉSZÜLÉSIG
	MOVF	ADRESH			;EREDMÉNYT KIIRJUK A WORKBE
	ADDLW	D'1'			;HOZZÁADUNK 1-T
	MOVWF	T2				;EREDMÉNYT BETESSZÜK A T2 BE
	MOVF	WORK_SAVE		;VISSZATÖLTJÜK A LEMENTETT WORKOT
	BTFSS	PORTD,0			;HA A FUTOFÉNY ELÉRT A SZÉLÉRE AKKOR KIHAGYJA A KÖVETKEZÖ SORT
	GOTO	FUTOFENY		;Visszaugrunk a FUTOFÉNY LABELRE

FUTOFENYB
	CALL	DELAY			;Várunk
	RLF		PORTD
	MOVWF	WORK_SAVE
	BSF		ADCON0,GO
	BTFSS	ADCON0,GO
	GOTO	$-1
	MOVF	ADRESH
	ADDLW	D'1'
	MOVWF	T2
	MOVF	WORK_SAVE
	BTFSS	PORTD,7
	GOTO	FUTOFENYB		;Visszaugrunk a legelejére
	GOTO	FUTOFENY


DELAY						;Delay labelje
	MOVLW	d'10'			
	MOVWF	T1				;T1-be bekerül a 200
DEL
	;T2
DEL1
	MOVLW	d'20'
	MOVWF	T3				;T3-ba bekerült a 10
DEL2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	T3,f			;Csökkenti a T3-at, addíg, amig nem nulla
	GOTO	DEL2			; mindig visszaugruk a DEL2-re, vagyis a sok NOP-ra
	DECFSZ	T2,f			;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
	GOTO	DEL1
	DECFSZ	T1,f			;Majd a T1-el is
	GOTO	DEL
	RETURN					;Visszatér a DELAY szubrutinból
 	END						;Teljes program végét jelentő END