;**************************************************************************
;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
;...........................
	MOVLW	B'00100000'
	CALL	WRCMD					;4BIT KOMUNIKACE
;..........................
	MOVLW	B'00101000'
	CALL	WRCMD					;DVA RADKY, 5X7 ZNAK
	MOVLW	B'00001100'
	CALL	WRCMD					;LCD ON, BLIK OFF
	MOVLW	B'00000001'
	CALL	WRCMD					;VYMAZE LCD
	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	'T'					;DATA K ODESLANI						
	CALL	WRDAT
;.........................................................................
		END
