Forum: Mikrocontroller und Digitale Elektronik 0851 Ausgabeproblem auf Serielle Schnittstelle (UART)


von Markus A. (krokodi)


Angehängte Dateien:

Lesenswert?

Hallo,

Also ich habe da ein kleineres Problem mit der Ausgabe auf den Serial 
Port.
Das Projekt geht um die Spannungsmessung 0 bis 5V-1LSB mit dem 
AD-Wandler.

Programmscprache: Assembler
Hardware: Infinion XC866 Evulations Kit

Ich machte Foldendes:

Als erstes definierte ich mir volgende Platzhalter:

Result  equ 030H     ;Resulrat der A/D-Wandlung
Result1   equ 031H   ;Vorkommastelle von dem Resultat
Result2   equ 032H    ;Erste Kommastelle von dem Resultat
Result3   equ 033H    ;Zweite Kommastelle von dem Resultat

Danach Rechnete ich meinen Eingabewert um in ASCI-Zeichen (30h-39h)

Diese Werte Schrieb ich in die Speicherzellen 31h-33h (Result1-Result3)

Nun möchte ich den Wert auf die Serielle Schnittstelle Ausgeben mit 
volgendem Algo.

;-----------------------------------------------------------------------
SEND:  MOV DPTR,#OUT
SEND1:  CLR A
  MOVC A,@A+DPTR
  CJNE A,#0FEh,SEND2
  RET

SEND2:  MOV SBUF,A

TI_SET:  JNB TI,TI_SET
  CLR TI
  INC DPTR
  JMP SEND1


OUT:  DB  Result1,02EH,Result2,Result3,05FH,056H,P3_DATA,0FEH
;-----------------------------------------------------------------------

Nun sieht aber die Ausgabe folgendermassen aus:

1.23_V°

Also er schreibt mir die Speicheradresse von Result1-Result3 und P3_DATA 
auf den Serial Port.

Nun Meine Frage: Wie kann ich dem Programm beibringen, das es den Inhalt 
von den Speicherzellen herausspukt und nicht die Speicheradresse. Was 
ist Falsch an meinem String:
OUT:  DB  Result1,02EH,Result2,Result3,05FH,056H,P3_DATA,0FEH?


Ich habe noch das kompletten Code hochgeladen, wenn meine Angaben nicht 
genügen sollten :-).

Danke für die Hilfe.
Gruss Markus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

DB definiert einen konstanten String, eine Dereferenzierung von darin 
stehenden Adressen gibt es nicht.
In Deinem String steht 0x31 0x2e 0x32 0x33 0x5F 0x56 ... - woher soll 
Deine Stringausgabefunktion wissen, daß sie den Wert 0x31 als Adresse, 
den Wert 0x2e aber als Zeichenkonstante auswerten soll?

Du musst schon selbst Deinen String zusammenbasten - am einfachsten, in 
dem Du an den entsprechenden Positionen Deines Strings die Werte 
einträgst.

Das müsste sogar mit Deinen bisherigen Bezeichnern funktionieren

OUT:
Result1: DB 0, 02eh
Result2: DB 0
Result3: DB 0, 05fh, 056h

etc...

(alternativ ist Result1 == OUT, Result2 == OUT + 2, Result3 == OUT + 3)

Womit kennzeichnest Du eigentlich das Ende Deines "Strings" OUT?

von Markus A. (krokodi)


Lesenswert?

Danke für die Antwort.

Muss es demfalls umschreiben. Dachte mir nur das mit dem String währe 
eine schöne Lösung.

Nun das Ende meines Stringes kenzeichne ich mit derm Wert 0FEH und der 
Abfrage:

CJNE A,#0FEh,SEND2
RET

Gruss Markus

von Stephan H. (stephan-)


Lesenswert?

die Inhalte von Speicheradressen werden mit @R0 und @R1 geladen.

zB.   MOV R0, Speicheradresse
      MOV A,@R0

oder  MOV A,@R1


und anders herum auch.

   zB.  MOV @R0,A

Das geht auch nur mit R0 und R1.

Meintest Du daß ??

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.