;***************************************************************
;						PROGRAM NÉV
;***************************************************************
;Program: PIC16F628A
;
;LÁBKIOSZTÁS
;Lábszám	Port		Funkció
; 1			RA2
; 2			RA3
; 3			RA4
; 4			RA5/MCLR
; 5			VSS 0V
; 6			RB0/INT
; 7			RB1			RS	L=0 parancs 4 láb		
; 8			RB2			R/W	L=0 írás    5
; 9			RB3			Enable H-L
;10			RB4			DB4
;11			RB5			DB5
;12			RB6			DB6
;13			RB7			DB7	
;14			VDD 5V
;15			OSC2
;16			OSC1
;17			RA0
;18			RA1

;***************************************************************
;===============================================================
;PROCESSOR TIPUSMEGADÁSA
;===============================================================
 LIST P=16F628A 
 #INCLUDE "P16F628A.INC" 

;===============================================================
;KONFIGURÁCIÓS SZÓ
;===============================================================
 __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF 

;===============================================================
;BANKHIBAJELZÉS ELNYOMÁSA A FORDÍTÓBAN 
;===============================================================
 errorlevel -302 			
 errorlevel -305 			

;===============================================================
;VÁLTOZÓK DEKLARÁLÁSA
;===============================================================
	CBLOCK 0x20 		
	ADAT
	TEMP0
	ENDC

;===============================================================
;DEFINÍCIÓK
#DEFINE		EN	PORTB,3	;LCD ENABLE	6
#DEFINE		RW	PORTB,2	;LCD R/W	5
#DEFINE		RS	PORTB,1	;LCD RS		4	

;===============================================================
;BEMENETEK


;KIMENETEK

;===============================================================
;MAKRÓK
;===============================================================
;===============================================================
;PROGRAM VEKTOR
;===============================================================
	ORG	0 
	GOTO START


;===============================================================
;ALAPBEÁLLÍTÁSOK
;===============================================================
START
	CLRF	PORTA			;komparátor kikapcsolás
	MOVLW	0x07
	MOVWF 	CMCON 		
				
	BANKSEL	TRISA
	MOVLW	B'00000000' 	;1=Bemenet
	MOVWF	TRISA 			;PORT BEÁLLÍTÁSA
	MOVLW	B'00000000' 	;
	MOVWF	TRISB			;PORT BEÁLLÍTÁSA
	BANKSEL	PORTB
;Parancskódok betöltése
	call	init_lcd
	MOVLW	A'T'
	call	lcd_char
	goto	vege

;--------------------------------------------
;            LCD inicializálás
;--------------------------------------------
init_lcd 
;------------------------------
	MOVLW	.151
	CALL Delay_100us	;15 ms várakozás

	MOVLW	B'00110000'
	CALL	lcd_cmd8	;0011 kiküld 8bit	

	MOVLW	.42
	CALL Delay_100us	;4,1 ms várakozás

	MOVLW	B'00110000'
	CALL	lcd_cmd8	;0011 kiküld 8bit

	MOVLW	.1
	CALL Delay_100us	;100 us várakozás

	MOVLW	B'00110000'
	CALL	lcd_cmd8	;0011 kiküld 8bit

	MOVLW	B'00100000'
	CALL	lcd_cmd8	;0010 kiküld 8bit

	MOVLW	B'00101000'	;function set 4bit  2 sor 5x7
	CALL	lcd_cmd

;0000 kiküld 4bit
;1000 kiküld 4bit display off
	MOVLW	B'00001111'
	CALL	lcd_cmd

	MOVLW	B'00000001'	;clear display
	CALL	lcd_cmd

;0000 kiküld 4bit	entry mode
;0110 ID S kiküld 4bit 
	MOVLW	B'00000110'
	CALL	lcd_cmd
	RETURN





;---------------------------------------------------------------
;                       Karakter küldése
;---------------------------------------------------------------
lcd_char                                            
	MOVWF	ADAT			;W regiszter mentése
	ANDLW	0xF0			;Az alsó bitek nullázása
	ADDLW	0x0A			;Az EN és az RS bitek bekapcsolása
	MOVWF	PORTB			;Kiírás a portra H nibble
	NOP						;RWM hiba kiküszöbölésére
	BCF		EN				;H nible beirás engedély
	MOVLW	.8
	CALL 	Delay_100us		;Várakozás
	SWAPF	ADAT,W			;W visszaállítása a nible cseréjével
	ANDLW	0xF0			;Az alsó bitek nullázása
	ADDLW	0x0A			;Az EN és az RS bitek bekapcsolása
	MOVWF	PORTB			;Kiírás a portra L nibble
	NOP						;RWM hiba kiküszöbölésére
	BCF		EN				;L nible beirás engedély
	MOVLW	.8
	CALL 	Delay_100us		;Várakozás
	RETURN                  ;Vissza a hívás utáni sorra                             

;---------------------------------------------------------------
;                       Parancs küldése
;---------------------------------------------------------------
lcd_cmd	;4 bites
	MOVWF	ADAT			;W regiszter mentése
	ANDLW	0xF0			;Az alsó bitek nullázása
	ADDLW	0x08			;Az EN bit bekapcsolása
	MOVWF	PORTB			;Kiírás a portra H nibble
	NOP						;RWM hiba kiküszöbölésére
	BCF		EN				;H nible beirás engedély
	MOVLW	.23
	CALL 	Delay_100us		;Várakozás
	SWAPF	ADAT,W			;W visszaállítása a nible cseréjével
	ANDLW	0xF0			;Az alsó bitek nullázása
	ADDLW	0x08			;Az EN bit bekapcsolása
	MOVWF	PORTB			;Kiírás a portra L nibble
	NOP						;RWM hiba kiküszöbölésére
	BCF		EN				;L nible beirás engedély
	MOVLW	.23
	CALL 	Delay_100us		;Várakozás
	RETURN                                               
;---------------------------------------------------------------
lcd_cmd8	;8 bites
	MOVWF	ADAT			;W regiszter mentése
	MOVWF	PORTB			;Kiírás a portra
	BSF		EN				
	NOP
	NOP
	BCF		EN				
	MOVLW	.23
	CALL 	Delay_100us		;Várakozás
	RETURN                                               
;--------------------------------------------

Delay_100us
    MOVWF   TEMP0           
	MOVLW   6*(.4000000)/.1000000          
    ADDLW   -1              
    BTFSS   STATUS, Z       
    GOTO    $ - 2           
    DECFSZ  TEMP0, f        
    GOTO    $ - 5           
	RETURN

Delay_7us
;11+(TEMPO*7)usec
	MOVWF	TEMP0
    MOVLW   .1
    ADDLW   -1              
    BTFSS   STATUS, Z       
    GOTO    $ - 2           
    DECFSZ  TEMP0, f        
    GOTO    $ - 5           
	RETURN

vege
	GOTO	vege
	END