LIST P=16F877

	ERRORLEVEL 1
	#INCLUDE	<P16F877.INC>

	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
	
    	ORG	0
	GOTO	INICIALIZÁLÁS

;---------------- 2010.12.19. "BANKIMAJKI" -------------

; *********** Seiko kijelzo életre keltése :D ***********
; PortC az adatbusz (8 biten) 
; PortA,0 eng. bit (EX) 
; PortA,1 (I/OC2) 
; PortA,2 (I/OC1)



;--------------------- MAKRÓK MEGADÁSA ----------------------

BANK0: MACRO
		BCF STATUS,RP0
		BCF STATUS,RP1
		ENDM

BANK1: MACRO
		BSF STATUS,RP0
		BCF STATUS,RP1
		ENDM

BANK2: MACRO
		BCF STATUS,RP0
		BSF STATUS,RP1
		ENDM

BANK3: MACRO
		BSF STATUS,RP0
		BSF STATUS RP1
		ENDM

ENG: MACRO	
		BANKSEL	PORTA	
		BSF	PORTA,0
		BCF	PORTA,0
		ENDM
ADAT: MACRO	
		BANKSEL	PORTC
		MOVWF	PORTC
		ENDM
KIÍR: MACRO
		ADAT
		ENG
		CALL	DELAY50us
		ENDM
 
;--------------------DEKLARÁLÁS------------------------

		CBLOCK	20H
		KÉSL1
		KÉSL2
		KEZDET
		DISPSTARTADDR
		ENDC

;-------------------- KÉSLELTETO RUTINOK ----------------------

;************ 4.0 MHz-es kvartz-cal **************
                                    	
DELAY50us		;KÉSL2*KÉSL1 (48 us)
	MOVLW	D'6'
	MOVWF	KÉSL2
XXX			 
			
	MOVLW	D'1'
	MOVWF	KÉSL1	
XXXX
	DECFSZ	KÉSL1
	GOTO	XXXX
	DECFSZ	KÉSL2
	GOTO	XXX	
				
	RETURN

DELAY1.5ms		;KÉSL2*KÉSL1 (1480 us)
	MOVLW	D'43'
	MOVWF	KÉSL2
YYY			 
			
	MOVLW	D'10'
	MOVWF	KÉSL1	
YYYY
	DECFSZ	KÉSL1
	GOTO	YYYY
	DECFSZ	KÉSL2
	GOTO	YYY	
				
	RETURN



;------------------------LCD KEZELÉS-----------------------

LCDINIT
		BANK0
		BCF	PORTA,0		;ENG
		BCF	PORTA,1		;I/OC2
		BCF	PORTA,2		;I/OC1
	
		CALL	DELAY1.5ms	;A TÁPFESZ STABILLÁ VÁLÁSÁRA VÁR
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms

		CALL	SD
		CALL	SF
		CALL	SE
		CALL	SU
		CALL	SB
		CALL	CH
		CALL	MA
		
		RETURN
	




;------------------PORTOK BEÁLLÍTÁSA--------------------
 
INICIALIZÁLÁS		
		BANK1
        	CLRF 	TRISC   	;KIMENET      	
   		CLRF 	TRISA        	;KIMENET
       		MOVLW 	B'00001111'    	;RA0-RA4 digitális kimenet
        	MOVWF 	ADCON1
		GOTO	START


;--------------------- Foprogram kezdete -------------------

START
		CALL	LCDINIT
		

;------------------------SZÖVEG KIÍRATÁS---------------------

SZÖVEG

		CALL	WS		;KEZDO CÍM

		BCF	PORTA,2		;I/OC1-->0	
		BSF	PORTA,1		;I/OC2-->1
		MOVLW	D'255'
		MOVWF	KEZDET
		
IRKAL

		MOVLW	'S'	
		KIÍR
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms
		CALL	DELAY1.5ms

		GOTO	IRKAL
		
	



;*********************** A KIJELZO BEÁLLÍTÁSAI A TÁBLÁZAT ALAPJÁN (SZUBRUTIN HÍVÁSOK) ******************************


;------------- WRITE CURSOR ADRESS OF RAM ------------
WC
		BANKSEL	PORTA
		BSF	PORTA,2		;I/OC1-->1	
		BSF	PORTA,1		;I/OC2-->1
		MOVLW	B'00000000'	;A KURZOR CÍME	
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- WRITE DISPLAY START ADRESS ------------
WS
		BANKSEL	PORTA
		BSF	PORTA,2		;I/OC1-->1	
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	D'0'		;KEZDO CÍM ÉRTÉKE	
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- WRITE RAM DATA ------------
WD
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0	
		BSF	PORTA,1		;I/OC2-->1
		MOVLW	B'00000000'	;ADAT	
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- SET FUNCTION MODE ------------
SF
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'11110110'	;11-->ADOTT; 1-->8BITEN; 1-->5*7FONT;	1,0-->4LINE; 1,0-->192WORDS.
		ADAT			;eredeti: B'11011011'
		ENG
		CALL	DELAY50us
		RETURN

;------------- SET ENTRY MODE ------------
SE
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'01010000'	;01-->ADOTT; -->30.OLDAL TÁBLÁZAT
		ADAT			;eredeti: B'01010000'
		ENG			
		CALL	DELAY50us
		RETURN

;------------- SET DISPLAY MODE ------------
SD
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00111011'	;001-->ADOTT;-->31.OLDAL TÁBLÁZAT
		ADAT			;eredeti: B'00111111'
		ENG			;eredeti: B'00111100'kurzor látható
		CALL	DELAY50us	;eredeti: B'00110100'kurzor nem látható
		RETURN

;------------- SHIFT CURSOR/DISPLAY-START ADDRESS ------------
MA
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00010000'	;0001-->ADOTT;-->32.OLDAL TÁBLÁZAT
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- SET UNDERLINE MODE ------------
SU
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00001101'	;000011-->ADOTT; -->32.OLDAL TÁBLÁZAT 19.-ES TÁBL.
		ADAT			;eredeti: B'00001100'
		ENG
		CALL	DELAY50us
		RETURN

;------------- WRITE RAM UNDERLINE BIT ------------
WU
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00001000'	;000010-->ADOTT; -->32.OLDAL TÁBLÁZAT 20.-ES TÁBL.
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- SET BLINKING FREKVENCY ------------
SB
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00000101'	;000010-->ADOTT; -->33.OLDAL TÁBLÁZAT 21.-ES TÁBL.
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- CURSOR HOME AND DISPLAY STARTADDRESS HOME ------------
MH
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00000011'	;00000011-->ADOTT; 
		ADAT
		ENG
		CALL	DELAY50us
		RETURN

;------------- CLEAR CURSOR OF DD RAM DISPLAY DATA HOME AND DISPLAY START ADDRESS HOME ------------
CH
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00000001'	;00000001-->ADOTT; 
		ADAT
		ENG
		CALL	DELAY1.5ms	;1,25ms KELL MINIMUM
		RETURN

;------------- NO OPERATION ------------
NOP
		BANKSEL	PORTA
		BCF	PORTA,2		;I/OC1-->0
		BCF	PORTA,1		;I/OC2-->0
		MOVLW	B'00000000'	;00000000-->ADOTT; 
		ADAT
		ENG
		CALL	DELAY50us
		RETURN



		END
