fantom: "mapowanie urzadzen na przestrzen adresowa" to powinno troche inaczej wyglądać, a już napewno w przypadku uC '51, gdzie byłby potrzebny rejestr do zatrzaskiwania adresu, zresztą sam o tym piszesz.
"P0 podciagniety wewnetrznie" - uC '51 nie posiada wewnętrznych rezystorów podciągających na porcie P0.
Tu są procedury do ossługi LCD w asm '51:
LCD_INIT: PUSH ACC ;PROCEDURA INICJALIZACJI WYSWIETLACZA
PUSH PSW
CLR RW
CLR RS
CLR ENABLE
MOV B,#00Dh
LOOP1: MOV A,#0FFh
DJNZ ACC,$
DJNZ B,LOOP1
MOV P1,#00111000B
SETB ENABLE
CLR ENABLE
MOV B,#010h
LOOP2: MOV A,#0FFh
DJNZ ACC,$
DJNZ B,LOOP2
SETB ENABLE
CLR ENABLE
MOV A,#099h
DJNZ ACC,$
SETB ENABLE
CLR ENABLE
MOV A,#049h
DJNZ ACC,$
MOV P1,#00111000B
SETB ENABLE
CLR ENABLE
MOV A,#039h
DJNZ ACC,$
MOV P1,#00000110B
SETB ENABLE
CLR ENABLE
MOV A,#029h
DJNZ ACC,$
MOV P1,#00001100B
SETB ENABLE
CLR ENABLE
MOV A,#029h
DJNZ ACC,$
LCALL CLEAR_L
POP PSW
POP ACC
RET
;;;;;;;;;;;;;
WRITE: CLR RS ;PROCEDURA WYSYLA DO WYSW. ZNAK ASCI Z R2
SETB RW
BUSY: CLR ENABLE
MOV P1,#0FFH
SETB ENABLE
JB P1.7,BUSY
CLR ENABLE
CLR RW
MOV P1,B
SETB RS
SETB ENABLE
CLR ENABLE
RET
;;;;;;;;;;;
IWRITE: CLR RS ;PROCEDURA WYSYLA DO WYSW. ROZKAZ Z R2
SETB RW
BUSY1: CLR ENABLE
MOV P1,#0FFH
SETB ENABLE
JB P1.7,BUSY1
CLR ENABLE
CLR RW
MOV P1,B
SETB ENABLE
CLR ENABLE
RET
;;;;;;;;;;;
CLEAR_L: PUSH ACC ;PROCEDURA CZYSCI EKRAN I USTAWIA KURSOR NA POZYCJI 0
PUSH B
CLR RS
MOV P1,#00000001B
SETB ENABLE
CLR ENABLE
MOV B,#06h
CL_L: MOV A,#0FFh
DJNZ ACC,$
DJNZ B,CL_L
POP B
POP ACC
RET
;;;;;;;;;;;;;
POZYCJA: MOV A,B ;PROCEDURA USTAWIA KURSOR NA POZYCJI ZAWARTEJ W B
ORL A,#10000000B
MOV B,A
LCALL IWRITE
RET
Deklaracje w programie wyglądały tak:
STACK SEGMENT IDATA
PROGRAM SEGMENT CODE
VAR SEGMENT DATA
BITVAR SEGMENT BIT
T0_H EQU 03Ch ;6MMz PRZERWANIE CO 0.1 sek
T0_L EQU 0B0h
T1_H EQU 0ECh ;PRZERWANIE CO 10 msek
T1_L EQU 078h
ENABLE EQU 0B0H.0
RW EQU 0B0H.1
RS EQU 0B0H.7
R7AD EQU 007H
R6AD EQU 006H
R5AD EQU 005H
R4AD EQU 004H
R3AD EQU 003H
R2AD EQU 002H
R1AD EQU 001H
R0AD EQU 000H
RSEG VAR
CZ_WYM: DS 8 ;CZASY OPOZNIEN WYMAGANE
CZ_BIEZ: DS 8 ;CZASY OPOZNIEN BIERZACE
KEYS: DS 1 ;STAN KLAWIATURY
T_KEYS: DS 1 ;TYMCZASOWY STAN KLAWIATURY
CZ_STAT: DS 1 ;STAN CZUJNIKOW
CZ_TMP: DS 1
STATUS: DS 1 ;CZUJNKIKI NO/NC
REFRESH: DS 1 ;ODLICZANIE WYSWIETLANIA
D_SEK: DS 1
TIME: DS 1
TMP: DS 1
AL_NR: DS 1
RSEG BITVAR
TMP_F: DBIT 1
ALARM: DBIT 1
ACTIV: DBIT 1
S_BY: DBIT 1
RSEG STACK
DS 020H
CSEG AT 00H
AJMP INIT
CSEG AT 0BH
AJMP T0_SERV
CSEG AT 1BH
AJMP T1_SERV
RSEG PROGRAM
ORG 02CH
INIT: MOV SP,#STACK-1
Pochodzi to z programu urządzenia działającego już trochę czasu...
Aha - sposób podłaczenia LCD do uC można wywnioskować na podstawie deklaracji pinów (8bit).