Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
You could save them in EEPROM so they are saved on power cycles.
COUNT1 EQU 60H
COUNT2 EQU 61H
COUNT3 EQU 62H
TABLE_TEMP EQU 63H
TABLE EQU 64H
ORG 0000H
;INITIALIZATION
MOVLW 0FH ;INITIALIZE ALL PORTS AS DIGITAL INPUTS
MOVWF ADCON1
MOVLW 07H ;CONFIGURE COMPARATORS FOR DIGITAL INPUTS
MOVWF CMCON
CLRF TRISB
CLRF PORTB
MOVLW B'00000000' ;PORTD IS CONFIGURED AS OUTPUTS
MOVWF TRISD
CLRF LATD
CLRF PORTD
MAIN
CALL LONG_DELAY ;DELAY USED AT START-UP TILL SUPPLY REACHES FULL VOLTAGE
FUNCTION_SET
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'00111100' ;SET LCD TO 8 BIT INTERFACE, SET TO 4 LINE MODE, 5x7 DOT FORMAT. (SEE 'CONTROL CODES TABLE' IN LCD DATASHEET FOR REFERENCE)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
DISPLAY_ON
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'00001100' ;TURN DISPLAY ON, CURSOR UNDERLINE OFF, CERSOR BLINK OFF. (SEE 'CONTROL CODES TABLE' IN LCD DATASHEET FOR REFERENCE)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'10000011' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
CLRF TABLE ;CLEAR THE TABLE REGISTER TO BE ON THE SAFE SIDE
MESSAGE
MOVF TABLE,W ;MOVE THE VALUE OF Wreg TO TABLE. THIS IS DONE TO INCREMENT THE POINTER
CALL TEXT ;CALL TEXT ROUTINE
ANDLW 0FFH ; Check for NULL
BTFSC STATUS,2 ;ARE ALL CHARACTERS DISPLAYED...
;GOTO SEND ;...IF YES, GO TO THIS LABEL WHEN THE CHARACTERS ARE ALL DISPLAYED
GOTO DISPLAY_VALUE ;USE THIS INSTRUCTION IF A VALUE NEEDS TO BE DISPLAYED. IF NOT, REMOVE THIS INSTRUCTION AND USE THE ONE ABOVE (I.E. GOTO SEND)
BSF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
MOVWF PORTD ;MOVE THE CHARACTER TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
INCF TABLE,F ;INCREMENT THE TABLE REGISTER TO MOVE TO NEXT CHARACTER
GOTO MESSAGE ;GO BACK TO MASSAGE LABLE TO DISPLAY NEXT CHARACTER
TEXT
MOVWF TABLE_TEMP ;MOVE THE VALUE OF Wreg TO TABLE_TEMP REGISTER
BCF STATUS,0
RLCF TABLE_TEMP,F
MOVLW HIGH(mess) ; Get High address
BTFSC STATUS,0 ; If > 255
INCF WREG,W
MOVWF PCLATH
MOVLW LOW(mess) ; Get low address
ADDWF TABLE_TEMP,W ; add message pointer
BTFSC STATUS,0 ; if > 255
INCF PCLATH,F
MOVWF PCL
mess
RETLW 'T'
RETLW 'e'
RETLW 's'
RETLW 't'
RETLW 0H
DISPLAY_VALUE
MOVFF VALUE,PORTD ;MOVE THE VALUE OF REGISER 'VALUE' TO THE DATA PORT (PORTD)
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
GOTO SEND ;GO TO THIS LABEL WHEN FINISHED
PULSE_E
BSF PORTB,7
NOP
BCF PORTB,7
RETURN
LONG_DELAY
MOVLW .2
MOVWF COUNT1
MOVLW .69
MOVWF COUNT2
MOVLW .169
MOVWF COUNT3
loop
DECFSZ COUNT3
GOTO loop
DECFSZ COUNT2
GOTO loop
DECFSZ COUNT1
GOTO loop
RETURN
SMALL_DELAY
MOVLW .10
MOVWF COUNT2
LABEL2
CLRF COUNT1
LABEL1
DECFSZ COUNT1
GOTO LABEL1
DECFSZ COUNT2
GOTO LABEL2
RETURN
SEND
GOTO $ ; THIS WILL STOP THE MICRO FROM STARTING TO EXECUTRE THE PROGRAME AGAIN EVEN AFTER
; SENDING IT TO THE END DIRECTIVE
END
COUNT1 EQU 60H
COUNT2 EQU 61H
COUNT3 EQU 62H
TEMP_CHAR EQU 63H
ORG 0000H
;INITIALIZATION
MOVLW 0FH ;INITIALIZE ALL PORTS AS DIGITAL INPUTS
MOVWF ADCON1
MOVLW 07H ;CONFIGURE COMPARATORS FOR DIGITAL INPUTS
MOVWF CMCON
CLRF TRISB
CLRF PORTB
MOVLW B'00000000' ;PORTD IS CONFIGURED AS OUTPUTS
MOVWF TRISD
CLRF LATD
CLRF PORTD
MAIN
CALL LONG_DELAY ;DELAY USED AT START-UP TILL SUPPLY REACHES FULL VOLTAGE
;FUNCTION SET
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'00111100' ;SET LCD TO 8 BIT INTERFACE, SET TO 4 LINE MODE, 5x7 DOT FORMAT. (SEE 'CONTROL CODES TABLE' IN LCD DATASHEET FOR REFERENCE)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
;DISPLAY ON
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'00001100' ;TURN DISPLAY ON, CURSOR UNDERLINE OFF, CERSOR BLINK OFF. (SEE 'CONTROL CODES TABLE' IN LCD DATASHEET FOR REFERENCE)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
;LCD LOCATION
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11010011' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW 'A'
CALL SEND_CHAR
MOVLW 'B'
CALL SEND_CHAR
MOVLW 'C'
CALL SEND_CHAR
MOVLW 'D'
CALL SEND_CHAR
MOVLW 'E'
CALL SEND_CHAR
MOVLW 'F'
CALL SEND_CHAR
MOVLW 'G'
CALL SEND_CHAR
MOVLW 'H'
CALL SEND_CHAR
MOVLW 'I'
CALL SEND_CHAR
MOVLW 'J'
CALL SEND_CHAR
MOVLW 'K'
CALL SEND_CHAR
MOVLW 'L'
CALL SEND_CHAR
LINEEE
BRA LINEEE
SEND_CHAR
MOVWF TEMP_CHAR
MOVFF TEMP_CHAR,PORTD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
RETURN
CLEAR_LCD
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'000000001' ;TURN DISPLAY ON, CURSOR UNDERLINE OFF, CERSOR BLINK OFF. (SEE 'CONTROL CODES TABLE' IN LCD DATASHEET FOR REFERENCE)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
RETURN
PULSE_E
BSF PORTB,7
NOP
BCF PORTB,7
RETURN
LONG_DELAY
MOVLW .2
MOVWF COUNT1
MOVLW .69
MOVWF COUNT2
MOVLW .169
MOVWF COUNT3
loop
DECFSZ COUNT3
GOTO loop
DECFSZ COUNT2
GOTO loop
DECFSZ COUNT1
GOTO loop
RETURN
SMALL_DELAY
MOVLW .10
MOVWF COUNT2
LABEL2
CLRF COUNT1
LABEL1
DECFSZ COUNT1
GOTO LABEL1
DECFSZ COUNT2
GOTO LABEL2
RETURN
SEND
GOTO $ ; THIS WILL STOP THE MICRO FROM STARTING TO EXECUTRE THE PROGRAME AGAIN EVEN AFTER
; SENDING IT TO THE END DIRECTIVE
END
LINE6_LCD_MENU
BTFSC PORTB,1 ;CHECK DOWN SW
GOTO DOWN_MENU_ARROW ;IF PRESSED, MOVE ARROW DOWN AND INCREMENT THE MENU_ARROW REGISTER
BTFSC PORTB,2 ;CHECK UP SW
GOTO UP_MENU_ARROW ;IF PRESSED, MOVE ARROW UP AND DECREMENT THE MENU_ARROW REGISTER
BRA LINE6_LCD_MENU ;IF NONE OF THE SWITCHES IS PRESSED, GO TO LINE6_LCD_MENU
DOWN_MENU_ARROW ;MOVE ARROW DOWN
INCF MENU_ARROW ;INCREMENT THE MENU_ARROW REGISTER TO INDICATE THE LOCATION OF THE ARROW
MOVLW MENU_ARROW ;MOVE THE VALUE TO THE WORKING REG
SUBLW .3 ;SUB BY 3
BTFSS STATUS,Z ;SKIP IF RESULT NOT = 0
CALL LCD_ARROW_1 ;IF EQUAL TO 0, DISPLAY ARROW IN ROW 1
MOVLW MENU_ARROW
SUBLW .2
BTFSS STATUS,Z
CALL LCD_ARROW_3
MOVLW MENU_ARROW
SUBLW .1
BTFSS STATUS,Z
CALL LCD_ARROW_2
MOVLW .1
MOVWF REG1
MOVLW REG1
SUBLW .3
BTFSS STATUS,Z
CALL LCD_ARROW_3
MOVLW REG1
SUBLW .2
BTFSS STATUS,Z
CALL LCD_ARROW_2
MOVLW REG1
SUBLW .1
BTFSS STATUS,Z
CALL LCD_ARROW_1
;DISPLAY FIRST ARROW
LCD_ARROW_1
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11000000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW '>'
CALL SEND_CHAR
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'10010000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW ' '
CALL SEND_CHAR
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11010000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW ' '
CALL SEND_CHAR
RETURN
;DISPLAY SECOND ARROW
LCD_ARROW_2
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11000000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW ' '
CALL SEND_CHAR
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'10010000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW '>'
CALL SEND_CHAR
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11010000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW ' '
CALL SEND_CHAR
RETURN
;DISPLAY THIRD ARROW
LCD_ARROW_3
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11000000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW ' '
CALL SEND_CHAR
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'10010000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW ' '
CALL SEND_CHAR
BCF PORTB,5 ;R/S SET TO LOW TO INDICATE THAT DATA BELOW IS A COMMAND
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW B'11010000' ;SET THE LOCATION OF THE CHARACTERS. "0x80"= line1, "0xC0"= line2, "0x90"= line3, "0xD0"= line4. To set column increase the value (ex."0x82"= line1 column 2)
MOVWF PORTD ;SEND THE ABOVE COMAND TO THE LCD
CALL PULSE_E ;PULSE THE E PIN TO ENABLE COMMAND TO ENTER LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
BSF PORTB,5 ;R/S IS SET TO DATA TRANSFER
BCF PORTB,6 ;R/W SET TO LOW TO INDICATE THAT WRITE COMMAND TO LCD
CALL SMALL_DELAY ;SMALL DELAY WHILE LCD IS BUSY
MOVLW '>'
CALL SEND_CHAR
RETURN