kdt_khanh
17-04-2013, 12:03 AM
Mọi người xem giúp mình đoạn code sau: khi mô phỏng trên Proteus thì chạy được.
Còn khi nạp vào PIC thì ko hiển thị chữ gì.
Giao tiếp 8 bit . data PORTB
Điều khiển RD0 RD1 RD2
Ngôn ngữ MPASM, MPLAB IDE
#INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _HS_OSC
; thach anh 20MHz
COUNT1 EQU 0X20
COUNT2 EQU 0X21
COUNT3 EQU 0X22
COUNT4 EQU 0X23
COUNT5 EQU 0X24
LCD_DATA EQU PORTB
LCD_CONTROL EQU PORTD
RS EQU RD0
RW EQU RD1
EN EQU RD2
ORG 0X000
goto start
start org 0x005
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISB
CLRF TRISD
BCF STATUS,RP0
;---------------------------
; BEGIN
;-------- KHOI TAO -----------------
BEGIN BCF LCD_CONTROL,EN
CALL DELAY20MS
MOVLW 0X38
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X0E
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X01
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X06
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X80
CALL COMNWRT
CALL DELAY20MS
;------------------------------
; GHI DATA
MOVLW A'N'
CALL DATAWRT
CALL DELAY20MS
MOVLW A'A'
CALL DATAWRT
CALL DELAY20MS
MOVLW A'M'
CALL DATAWRT
CALL DELAY20MS
MOVLW A'E'
CALL DATAWRT
CALL DELAY20MS
GOTO $
;----------------------
; COMMAND WRITE
COMNWRT MOVWF LCD_DATA
BCF LCD_CONTROL,RS
BCF LCD_CONTROL,RW
BSF LCD_CONTROL,EN
NOP
NOP
NOP
BCF LCD_CONTROL,EN
RETURN
;----------------
; DATA WRITE
DATAWRT MOVWF LCD_DATA
BSF LCD_CONTROL,RS
BCF LCD_CONTROL,RW
BSF LCD_CONTROL,EN
NOP
NOP
NOP
BCF LCD_CONTROL,EN
RETURN
DELAY20MS
MOVLW D'20'
MOVWF COUNT3
LOOP3 MOVLW D'100'
MOVWF COUNT1
LOOP1 MOVLW D'200'
MOVWF COUNT2
LOOP2 NOP
NOP
DECFSZ COUNT2
GOTO LOOP2
DECFSZ COUNT1
GOTO LOOP1
DECFSZ COUNT3
GOTO LOOP3
RETURN
END
Còn khi nạp vào PIC thì ko hiển thị chữ gì.
Giao tiếp 8 bit . data PORTB
Điều khiển RD0 RD1 RD2
Ngôn ngữ MPASM, MPLAB IDE
#INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _HS_OSC
; thach anh 20MHz
COUNT1 EQU 0X20
COUNT2 EQU 0X21
COUNT3 EQU 0X22
COUNT4 EQU 0X23
COUNT5 EQU 0X24
LCD_DATA EQU PORTB
LCD_CONTROL EQU PORTD
RS EQU RD0
RW EQU RD1
EN EQU RD2
ORG 0X000
goto start
start org 0x005
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISB
CLRF TRISD
BCF STATUS,RP0
;---------------------------
; BEGIN
;-------- KHOI TAO -----------------
BEGIN BCF LCD_CONTROL,EN
CALL DELAY20MS
MOVLW 0X38
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X0E
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X01
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X06
CALL COMNWRT
CALL DELAY20MS
MOVLW 0X80
CALL COMNWRT
CALL DELAY20MS
;------------------------------
; GHI DATA
MOVLW A'N'
CALL DATAWRT
CALL DELAY20MS
MOVLW A'A'
CALL DATAWRT
CALL DELAY20MS
MOVLW A'M'
CALL DATAWRT
CALL DELAY20MS
MOVLW A'E'
CALL DATAWRT
CALL DELAY20MS
GOTO $
;----------------------
; COMMAND WRITE
COMNWRT MOVWF LCD_DATA
BCF LCD_CONTROL,RS
BCF LCD_CONTROL,RW
BSF LCD_CONTROL,EN
NOP
NOP
NOP
BCF LCD_CONTROL,EN
RETURN
;----------------
; DATA WRITE
DATAWRT MOVWF LCD_DATA
BSF LCD_CONTROL,RS
BCF LCD_CONTROL,RW
BSF LCD_CONTROL,EN
NOP
NOP
NOP
BCF LCD_CONTROL,EN
RETURN
DELAY20MS
MOVLW D'20'
MOVWF COUNT3
LOOP3 MOVLW D'100'
MOVWF COUNT1
LOOP1 MOVLW D'200'
MOVWF COUNT2
LOOP2 NOP
NOP
DECFSZ COUNT2
GOTO LOOP2
DECFSZ COUNT1
GOTO LOOP1
DECFSZ COUNT3
GOTO LOOP3
RETURN
END