8051 ЖК «Hello World» - замена БД на переменную

Я использую проприетарную плату 8051 для изучения программирования на ассемблере. В настоящее время я работаю над программой «Hello World» на ЖК-дисплее. Вот код

lcd_cmd equ 0800h           ;Write COMMAND reg address 0800h
lcd_st  equ 0801h           ;Read STATUS reg address 0801h
lcd_wr  equ 0802h           ;Write DATA reg address 0802h
lcd_rd  equ 0803h           ;Read DATA reg address 0803h

ORG 08100h

hello:  
mov P2, #(lcd_cmd SHR 8)            ;load P2 with high address
mov R0, #(lcd_cmd AND 255)          ;load R0 with command reg addr
mov R7, #03h                        ;set LCD position, line=1, char=3
mov dptr, #mesg1                    ;point to mesg1
acall   wr_string                   ;write mesg1 to LCD

mov R7, #41h                        ;set LCD position, line= 2, char=1
mov dptr, #mesg2                    ;point to mesg2
acall   wr_string                   ;write mesg2 to LCD

stop:   ajmp    stop                ;soft halt  

wr_string:
acall   lcd_busy        ;wait until LCD not busy
mov a, R7                           ;get LCD position
orl a, #080h                        ;msb set for LCD RAM address
movx    @R0, a                      ;write lcd_cmd to set line & char
nxt_char:
acall   lcd_busy                    ;wait until LCD not busy
clr a
movc    a, @a+dptr          
inc dptr                            ;point to next byte in string
jz  str_end                         ;if 0 then end of string

mov R1, #(lcd_wr AND 255)           ;Load R1 with wr_data address
movx    @R1, a                      ;Write char to LCD
sjmp    nxt_char                    ;get next char in string
str_end:    ret

lcd_busy:
mov R1, #(lcd_st AND 255)       ;Load R1 with status address
movx    a, @R1                          ;read LCD status
jb  acc.7, lcd_busy         ;keep checking until busy bit clear
ret

mesg1:  db  "Hello   ",0
mesg2:  db  "World ",0
END

Все отлично работает Однако у меня возникли проблемы с выводом переменной на ЖК-дисплей. Замена # mesg1 шестнадцатеричным значением (ascii для простоты) просто выводит на экран зашифрованные символы. Так же как и вызов подпрограммы, которая просто увеличивает значение каждый раз, поэтому я не уверен, в каком формате должны быть данные, когда они перемещаются в dptr.

Что-нибудь глупое, что я пропустил?

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос