;************************************************************************
;#5
;Thowra
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
#define LCD_PORT PORTD
#define LCD_TRIS TRISD
#define RS PORTC,0
#define RDWD PORTC,1
#define EN PORTC,2
#define BUSY LCD_PORT,7
;------------------[ 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
POZ			EQU	0X31

;-------------------------------------------------------------------------------
MAIN:	ORG	0X0003		;AZ ELSŐ HÁROM BÁJT FOGLALT A LOADERNEK

;-------------------------------------------------------------------------------
; PORTB kivezetések
;	0 TÓL 7 IG DATA PIN
;-------------------------------------------------------------------------------
;PORTC 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
	CLRF	TRISB
	CLRF	TRISC		
	CLRF	TRISD
	
	BANKSEL	PORTD	
	CLRF	PORTB
	CLRF	PORTC		
	CLRF	PORTD		
;-------------------------------------------------------------------	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     RS
	   movlw   38h             ; 56 111000    8 bit 2 soros
                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

;-------------------------------------------------------------------	FŐPROGRAM
ELEJE
			movlw   128		; 1. sor kezd 128

			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	RS		; LCD parancs következik
	       	 BCF	RDWD		; LCD parancs következik
		 CALL	Write
		 RETURN
;-------------------------------------------------------------------	LCD KARAKTER
WR_DATA
		bsf	RS		; LCD adat következik
		bcf	RDWD		; LCD adat következik
;-------------------------------------------------------------------	LCD KIIRÁS
Write		
		movwf   PORTD
		bsf     EN
		CALL	DELAY
		bcf     EN
		CALL	R_BUSY 		; BUSY FIGYELÉSE
 	        	return
;-------------------------------------------------------------------	KÉSLELTETÉS
DELAY
	        	movlw   255	
            		movwf   TIMER1
 		movlw   2		
           		movwf   TIMER2

Kesl103		decfsz  TIMER1,1
            		goto    Kesl103

		decfsz  TIMER2,1
            		goto    Kesl103
		return
;-------------------------------------------------------------------	BUSY ELLENŐRZÉSE
R_BUSY
;--------------------------------	PORT BEÁLLÍTÁSA
		BANKSEL	TRISD
		MOVLW   0x0FF               
		MOVWF   TRISD
		BANKSEL	PORTD
;--------------------------------	VEZ. BITEK BEÁLLÍTÁSA
		BCF	RS	    
		BSF     RDWD	   
		BSF     EN
;--------------------------------	BUSY TESZTELÉSE	    
UJRA
		BTFSC	BUSY		; VÁRUNK MÍG A KIJELZŐ VÉGEZ
		GOTO	BUSYOK	
		GOTO    UJRA
BUSYOK
		BCF     EN
;--------------------------------	PORT VISSZAÁLLÍTÁSA
	   	BANKSEL	TRISD
		CLRF    TRISD	
		BANKSEL	PORTD
		CLRF	PORTD
;--------------------------------	R/W VISSZAÁLLÍTÁSA
		BCF     RDWD				 
		BSF     EN
		CALL	DELAY		
		BCF     EN

		RETURN

	
;-------------------------------------------------------------------
	END 			;PROGRAM VEGE

