;PROCESSOR TIPUSMEGADÁSA
 LIST P=16F628A 
 #INCLUDE "P16F628A.INC" 
 errorlevel -302 ;BANKHIBAJELZÉS ELNYOMÁSA A FORDÍTÓBAN
 errorlevel -305 ;

;KONFIGURÁCIÓS SZÓ
 __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF 

;VÁLTOZÓK DEKLARÁLÁSA
	CBLOCK 0x20 ;ITT KEZDŐDIG A MEMÓRIA
	LCD_DELAYus               ;  DELAY_10us rutinhoz
	LCD_DELAYms               ;  DELAY_10ms rutinhoz
	kesletet
	TEMPB					  ;  PORTB állapotmentés
	ENDC

;BEMENETEK 
;port	lábszám	leírás
;RB0	6		Megszakítás gombnyomáskor
;RB1	7		Nyomógomb
;RB2	8		Nyomógomb
;RB3	9		Nyomógomb
;RB4	10		Nyomógomb	
;RB5	11		Nyomógomb
;RB6	12		Nyomógomb

;KIMENETEK 
;port	lábszám	leírás
;RA0	17		LED
;RA1	18		LED
;RA2	1		LED
;RA3	2		LED
;RA4	3		LED
;RB7	13		LED


;================================================================

	ORG	0 
	GOTO START
;================================================================
;                     MEGSZAKÍTÁSI RUTIN
;================================================================
	ORG	4               ;Megszakítás kezdete
	MOVFW	PORTB		;Elmentjük a portb állapotát
	MOVWF	TEMPB		;PORTB állapota ebbe kerül
	BCF	INTCON,INTE		;Külső megszakítás tiltása
	BCF		INTCON,INTF	;Flag törölni kell mert baj lesz.
	CALL	gombok		;Lekezeljük a gombnyomást
 	BSF	INTCON,INTE		;Külső megszakításengedélyezés
	RETFIE              ;Megszakítás vége
;===============================================================
START	

	CALL	MEMBANK0
	CLRF	PORTA
	MOVLW	0x07
	MOVWF 	CMCON 		;KOMPARÁTOROK KIKAPCSOLÁSA 
	
	CALL	MEMBANK1
	MOVLW	B'00000000' ;Kimenet 
	MOVWF	TRISA 		;PORT BEÁLLÍTÁSA
	MOVLW	B'01111111' ;1 ki + 7 bemenet
	MOVWF	TRISB		;PORT BEÁLLÍTÁSA
	CALL	MEMBANK0


 	BSF	INTCON,GIE	;Általános megszakításengedélyezés
 	BSF	INTCON,INTE	;Külső megszakításengedélyezés

ide

	goto ide

;================================================================
;                      Gombkezelés rutin
;================================================================
gombok

	BTFSC	TEMPB,1		;Megnézzük melyik volt megnyomva
	GOTO	gombmute	
	BTFSC	TEMPB,2
	GOTO	gombuzem	
	BTFSC	TEMPB,3
	GOTO	gomb1	
	BTFSC	TEMPB,4
	GOTO	gomb2	
	BTFSC	TEMPB,5
	GOTO	gomb3	
	BTFSC	TEMPB,6
	GOTO	gomb4	
	GOTO	vege		;Ha egyik sem akkor vége 



gombmute
	BSF		PORTA,0
	GOTO	vege
gombuzem
	BSF		PORTA,1
	GOTO	vege
gomb1
	BSF		PORTA,2
	GOTO	vege
gomb2
	BSF		PORTA,3
	GOTO	vege
gomb3
	BSF		PORTA,4
	GOTO	vege
gomb4
	BSF		PORTB,7
	GOTO	vege

;vizsgálat, hogy még be van -e nyomva valamelyik gomb
;ha bevan akkor nem megyünk vissza a megszakításhoz
;csak ha elengedték.
;teszt
;	MOVFW	PORTB		;Elmentjük a portb állapotát és hozzáadunk
;	ADDLW	0x00		;nullát
;	BTFSS	STATUS,2	;ha a status z=0 akkor mehet vissza
;	goto	teszt		;tesztelni

vege
	RETURN
;******************************************************
;			KÉSLELTETÉS 10 us és 772 us KÖZÖTT
;
;Késleltetés = (10 + (LCD_DELAYus * 3))-3 us
;Érték       = ((us+3)-10)/3
;Ha nem lehet pontos értéket állítani, akkor értékadás
;és a call utasítás közé kellő számú nop utasítás kell.
;A rutinhoz tartozó változó : LCD_DELAYus
;******************************************************
DELAY_10us	
 	movwf   LCD_DELAYus  
	nop
	nop 
	decfsz  LCD_DELAYus, F 
 	goto    $-1 
	return
;******************************************************
;			KÉSLELTETÉS 18 us és 197 ms KÖZÖTT
;
;Késleltetés = (us*LCD_DELAYms)+((LCD_DELAYms*2)-2)+8 us
DELAY_ms
	movwf   LCD_DELAYms  
	movlw	D'96'	;301 us
	call	DELAY_10us
	decfsz  LCD_DELAYms, F 
 	goto    $-2 

	return
;******************************************************

 #INCLUDE "BANK.INC" 

	END 
