Frage zu Assembler-Code zeile (8051)

Gast #1397281
Lesenswert?

Hallo,

ich habe hier einen längeren Assembler Code denn ich gerne verstehen und 
dann in C neu schreiben möchte.
Das ganz ist auf nem 8051.

Allerdings verstehe ich eine Zeile von dem Code nicht:

;+++++++OUTCOM+++++++++++++++
OUTCOM:

  PUSH    DPH
  PUSH    DPL
  MOV     DPTR,   #$E000  <-was passiert hier???
  MOVX    @DPTR,  A
  NOP
  POP     DPL
  POP     DPH
  LCALL   WAIT40
  RET

Wenn ich das richtig verstanden habe wird hier A an ein Display 
geschickt, mir ist nur noch nicht klar wie das passiert und was dort das 
$ in der einen Zeile macht?
Kann mir da einer helfen?
Moderator (Firma: Titel) Persönliche Seite #1397285
Lesenswert?

> Wenn ich das richtig verstanden habe wird hier A an ein Display
> geschickt, mir ist nur noch nicht klar wie das passiert
Das Display hängt wohl am AD-Bus, und mit der Adresse E000 wird das Ding 
entweder selektiert oder entsprechende Signale auf dem Bus ausgegeben. 
Für eine genauere Analyse bräuchte man einen Schaltplan...

> was dort das $ in der einen Zeile macht?
Es bedeutet, dass eine Hex-Zahl folgt.
Gast #1397288
Lesenswert?

Der Wert in A wird an Adresse (hex=$) E000 geschrieben (wobei an Adresse 
E000 vermutlich Dein Display hängt).

Das muss beim 8051 über den DPTR (Data Pointer) gemacht werden, ist das 
einzige Register, was 16 Bit breit ist.

Gruss
Axel
Gast #1397290
Lesenswert?

PUSH    DPH ;Das High Byte des DPTR(Datenpointer)wird gesichert
  PUSH    DPL ;Das Low Byte ebenfalls
  MOV     DPTR,   #$E000  <-was passiert hier??? ;Der DPTR wird neu 
eingestellt. Leider hat der 8051 nur ein 16 bit Datenpointer
  MOVX    @DPTR,  A ';Externer Schreibzugriff z.b Ram , Display usw
  NOP ;No Operation
  POP     DPL ;Das gesicherte Low Byte zurückschreiben
  POP     DPH ;High Byte ebenfalls
  LCALL   WAIT40 ;Aufruf einer Subroutine (glaub ich zumindest ist ne 
weile her)
  RET (ende)

c.u
Commtel
#1397299
Lesenswert?

>
>   PUSH    DPH
>   PUSH    DPL
>   MOV     DPTR,   #$E000  <-was passiert hier???
>   MOVX    @DPTR,  A
>   NOP
>   POP     DPL
>   POP     DPH

Hallo Svenk,

erst wird der Inhalt des 16bit Datapointer auf den Stack gerettet.
Dann wird die Adresse E000 (hexadezimal) in den Datapointer geschrieben.
Anschließend wird der Inhalt vom Akku an die im Datapointer beschriebene 
Adresse geschickt. Zum Schluss wrid der ursprüngliche Inhalt des 
Datapointer vom Stack zurückgeholt.

Viele Grüße, Frank

Nachtrag: Was in 10 min so alles passiert, so schnell kann ich nicht 
schreiben... ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren