PIC-MT-C and 16F876A help

oawkha

New Member
I can't seem to make the lcd display a character. here is a copy of the code that i used. any help would very much be appreciated... ^_^

include <P16F876A.INC>
include "bankx.inc"

__config _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

errorlevel -302, -305, -205

; CONTROL (PORTA) | DATA (PORTC)
; LCDE = RA5 | D7 = RC3
; LCDRW = RA3 | D6 = RC2
; LCDRS = RA2 | D5 = RC1
; | D4 = RC0

CTRL_E EQU 5
CTRL_RW EQU 3
CTRL_RS EQU 2

CTRL_TRIS EQU TRISA
CTRL EQU PORTA
BTN_TRIS EQU TRISB
BTN EQU PORTB
DAT_TRIS EQU TRISC
DAT EQU PORTC

CBLOCK 0x20
WAIT1
WAIT2
XDELAY
ENDC

ORG 0x00
GOTO START

;********** DELAYS **********
DELAY1MS
MOVLW .8
MOVWF WAIT2
D1_1
MOVLW .207
MOVWF WAIT1
D1_2
DECFSZ WAIT1
GOTO D1_2
DECFSZ WAIT2
GOTO D1_1
RETURN

XDELAY1US
MOVWF XDELAY
DECFSZ XDELAY
GOTO $ - 1
RETURN

XDELAY1MS
MOVWF XDELAY
XD
CALL DELAY1MS
DECFSZ XDELAY
GOTO XD
RETURN

DELAY200MS
MOVLW .200
MOVWF XDELAY
XD1
CALL DELAY1MS
DECFSZ XDELAY
GOTO XD1
RETURN
;********** DELAYS **********

EHIGH
BCF CTRL, CTRL_RW
BCF CTRL, CTRL_RS
BSF CTRL, CTRL_E
RETURN

ELOW
CALL DELAY1MS
CALL DELAY1MS
BCF CTRL, CTRL_E
RETURN


START
BANKSEL TRISA
MOVLW B'11010011'
MOVWF TRISA
MOVLW B'11110000'
MOVWF TRISC
MOVLW B'11101111'
MOVWF TRISB

BANKSEL PORTA
CLRF PORTA
CLRF PORTC

;********** wait more than 15ms after Vdd rises to 4.5V
CALL DELAY200MS

;********** Function set (interface is 8 bits long)
CALL EHIGH
MOVLW B'00000011'
MOVWF DAT
CALL ELOW

;********** wait more than 4.1ms
MOVLW .5
CALL XDELAY1MS

;********** Function set (interface is 8 bits long)
CALL EHIGH
MOVLW B'00000011'
MOVWF DAT
CALL ELOW

;********** wait more than 100us
CALL DELAY1MS

;********** Function set (interface is 8 bits long)
CALL EHIGH
MOVLW B'00000011'
MOVWF DAT
CALL ELOW

;********** Function set (set interface to be 4 bits long). Interface is 8 bits long.
CALL EHIGH
MOVLW B'00000010'
MOVWF DAT
CALL ELOW

;********** Function set
CALL EHIGH
MOVLW B'00000010'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00001000'
MOVWF DAT
CALL ELOW

;********** display off
CALL EHIGH
MOVLW B'00000000'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00001000'
MOVWF DAT
CALL ELOW

;********** display clear
CALL EHIGH
MOVLW B'00000000'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00000001'
MOVWF DAT
CALL ELOW

;********** display on
CALL EHIGH
MOVLW B'00000000'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00001110'
MOVWF DAT
CALL ELOW

;********** cursor / display shift
CALL EHIGH
MOVLW B'00000001'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00000100'
MOVWF DAT
CALL ELOW

;********** entry mode set
CALL EHIGH
MOVLW B'00000000'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00000110'
MOVWF DAT
CALL ELOW

;********** cursor home
CALL EHIGH
MOVLW B'00000000'
MOVWF DAT
CALL ELOW

CALL EHIGH
MOVLW B'00000010'
MOVWF DAT
CALL ELOW

;********** PUT CHAR
BCF CTRL, CTRL_RW
BSF CTRL, CTRL_RS
BSF CTRL, CTRL_E
MOVLW B'00000011'
MOVWF DAT
CALL ELOW

BCF CTRL, CTRL_RW
BSF CTRL, CTRL_RS
BSF CTRL, CTRL_E
MOVLW B'00001111'
MOVWF DAT
CALL ELOW

END
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…