Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.
AD4 EQU 084H ; P0.4 LOW NIBBLE OF PORT 1 IS USED FOR DATA
AD5 EQU 085H ; P0.5 LOW NIBBLE OF PORT 1 IS USED FOR DATA
AD6 EQU 086H ; P0.6 LOW NIBBLE OF PORT 1 IS USED FOR DATA
AD7 EQU 087H ; P0.7 LOW NIBBLE OF PORT 1 IS USED FOR DATA
EN EQU 082H ; P0.2 LCD ENABLE LINE
RS EQU 080H ; P0.0 LCD REGISTER SELECT LINE
RW EQU 081H ; P0.1 LCD REGISTER SELECT LINE
?PR?lcd_asm?LCD_ASM SEGMENT CODE
PUBLIC Reset_LCD
PUBLIC init_lcd
PUBLIC LCD_write_command
PUBLIC LCD_write_text
; **********************************************************
; SUB WRITES A COMMAND WORD TO THE LCD
; COMMAND MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
MOV C, ACC.4 ; LOAD HIGH NIBBLE ON DATA BUS
MOV AD4, C ; ONE BIT AT A TIME USING...
MOV C, ACC.5 ; BIT MOVE OPERATOINS
MOV AD5, C
MOV C, ACC.6
MOV AD6, C
MOV C, ACC.7
MOV AD7, C
SETB EN ; PULSE THE ENABLE LINE
CLR EN
MOV C, ACC.0 ; SIMILARLY, LOAD LOW NIBBLE
MOV AD4, C
MOV C, ACC.1
MOV AD5, C
MOV C, ACC.2
MOV AD6, C
MOV C, ACC.3
MOV AD7, C
SETB EN ; PULSE THE ENABLE LINE
CLR EN
LCALL PULSEEWAIT4 ; PULSE THE ENABLE LINE...
; AND WAIT FOR BUSY FLAG TO CLEAR
lcall MDELAY
RET
; **********************************************************
; SUB TO WRITE A DATA WORD TO THE LCD
; DATA MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
LCD_write_text:
MOV LCD_var,A
CLR EN
SETB RS ; SELECT SEND DATA
CLR RW ; SELECT WRITE OPERATION
MOV A, LCD_var ; PUT DATA BYTE IN ACC
MOV C, ACC.4 ; LOAD HIGH NIBBLE ON DATA BUS
MOV AD4, C ; ONE BIT AT A TIME USING...
MOV C, ACC.5 ; BIT MOVE OPERATOINS
MOV AD5, C
MOV C, ACC.6
MOV AD6, C
MOV C, ACC.7
MOV AD7, C
SETB EN ; PULSE THE ENABLE LINE
CLR EN
MOV C, ACC.0 ; SIMILARLY, LOAD LOW NIBBLE
MOV AD4, C
MOV C, ACC.1
MOV AD5, C
MOV C, ACC.2
MOV AD6, C
MOV C, ACC.3
MOV AD7, C
SETB EN ; PULSE THE ENABLE LINE
CLR EN
LCALL PULSEEWAIT41 ; PULSE THE ENABLE LINE...
; AND WAIT FOR BUSY FLAG TO CLEAR
lcall MDELAY
RET
;===========================================================
PULSEEWAIT4:
clr EN
setb EN ; PULSE THE ENABLE LINE
clr EN
mov LCD_DATA, #0FH ; PREPARE PORT FOR INPUT
setb RW ; PREPARE R/W FOR READ OPERATION
mov A,#80h
orl A,RW
mov RW,A
mov dptr,#0c002h
movx @dptr,A
PEW:
setb EN ; START THE ENABLE PULSE
mov A, LCD_DATA ; READ STATUS NIBBLE
clr EN ; END ENABLE PULSE
setb EN ; PRETEND READING STATUS LOW NIBBLE
clr EN
JB ACC.7, PEW ; LOOP WHILE BUSY FLAG IS SET
ret
PULSEEWAIT41:
clr EN
setb EN ; PULSE THE ENABLE LINE
clr EN
mov LCD_DATA, #2FH ; PREPARE PORT FOR INPUT
setb RW ; PREPARE R/W FOR READ OPERATION
mov A,#80h
orl A,RW
mov dptr,#0c002h
movx @dptr,A
mov RW,A
PEW1:
setb EN ; START THE ENABLE PULSE
mov A, LCD_DATA ; READ STATUS NIBBLE
clr EN ; END ENABLE PULSE
setb EN ; PRETEND READING STATUS LOW NIBBLE
clr EN
JB ACC.7, PEW1 ; LOOP WHILE BUSY FLAG IS SET
ret
END
;;;;;;;;;;;;;;;;;;;;;;;;;;end of code;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.