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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.