mig29fulcrum
Junior Member level 1
Hi...
I'm trying to drive LCD in 4-bit mode but it doesn't work,I'm completely confused,here is my code.
tnx...
I'm trying to drive LCD in 4-bit mode but it doesn't work,I'm completely confused,here is my code.
tnx...
Code:
LIST P=PIC18F4550
#INCLUDE P18F4550.INC
CONFIG FOSC=INTOSC_EC
CONFIG WDT=OFF
LCDCTRL EQU PORTC
LCDDATA EQU PORTD
RS EQU RC0
E EQU RC1
BUFFER EQU 0X0A
LN EQU 0X0B
HN EQU 0X0C
;---------------mian program-------------
ORG 0H
MOVLW 0X62
MOVWF OSCCON
RCALL LCD_INIT
RCALL LCD_WRITE
BRA $
;--------------LCD initialization---------
LCD_INIT
CLRF TRISD
CLRF TRISC
BCF LCDCTRL,E
RCALL POWER_DELAY
MOVLW 0X28 ; Set 4-bit mode, 2 lines
RCALL COMMAND
RCALL POWER_DELAY
MOVLW 0X0F ;lcd on/cursor blinking
RCALL COMMAND
RCALL DELAY
MOVLW 0X01 ;clear display
RCALL COMMAND
RCALL DELAY
MOVLW 0X06 ;cursor auto inc
RCALL COMMAND
RCALL DELAY
MOVLW 0X80 ; zero display address
RCALL COMMAND
RCALL DELAY
RETURN
;--------------DATA ISSUE-------------
LCD_WRITE
RCALL DELAY
MOVLW A'B'
RCALL WRITE
RCALL DELAY
MOVLW A'U'
RCALL WRITE
RCALL DELAY
MOVLW A'S'
RCALL WRITE
RCALL DELAY
MOVLW A'H'
RCALL WRITE
RCALL DELAY
MOVLW A'I'
RCALL WRITE
RCALL DELAY
MOVLW A'D'
RCALL WRITE
RCALL DELAY
MOVLW A'O'
RCALL WRITE
RETURN
;-------------command mode-----------
COMMAND
MOVWF BUFFER
MOVLW 0XF0
MOVWF HN
MOVLW 0X0F
MOVWF LN
MOVF BUFFER,W
ANDWF HN,F
SWAPF HN,F
MOVFF HN,LCDDATA
NOP
BCF LCDCTRL,RS
BSF LCDCTRL,E
RCALL JIFFY
BCF LCDCTRL,E
RCALL DELAY
MOVF BUFFER,W
ANDWF LN,F
MOVFF LN,LCDDATA
NOP
BSF LCDCTRL,E
RCALL JIFFY
BCF LCDCTRL,E
RETURN
;------------data mode-----------
WRITE
MOVWF BUFFER
MOVLW 0XF0
MOVWF HN
MOVLW 0X0F
MOVWF LN
MOVF BUFFER,W
ANDWF HN,F
SWAPF HN,F
MOVFF HN,LCDDATA
NOP
BSF LCDCTRL,RS
BSF LCDCTRL,E
RCALL JIFFY
BCF LCDCTRL,E
RCALL DELAY
MOVF BUFFER,W
ANDWF LN,F
MOVFF LN,LCDDATA
NOP
BSF LCDCTRL,E
RCALL JIFFY
BCF LCDCTRL,E
RETURN
;------------------(50msec)---------
POWER_DELAY
MOVLW 0X3D
MOVWF TMR0L
RCALL GENERAL_DELAY
RETURN
;------------------(4.1msec)--------------
DELAY
MOVLW 0XF0
MOVWF TMR0L
RCALL GENERAL_DELAY
RETURN
;------------------(256usec)------------
JIFFY
MOVLW 0XFF
MOVWF TMR0L
RCALL GENERAL_DELAY
RETURN
;------------general delay--------
GENERAL_DELAY
MOVLW B'01000111'
MOVWF T0CON
BCF INTCON,TMR0IF
BSF T0CON,TMR0ON
COUNT
BTFSS INTCON,TMR0IF
BRA COUNT
BCF T0CON,TMR0ON
RETURN
END