;**************************************************************************
;OVLADANI LCD S RADICEM HD44780
;                             PIC 16F84A
;                         -------\/-------
;                        -|RA2        RA1|-
;                        -|RA3        RA0|-
;                        -|RA4/RTCC  OSC1|- -| KRYSTAL 4 MHz
;          PULL UP NA 5V -|MCLR      OSC2|- -|
;                    GND -|VSS        VCC|- 5V
;                        -|RB0/INT    RB7|- LCD DATA BIT 7
;                        -|RB1        RB6|- LCD DATA BIT 6
;                ENABLE  -|RB2        RB5|- LCD DATA BIT 5
;                    RS  -|RB3        RB4|- LCD DATA BIT 4
;                         ----------------
;**************************************************************************
PA	EQU	05H
PB	EQU 06H
SWR	EQU	03H
#DEFINE C SWR,0
#DEFINE Z SWR,2
;.....................
CAS	EQU 10H
CAS2 EQU 11H
DAT	EQU	12H
#DEFINE	RS PB,3						;PRIKAZ, DATA
#DEFINE E  PB,2						;POTVRZENI DAT
;..........................................................................
	ORG	0000H
GOTO	LCDINI
;##########################################################################
;PODPROGRAMY
;##########################################################################
;**************************************************************************
;CEKANI
;**************************************************************************
CEKEJ15	MOVLW	.20					;CEKA +-15MS
		MOVWF	CAS
CKY151  MOVLW	.255
		MOVWF	CAS2
CKY152	DECFSZ	CAS2
		GOTO	CKY152
		DECFSZ	CAS
		GOTO	CKY151
		RETURN
;......................
CEKEJ2M	MOVLW	.3 					;CEKA 1.64mS
		MOVWF	CAS
CEK2M1	MOVLW 	.181
		MOVWF	CAS2
CEK2M2	DECFSZ	CAS2
		GOTO	CEK2M2
		DECFSZ	CAS
		GOTO	CEK2M1
		RETURN
;---------------------
CEKEJ4U	MOVLW	.13					;CEKA 42uS
		MOVWF	CAS
		GOTO	CEKEJ
;.....................
CEKEJ1M	MOVLW	.34					;CEKA 103uS
		MOVWF	CAS
;.....................
CEKEJ	DECFSZ	CAS
		GOTO	CEKEJ
		RETURN
;*************************************************************************
;INICIALIZACE
;*************************************************************************
LCDINI	CLRF	PB					;PREDNASTAVENI PORU
		MOVLW	B'00000011'
		TRIS	PB					;KONFIGURACE VYSTUPU
		CLRF	PB					;PB NA 0
;...........................
		CALL	CEKEJ15				;POCKA 15MS NA INICILAIZACI RADICE
;---------------------------
		BSF		E					;NAHOZENI ENABLE
		BSF		PB,4
		BSF		PB,5				;NASTAVENI BITU DAT
		BCF		E					;POTVRZENI ODESILANYCH DAT
		CALL	CEKEJ15				;ODESLE 00110000 A POCKA VICE JAK 4,1mS
;............................
		BSF		E
		BCF		E
		CALL	CEKEJ1M				;OPET ODESLE DATA A POCKA VICE JAK 100uS
;...........................
		BSF		E
		BCF		E
		CALL	CEKEJ4U				;NAPOTRETI ODESLE 00110000 A CEKA VICE JAK 40uS
;----------------------------
		MOVLW	B'00100000'
		CALL	WRCMD				;4BIT KOMUNIKACE
;............................
		MOVLW	B'00101000'
		CALL	WRCMD				;DVA RADKY, 5X7 ZNAK
		MOVLW	B'00001000'
		CALL	WRCMD				;LCD OFF
		MOVLW	B'00000001'
		CALL	WRCMD				;LCD ON
		MOVLW	B'00000110'
		CALL	WRCMD				;INKREMENTACE, NORMAL MOD
;..........................
		GOTO	START
;*************************************************************************
;ODESILANI DAT/PRIKAZU
;*************************************************************************
WRDAT	BSF		RS
		GOTO	ZAPIS
WRCMD	BCF		RS
;.........................
ZAPIS	MOVWF	DAT					;ULOZI DATA K ZAPSANI Z W DO DAT
		CALL	ZAPDCL				;NULUJE DATOVOU LINKU
;.........................
		BSF		E
		CALL	ZAPIS1				;NASTAVI HORNI 4 BITY
		BCF		E					;A ODESLE
;.........................
		SWAPF	DAT,1				;OTOCI DATA 
		BSF		E
		CALL	ZAPIS1				;ODESLE DOLNI 4 BITY
		BCF		E					;A POTVRDI
;.......................
		SWAPF	DAT,1				;VRATI DATA DO NORMALNI POLOHY
		BTFSC	RS
		GOTO	CEKEJ4U				;POKUD JDE O ODESLANI DAT CEKEJ 40uS
;......................
		MOVLW	B'00000001'			;JEDNA SE O INSTRUKCI VYMAZ LCD?
		SUBWF	DAT					;ODECTE W OD DAT
		BTFSS	C					;POKUD JE BIT C SWR REGISTRU H OVER Z
		GOTO	ZAP2  				;NENI POKRACUJ
		BTFSC	Z					;A BIT Z JE H CEKEJ VICE JAK 1,64 mS
		GOTO	CEKEJ2M		
;.........................	
ZAP2	MOVLW	B'00000010'	 		;JEDNA SE O INSTRUKCI NAVRAT DOMU?
		SUBWF	DAT					;ODECTE W OD DAT
		BTFSS	C					;OVERI C=H
		GOTO	CEKEJ4U				;NE CEKA 40 uS
		BTFSC	Z					;Z = H
		GOTO	CEKEJ2M				;JO, CEKA VICE JAK 1,64mS
		GOTO	CEKEJ4U				;NENI, CEKA 40uS
;-------------------------
ZAPIS1	MOVFW	DAT
		ANDLW	B'11110000'			;ZAMASKUJE 4 DOLNI BITY DAT A ULOZI DO W
		IORWF	PB,1				;ZAPISE DATA DO PB BEZ OVLIVNENI DOLNICH 4 BITU PB
		RETURN
;.........................
ZAPDCL	BCF		PB,4
		BCF		PB,5
		BCF		PB,6
		BCF		PB,7
		RETURN
;************************PRACE S LCD**************************************
LCDCLR	MOVLW	B'00000001'				;ODESLE PRIKAZ NA SMAZANI LCD
		GOTO	LCDPRK
;........................
LCDHOME	MOVLW	B'00000010'				;NAVRAT NA DOMOVSKOU POZICI
;------------------------
LCDPRK	CALL	WRCMD					;ZAVOLA ODESLANI PRIKAZU
		RETURN		
;#########################################################################
;PROGRAM
;#########################################################################
START	MOVLW	B'01010000'
		CALL	WRDAT
		GOTO	START
;.........................................................................
		END
