	list P=16F877
	#include <p16f877.inc>
	__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _LVP_OFF
			cblock	0x70
				W_ment
				STAT_ment
				T			
				timer1
				timer2
				timer3
				irany
			endc

			org 0
			goto Start
			
			org 4
			movwf	W_ment
			movfw	STATUS
			movwf	STAT_ment


			btfsc	T,0			
			goto	nullaz		;ha a T 1, kinullázza
			goto 	beall		;ha a T 0, beállítja

tovabb		movfw	STAT_ment	;ide jövünk vissza
			movwf	STATUS
			movfw	W_ment
			
			bcf		INTCON,INTF
			retfie
			

Start		nop
			bcf		STATUS,C
			bsf		STATUS,RP0	;BANK 1 kiválasztása
			bcf		STATUS,RP1	
			movlw	0x00
			movwf	TRISD		;D port minden lába kimenet
			movlw	0x01
			movwf	TRISB
			bsf		OPTION_REG,INTEDG
			bcf		STATUS,RP1
			bcf		STATUS,RP0	;bank0 kiválasztása
			movlw	B'00000001'
			movwf	PORTD		;első LED kigyújtása
			bsf		T,0			;T 0. bitje 1-be
			bsf		irany,0		;irany 0. bitje 1-be
			bsf  	INTCON,INTE   
			bsf		INTCON,GIE	;megszakítások engedélyezése
			


null		btfss	T,0				;megnézi a T(eszt) bitet
			goto	loop			;ha 0, pihenni megy
			
			movlw	b'00000001'		;ha nem, kigyújtja az 1. LED-et
			movwf	PORTD

			call	delay			;késlelteés
		
			btfss	irany,0			;irány vizsgálata
			goto	het
			goto	egy

			
egy			btfss	T,0
			goto	loop

			movlw	b'00000010'
			movwf	PORTD

			call	delay	

			btfss	irany,0
			goto	null
			goto	ketto


ketto		btfss	T,0
			goto	loop

			movlw	b'00000100'
			movwf	PORTD

			call	delay	

			btfss	irany,0
			goto	egy	
			goto	harom	
	

harom		btfss	T,0
			goto	loop
			
			movlw	b'00001000'
			movwf	PORTD

			call	delay	

			btfss	irany,0
			goto	ketto
			goto	negy
	

negy		btfss	T,0
			goto	loop

			movlw	b'00010000'
			movwf	PORTD

			call	delay	

			btfss	irany,0
			goto	harom
			goto	ot
			

ot			btfss	T,0
			goto	loop
			
			movlw	b'00100000'
			movwf	PORTD

			call	delay	

			btfss	irany,0
			goto	negy
			goto	hat
			

hat			btfss	T,0
			goto	loop

			movlw	b'01000000'
			movwf	PORTD

			call	delay
			
			btfss	irany,0
			goto	ot
			goto	het
			

het			btfss	T,0
			goto	loop

			movlw	b'10000000'
			movwf	PORTD

			call	delay	

			btfss	irany,0
			goto	hat
			goto	null
	
			
loop		btfsc	T,0			;ha T 0, áll a loopban
			goto	vizsgal		;ha T 1, megnézi, hol áll
			goto 	loop

nullaz		bcf		T,0			;nulláz
			goto tovabb			;interrup mezőre visszatér
			
beall		bsf		T,0			;Teszt bitet 1-be beállítja, irányt váltja
								
			btfsc	irany,0		;ha a irany 1, kinullázza
			goto	inullaz
			goto 	ibeall		;ha a irany 0, beállítja

inullaz		bcf		irany,0			;nulláz
			goto 	tovabb			;iterrupt mezőre visszatér

ibeall		bsf		irany,0			;beállít
			goto 	tovabb			;interrupt mezőre visszatér


delay		movlw	0x0F		
			movwf	timer1
			
t1			movlw	0xFF
			movwf	timer2

t2			movlw	0x10		
			movwf	timer3


t3			decfsz	timer3,f		;Csökkenti a T3-at, addíg, amig nem nulla
			goto	t3				; mindig visszaugruk a t3-ra
			decfsz	timer2,f		;Ha már nulla, akkor ugyanez eljátszódik a t2-vel
			goto	t2
			decfsz	timer1,f		;Majd a t1-el is
			goto	t1
			btfss	T,0
			goto	loop
			return

vizsgal		btfsc	PORTD,0			;az éppen aktuális LED-re térünk vissza
			goto	null			

			btfsc	PORTD,1
			goto	egy
			
			btfsc	PORTD,2
			goto	ketto

			btfsc	PORTD,3
			goto	harom

			btfsc	PORTD,4
			goto	negy
			
			btfsc	PORTD,5
			goto	ot
			
			btfsc	PORTD,6
			goto	hat

			btfsc	PORTD,7
			goto	het
		
			end