Gut.
Ich hab mal bisschen was rausgesucht.
Damit sollte die Initialisierung und das Senden schonmal funktionieren.
Ist aber kein vollständiges Programm.
Code:
INCLUDE ....... ;dein prozessor
;-------------------------------------------------------------------------------
;variablendeklaration
rs EQU px.x
rw EQU px.x
en EQU px.x
DB4 EQU px.x
db5 EQU px.x
db6 EQU px.x
db7 EQU px.x
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
lcd-com:
;sendet einen Befehl im ACC ans LCD
CLR rs
CLR rw
JMP lcd-write
;-------------------------------------------------------------------------------------
lcd-out:
;sendet ein Zeichen im ACC ans LCD
SETB rs
CLR rw
;-------------------------------------------------------------------------------------
lcd-write:
;beeinflusst ACC,Carry und R0-R2
MOV R2,#02h ;zwei durchläufe da zwei nibbles
lcd-write1:
call wait ;es könnte kurz vorher gesendet worden sein also lieber
;mal etwas warten bis das lcd bereit ist
RLC A ;daten
MOV db7,C ;schrittweise
RLC A ;in carry schieben
MOV db6,C ;und an datenport
RLC A ;anlegen
MOV db5,C
RLC A
MOV db4,C
SETB en ;schreibimpuls
CLR en
DJNZ R2,lcd-write1 ;wiederholen wenn es der erste durchlauf war
RET
;-------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
lcd-ini:
CLR en
CLR rs
CLR rw
CLR db7 ;lcd
CLR db6 ;8-bit
SETB db5 ;modus
SETB db4 ;
call wait-long ;länger warten
SETB en ;
CLR en ;senden
call wait-long ;länger warten
SETB en ;nochmal
CLR en ;senden
call wait-long ;länger warten
SETB en ;nochmal
CLR en ;senden
call wait ;länger warten
CLR DB4 ;4-bit modus
SETB en ;senden
CLR en
;-------------------------------------------------------------------------------------
;dispalyfunktionen initialisieren
MOV A,#28h ;4bit, 2lines, 5x7
call lcd-com
MOV A,#01h ;clr
call lcd-com
MOV A,#02h ;home
call lcd-com
MOV A,#06h ;inc no shift
call lcd-com
MOV A,#0ch ;disp. on ,curs. off ,blink off
call lcd-com
RET
;-------------------------------------------------------------------------------------
wait-long:
;evtl die register retten wenn du sie brauchst
MOV R0,#00h
MOV R1,#00h
wait-long1:
DJNZ R0,wait-long1
DJNZ R1,wait-long1
RET
;-------------------------------------------------------------------------------------
wait:
;evtl register retten wenn du sie brauchst
MOV R0,#00h
wait1:
DJNZ R0,wait1
RET
;-------------------------------------------------------------------------------------
Damit solltest du schon weiterkommen.
Ist aus einem funktionstüchtigen Programm. Sollte also klappen.
Lesezeichen