S
Sanchita
Guest
hiiii
probeer AT89S52 interface met 44780 standaard LCD-display ....
maar niets wordt weergegeven ...... kan iemand me helpen met debuggen
Ik heb geschreven volgende code
$ mod51
org 0000h
DB0 EQU P0.0
DB1 EQU P0.1
DB2 EQU p0.2
DB3 EQU P0.3
DB4 EQU P0.4
DB5 EQU P0.5
DB6 EQU P0.6
DB7 EQU P0.7
NL EQU P2.7
RS EQU P2.6
RW EQU P2.5
DATAWD EQU P0
CSEGMOV R4, # 01H
MOV R3, # 00H
MOV SP, # 30H
CALL BLANK_LCD
; test lcd
mov a, # 'W'
mov 70h, een
mov a, # 'E'
mov 71h, een
mov a, # 'L'
mov 72h, een
mov a, # "C"
mov 73H, een
mov a, # 'O'
mov 74H, een
mov a, # 'M'
mov 75H, een
mov a, # 'E'
mov 76H, een
oproep disp_on_lcdWAIT_LCD: CLR EN; Begin LCD-opdracht
CLR RS; Het is een opdracht
SETB RW; Het is een lees-opdracht
MOV DATAWD, # 0FFh; Stel alle pinnen in eerste instantie FF
SETB EN; Klok uit commando om LCD
MOV A, DATAWD; Lees de return waarde
JB ACC.7, WAIT_LCD; Als bit 7 hoog, LCD nog steeds bezig
CLR EN; Finish het commando
CLR RW; Zet RW voor toekomstige opdrachten
RETINITIALIZE_LCD: CLR RS
MOV DATAWD, 38h #
SETB NL
CLR NL
CALL WAIT_LCD
CLR RS
MOV DATAWD, # 0Eh
SETB NL
CLR NL
CALL WAIT_LCD
CLR RS
MOV DATAWD, # 06h
SETB NL
CLR NL
LCALL WAIT_LCD
RET
WRITE_TEXT: SETB RS
MOV DATAWD, @ R0
SETB NL
CLR NL
CALL WAIT_LCD
RET
blank_LCD: CLR RS
MOV DATAWD, # 01h
SETB NL
CLR NL
CALL WAIT_LCD
RET
DISP_ON_LCD: CALL INITIALIZE_LCD
MOV R0, # 70H
REWRITE: CALL WRITE_TEXT
INC R0
CJNE R0, # 7AH, herschrijven
RET
END
probeer AT89S52 interface met 44780 standaard LCD-display ....
maar niets wordt weergegeven ...... kan iemand me helpen met debuggen
Ik heb geschreven volgende code
$ mod51
org 0000h
DB0 EQU P0.0
DB1 EQU P0.1
DB2 EQU p0.2
DB3 EQU P0.3
DB4 EQU P0.4
DB5 EQU P0.5
DB6 EQU P0.6
DB7 EQU P0.7
NL EQU P2.7
RS EQU P2.6
RW EQU P2.5
DATAWD EQU P0
CSEGMOV R4, # 01H
MOV R3, # 00H
MOV SP, # 30H
CALL BLANK_LCD
; test lcd
mov a, # 'W'
mov 70h, een
mov a, # 'E'
mov 71h, een
mov a, # 'L'
mov 72h, een
mov a, # "C"
mov 73H, een
mov a, # 'O'
mov 74H, een
mov a, # 'M'
mov 75H, een
mov a, # 'E'
mov 76H, een
oproep disp_on_lcdWAIT_LCD: CLR EN; Begin LCD-opdracht
CLR RS; Het is een opdracht
SETB RW; Het is een lees-opdracht
MOV DATAWD, # 0FFh; Stel alle pinnen in eerste instantie FF
SETB EN; Klok uit commando om LCD
MOV A, DATAWD; Lees de return waarde
JB ACC.7, WAIT_LCD; Als bit 7 hoog, LCD nog steeds bezig
CLR EN; Finish het commando
CLR RW; Zet RW voor toekomstige opdrachten
RETINITIALIZE_LCD: CLR RS
MOV DATAWD, 38h #
SETB NL
CLR NL
CALL WAIT_LCD
CLR RS
MOV DATAWD, # 0Eh
SETB NL
CLR NL
CALL WAIT_LCD
CLR RS
MOV DATAWD, # 06h
SETB NL
CLR NL
LCALL WAIT_LCD
RET
WRITE_TEXT: SETB RS
MOV DATAWD, @ R0
SETB NL
CLR NL
CALL WAIT_LCD
RET
blank_LCD: CLR RS
MOV DATAWD, # 01h
SETB NL
CLR NL
CALL WAIT_LCD
RET
DISP_ON_LCD: CALL INITIALIZE_LCD
MOV R0, # 70H
REWRITE: CALL WRITE_TEXT
INC R0
CJNE R0, # 7AH, herschrijven
RET
END