Bardzo proszę o pomoc. Już nie wiem co mam nie tak. Napisałem program do obsługi LCD 2x16. Po uruchomieniu wyświetla tylko literkę 'p' na początku i to wszystko. Co więcej, dzieje się też tak wówczas, gdy wykomentuję wywołanie procedur odpowiedzialnych za czyszczenie LCD i wyświetlanie znaków, więc coś nie tak jest w procedurze inicjalizującej.
Z góry dziękuję i pozdrawiam.
;------------------------------------
;Obsluga LCD, kwarc 12 MHz
;tryb pracy - 4 linie danych
;znak przekazywany w R2
;------------------------------------
RS equ P1.2
E equ P1.3
DB4 equ P1.4
DB5 equ P1.5
DB6 equ P1.6
DB7 equ P1.7
ljmp Program
org 100h
tablica: DB 'D','z','i','e','n',' ','d','o','b','r','y'
org 120h
Program:
lcall LCDinit
lcall LCDclear
mov DPTR,#tablica
mov B,#00h
Wyswietl:
mov A,B
movc A,@A+DPTR
mov R2,A
inc B
lcall LCDznak
mov A,B
xrl A,#0Eh
jnz Wyswietl
LCDinit:
mov P1,#00h
clr RS
clr E
setb E
orl P1,#20h
clr E
mov A,#14h
lcall Pauza
anl P1,#0Fh
orl P1,#20h
setb E
clr E
anl P1,#0Fh
orl P1,#80h
setb E
clr E
mov A,#01h
lcall Pauza
anl P1,#0Fh
orl P1,#00h
setb E
clr E
anl P1,#0Fh
orl P1,#0E0h
setb E
clr E
mov A,#01h
lcall Pauza
anl P1,#0Fh
orl P1,#00h
setb E
clr E
anl P1,#0Fh
orl P1,#60h
setb E
clr E
mov A,#01h
lcall Pauza
ret
LCDclear:
mov P1,#00h
clr RS
orl P1,#00h
setb E
clr E
mov P1,#00h
orl P1,#10h
setb E
clr E
mov A,#14h
lcall Pauza
setb RS
ret
LCDznak:
mov P1,#00h
setb RS
mov A,R2
anl A,#0F0h
orl P1,A
setb E
clr E
mov A,R2
anl A,#0Fh
swap A
orl P1,A
setb E
clr E
mov A,#01h
lcall Pauza
ret
Pauza:
Petla:
mov B,#07Bh ;2 cykle
djnz B,$ ;2 cykle
djnz ACC,Petla ;2 cykle
ret
end
Z góry dziękuję i pozdrawiam.