;************************************************************************
;LCD KEZELÉS
;************************************************************************
;-------------------------------------------------------------------------------
LIST P=16F877	
INCLUDE "P16F877.INC"
__CONFIG	_CP_OFF&_DEBUG_OFF&_WRT_ENABLE_ON&_CPD_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC  
;
;-------------------------------------------------------------------------------
RADIX DEC			;ALAPBÓL A SZÁMOK DECIMÁLISAK
;------------------[ I/O PORTOK ]----------------------------------
;#DEFINE GOMB	PORTB,0
;------------------[ VÁLTOZÓK ]------------------------------------
delayctr_A	equ	0x20
delayctr_B	equ	0x21
delayctr_C	equ	0x22
delayctr_tmpa	equ	0x23
delayctr_tmpb	equ	0x24
delayctr_tmpc	equ	0x25
TIMER1		EQU	0X26
TIMER2		EQU	0X27
COUNTER	EQU	0X28
POINTER		EQU	0X29
busy_count	EQU	0X30

;-------------------------------------------------------------------------------
MAIN:	ORG	0X0003		;AZ ELSŐ HÁROM BÁJT FOGLALT A LOADERNEK

;-------------------------------------------------------------------------------
; PORTB kivezetések
;	0 TÓL 7 IG DATA PIN
;-------------------------------------------------------------------------------
; PORTE kivezetések
RS           equ	0             ; 0= utasítás, 1= adat reg. választás
RDWD	equ	1	; R/W=0 LCD írás, R/W=1 LCD memória olvasás
EN           equ	2             ; 0= LCD tiltás, 1= engedélyezés
;-------------------------------------------------------------------------------
;*****************************************************************************************************

;-------------------------------------------------------------------	PORT BEÁLLÍTÁSOK
INI_PORT
	BANKSEL	TRISD
	movlw	06
	movwf	ADCON1		; mind digitalis bemenet !!!
	clrf	TRISA		; PORTA kimenet
	CLRF	TRISC		
	CLRF	TRISD
	CLRF	TRISE	
	BANKSEL	PORTD	
	CLRF	PORTC		
	CLRF	PORTD		
	CLRF	PORTE
;-------------------------------------------------------------------	LCD TÁBLÁT ÁTUGORJUK
	GOTO	START
;-------------------------------------------------------------------	LCD TÁBLA
LCD1_Tabla	ADDWF	PCL,1
		dt	"LCD TESZT"
;-------------------------------------------------------------------	LCD INICIALIZÁLÁS
START
INII_LCD       
	bcf     PORTE,RS
	movlw   38h             ; 56 111000    8 bit 2 soros
	call    Write
	movlw   38h
	call    Write
	movlw   06h             ; 6 110    Entry mode set: increment
	call    Write
	movlw   0ch             ; 12 1100  Display on, cursor/blink off
	call    Write
	movlw   10h             ; 16 10000  Display/cursor shift: cursor
	call    Write

;    	 movlw   01h             ; 1 1  Display clear
;   	 call    Write
;    	 movlw   0X0F             ; villogó kurzor
;    	 call    Write
;   	movlw   0X80             ; ELTOLÁS 80+N
;	call    Write
;	MOVLW	0X18		; KURZOR JOBBRA LÉP 1 ET
;	CALL	WR_DAT
;	MOVLW	0X1C		; KURZOR BALRA LÉP 1 ET
;	CALL	WR_DAT
;-------------------------------------------------------------------	FŐPROGRAM
ELEJE
              		movlw   128             ; 1. sor kezd 128
;		movlw   192             ; 2. sor kezd 192
		call	WR_IR

		movlw	9		; 9 adat kiiratása
		movwf	COUNTER
		CLRF	POINTER		; KARAKTERMUTATÓ = 0
Start1		
		movf	POINTER,0	;POINTER ÉRTÉKE W BE KERÜL
		call	LCD1_Tabla
                	call    WR_DATA
		incf	POINTER,1	; KÖVETKEZŐ KARAKTER
		decfsz	COUNTER,1	; HA MARADÉK KARAKTER = 0 AKKOR MEGYÜNK TOVÁBB, HA NEM AKKOR KÖVETKEZŐ KARAKTER 
		goto	Start1

;-------------------------------------------------------------------	PROGI VÉGE, VÉGTELEN CIKLUS
var
NOP
goto var
;-------------------------------------------------------------------	LCD UTASÍTÁS	
WR_IR
	        	BCF	PORTE,RS	; LCD parancs következik
	        	BCF	PORTE,RDWD	; LCD parancs következik
		CALL	Write
		RETURN
;-------------------------------------------------------------------	LCD KARAKTER
WR_DATA
		bsf	PORTE,RS	; LCD adat következik
		bcf	PORTE,RDWD	; LCD adat következik
;-------------------------------------------------------------------	LCD KIIRÁS
Write		
		movwf   PORTD

		bsf     PORTE,EN
		NOP
  		bcf     PORTE,EN

	;	CALL	DELAY		; kÉSLELTETÉS HA NEM KELL A BUSY FIGYELÉSE
		
		CALL	R_BUSY 		; BUSY FIGYELÉSE
 	        	return
;-------------------------------------------------------------------	KÉSLELTETÉS
DELAY
	       	 movlw   255	
                	movwf   TIMER1
 		movlw   2		
               	movwf   TIMER2
Kesl		
		decfsz  TIMER1,1
                	goto    Kesl
		decfsz  TIMER2,1
	              goto    Kesl
		return
;-------------------------------------------------------------------	BUSY ELLENŐRZÉSE
R_BUSY
		BANKSEL	TRISD
		MOVLW   0x0FF               
		MOVWF   TRISD
		BANKSEL	PORTD

		BCF	PORTE,RS	    
		BSF     PORTE,RDWD	   
		BSF     PORTE,EN	    
UJRA
		BTFSC	PORTD,7		; VÁRUNK MÍG A KIJELZŐ VÉGEZ
		GOTO	BUSYOK	
		GOTO    UJRA
BUSYOK
		BCF     PORTE,EN	   
		BANKSEL	TRISD
		CLRF    TRISD		    
		BANKSEL	PORTD
		RETURN

;-------------------------------------------------------------------
	END 			;PROGRAM VEGE