;------------------------------------------------------
; date         : 2001/11/07 
; file name    : LCD.ASM 
; hardware     : PIC16C711
; assembler    : MPASM
; description  : 4MHz
;		 4bit interface
;		 PORTA[3:0] is connected lcd db[7:4]
;		 PORTB.1->RS PORTB.2->R/W PORTB.3->E	
;		 worked by Choi Chan Hak	
;------------------------------------------------------ 

LIST    P=16C711, F=INHX8M

        ;
        ;       SFR DEFINITION
        ;

INDIR		EQU	00H		; PAGE 0
TIMER0          EQU     01H
PC              EQU     02H
STATUS          EQU     03H
FSR             EQU     04H
PORTA           EQU     05H
PORTB           EQU     06H
ADCON0          EQU     08H
ADRES           EQU     09H
PCLATH		EQU	0AH
INTCON		EQU	0BH

OPTIONR		EQU	01H            	; PAGE 1
TRISA		EQU	05H
TRISB		EQU	06H
ADCON1          EQU     08H

VARIABLE	TEMP=20H 
VARIABLE	COUNT1=21H
VARIABLE	COUNT2=22H
VARIABLE	COUNT3=23H
        ;
        ;        BIT DEFINITION
        ;

CF	        EQU     .0	    	; STATUS
DC		EQU	.1
ZF	        EQU     .2
PD		EQU	.3
TO		EQU	.4
RP0		EQU	.5

        ;
        ;        MAIN ROUTINE
        ;

        ORG     0

	BSF	STATUS,RP0
	MOVLW	B'00000000'
        MOVWF	TRISA
	MOVLW	B'00000000'
	MOVWF	TRISB
	MOVLW	B'11111111'
	MOVWF	ADCON1
        BCF	STATUS,RP0
        CLRF    PORTA
	CLRF	PORTB

;****** Initialize ***** 

        CALL	DELAY5M         ;DELAY
	CALL	DELAY5M  
	CALL	DELAY5M
	CALL	DELAY5M
	CALL	DELAY5M
	CALL	DELAY5M	 

	BCF	PORTB,1		;RS->0
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3		;E->1
	MOVLW	B'11110011'	;8BIT MODE SET
	MOVWF	PORTA		
 	BCF	PORTB,3		;E->0
 	CALL	DELAY5M
	CALL	DELAY5M

	BCF	PORTB,1		;RS->0
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3		;E->1
	MOVLW	B'11110011'	;8BIT MODE SET
	MOVWF	PORTA
 	BCF	PORTB,3		;E->0
	CALL	DELAY5M
	
	BCF	PORTB,1		;RS->0
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3		;E->1
	MOVLW	B'11110011'	;8BIT MODE SET
	MOVWF	PORTA
 	BCF	PORTB,3		;E->0
	CALL	DELAY5M
	
	BCF	PORTB,1		;RS->0
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3		;E->1
	MOVLW	B'11110010'	;4BIT MODE SET
	MOVWF	PORTA
 	BCF	PORTB,3		;E->0
	CALL	DELAY5M
 
        MOVLW   H'28'           ;4bit/2line/5x7  
        CALL    LCD_CMD
        MOVLW   H'08'           ;Display off 
        CALL    LCD_CMD 
        MOVLW   H'01'           ;Display Clear
        CALL    LCD_CMD
        MOVLW   H'06'           ;Entry Mode Set 
        CALL    LCD_CMD
 	MOVLW   H'0E'           ;Display on 
        CALL    LCD_CMD

;****** Character write ***********
   	 	
	MOVLW	H'48'		;'H'
	CALL	LCD_DATA
	MOVLW	H'65'		;'e'
	CALL	LCD_DATA
	MOVLW	H'6C'		;'l'
	CALL	LCD_DATA
 	MOVLW	H'6C'		;'l'
	CALL	LCD_DATA
	MOVLW	H'6F'		;'O'
	CALL	LCD_DATA
	MOVLW	H'21'		;'!'
	CALL	LCD_DATA

LOOP 	GOTO	LOOP	 

;****** LCD Data Write ***********
LCD_DATA 
	MOVWF	TEMP		;DATA
	BSF	PORTB,1		;RS->1
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3
	SWAPF	TEMP,0		;TEMP SWAP -> W
	MOVWF	PORTA
	BCF	PORTB,3
	CALL	DELAY5M

	BSF	PORTB,1		;RS->1
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3
	MOVF	TEMP,0		;TEMP -> W
 	MOVWF	PORTA
 	BCF	PORTB,3
 	CALL	DELAY5M
        RETURN 
	 
;****** LCD command Write *****
LCD_CMD
	MOVWF	TEMP		;DATA
	BCF	PORTB,1		;RS->0
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3
	SWAPF	TEMP,0
 	MOVWF	PORTA
 	BCF	PORTB,3
 	CALL	DELAY5M

	BCF	PORTB,1		;RS->0
	BCF	PORTB,2		;R/W->0
	BSF	PORTB,3
	MOVF	TEMP,0
	MOVWF	PORTA
	BCF	PORTB,3
	CALL	DELAY5M	
        RETURN 

;******* TIME DELAY **********
DELAY5M	
	MOVLW	D'7'
	MOVWF	COUNT2
	CLRF	COUNT1
DL_1	DECFSZ	COUNT1
	GOTO	DL_1
	DECFSZ	COUNT2
	GOTO	DL_1
	RETURN	

	END


