;***********************Leírás*************************************************
;
;******************Config**********************************

	LIST	P=PIC16F1937		;a PIC típusát közöljük a fordítóval
	INCLUDE	<P16F1937.INC>		;beépülő fájl megadása, ez a fájl tartalmazza a pl. a lenti CONFIG utasításokat
	ERRORLEVEL	0,	-302, -305	;a fordítás során ha pl. bankot váltunk, üzeneteket dob a fordító, ezeket így lehet kikapcsolni
	
	 __CONFIG _CONFIG1, 0x3FFF & _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
	 __CONFIG _CONFIG2, 0x3FFF & _WRT_OFF & _VCAPEN_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_25 & _LVP_OFF
	
;********************Változók******************************
	CBLOCK	0x20		;a későbbi használatot megkönnyebítendő a memória egyes részeinek
	count				;külön nevet adunk. Így tudunk pl. megszakításkor fontos regiszter
	count1           	;értékeket elmenteni
	counta
	countb
	count2
	endc

	
	ORG 0x0000		;reset vektor címe (0x0000) amikor áramot kap a PIC, az itt elhelyezett
	goto	Setup	;utasítást hajtja végre először. Ez most a Setup címkére ugrás.
	
;********************Megszakítás***************************
;ez most nem kell
;*********************Main*********************************	
Setup						;az adatlap 27. oldalán látod, hogy 15 BANK-ra van osztva a memória. Több regiszter csak bizonyos bankból érhető el
	banksel	TRISA			;célszerű a banksel utasítás használata, így nem kell folyton megnézni az adatlapot, hogy az éppen használni kívánt regiszter
							;melyik bankban van.
	clrf	TRISA			;minden láb kimenet. a CLRF utasítás azt jelenti, hogy töröljük a regisztert, vagyis minden bit 0 lesz.
	clrf	TRISB			;ha a TRIS regiszter egy bitje 0 akkor az a láb kimenet, ha 1 akkor bemenet
	clrf	TRISC
	clrf	TRISD
	clrf	TRISE			;a PIC egyik fő regisztere a W. A legtöbb regiszterbe nem lehet közvetlenül értéket tölteni. Ezért először W-be töltjök az értéket
							;és aztán töltjük át a kívánt regiszterbe
	movlw	b'00000110'		;értéket töltönk a W regiszterbe
	banksel	ADCON1			;
	movwf	ADCON1			;W regiszter tartalmát áttöltjük az ADCON1 regiszterbe. Minden láb digitális
	banksel	ANSELA			;az ANSEL regiszter felelős azért, hogy egy bemenet analóg vagy digitális legyen. 
	clrf	ANSELA
	clrf	ANSELB

	clrf	ANSELD
	clrf	ANSELE

	BANKSEL	PORTA			;BANK0
	clrf	PORTA			;minden kimenetet alacsony szintre állítunk
	clrf	PORTB
	clrf	PORTC
	clrf	PORTD
	clrf	PORTE
	
Villog
	bsf		PORTA,4			;PORTA 4 lábát (6. láb) magas szintre állítjuk
	call	Kesleltet255	;meghívjuk a Kesleltet255 szubrutint
	bcf		PORTA,4			;PORTA 4 lábát (6. láb) alacsony szintre állítjuk
	call	Kesleltet255	;meghívjuk a Kesleltet255 szubrutint
	goto	Villog			;A Villog címkéhez ugrunk (előről kezdjük)
	
;********************************************************	
Kesleltet255
     movlw   0xff             ; A késleltetés 255ms.
     goto    K0
Kesleltet100
     movlw   d'100'           ; A késleltetés 100ms.
     goto    K0
Kesleltet50
     movlw   d'50'            ; A késleltetés 50ms.
     goto    K0
Kesleltet20
     movlw   d'20'            ; A késleltetés 20ms.
     goto    K0
Kesleltet5
     movlw   0x01             ; A késleltetés 5.000 ms (4 MHz órajel).
K0
	 movwf   count1
K1
     movlw   0xC7             ; A késleltetés 1ms.
     movwf   counta
     movlw   0x01
     movwf   countb
Kesleltet_0
     decfsz  counta,f			;a regiszter értékét csökkenti, ha eléri a 0-át, akkor a következő utasítást átugorja
     goto    T1
     decfsz  countb,f
T1
     goto    Kesleltet_0

     decfsz  count1,f
     goto    K1
     return


	END
	
	