Forum: Mikrocontroller und Digitale Elektronik binäre Ausgabe auf die Schnittstelle mit 8051


von Tom B. (tom51)


Lesenswert?

Guten Abend!

Ich möchte mit diesem Programm eine weitere Subroutine erstellen. Jedoch 
habe ich das Problem, dass bei der Binären ausgabe das fünfte und das 
sechste Bit bei Eingabe von 0hex trotzdem gesetzt sind. Wäre sehr 
dankbar wenn da jemand drüber schauen würde.

Hier die Unterprogramme:

init:

    mov     R1,#08h
    clr     cy

Eingabe:

    lcall   SP_InWait           ;endlos auf Zeichen warten

    jmp     rotate_left

vonRholen:

    mov     A,ueberlaufR


rotate_left:

    rlc     A
    mov     ueberlaufR,A
    jc      Einsausgabe

Nullausgabe:

    mov     A,#30h
    lcall   SP_OutA       ;Ausgabe als ASCII auf die Serielle 
Schnittstelle
    ljmp    dekrementieren


Einsausgabe:

    mov     A,#31h
    lcall   SP_OutA


dekrementieren:

    djnz    R1,vonRholen

Gruß

Tom

von spess53 (Gast)


Lesenswert?

Hi

#30h ist das Zeichen für '0' im ASCII-Zeichensatz. Und da sind nun mal 
Bit 4 und 5 gesetzt. Eine 'binäre' Null wäre #00h.

MfG Spess

von Tom B. (tom51)


Angehängte Dateien:

Lesenswert?

Wow, mit so einer schnellen Antwort habe ich nicht gerechnet!
Das hast du leider falsch verstanden. Die Zeichen werden einzeln 
nacheinander ausgegeben. Ich möchte also die einzelnen ASCII - Zeichen 
auf die serielle Schnittstelle ausgeben.
Habe das Flussdiagramm im Anhang.

MfG tom

von Tom B. (tom51)


Angehängte Dateien:

Lesenswert?

Das erste Flussdiagramm war leider nicht ganz richtig.
Habe das richtige in diesem Anhang

MfG
tom

von spess53 (Gast)


Lesenswert?

Hi

Ok, da habe ich dich etwas falsch verstanden.

Aber ich würde mal darauf tippen, das du mit

>   lcall   SP_InWait           ;endlos auf Zeichen warten

das ASCII-Zeichen für Null, und nicht 00h bekommst. Womit sendest du das 
an den µC?

MfG Spess

von Tom B. (tom51)


Lesenswert?

mit

>   lcall   SP_InWait           ;endlos auf Zeichen warten

wartet der µC auf eine Eingabe der Tastatur. Das ASCII - Zeichen ist 
dann binär im Accu und soll dann binär über die serielle Schnittstelle 
ausgegeben werden. Das funktioniert auch, jedoch sind die bits 4 und 5 
auch gesetzt wenn ich z.B. null eingebe.
Vielen Dank für deine schnelle Antwort!

MfG
tom

von holger (Gast)


Lesenswert?

>Das funktioniert auch, jedoch sind die bits 4 und 5
>auch gesetzt wenn ich z.B. null eingebe.

Null ASCII ist 0x30. Binär 00110000. Da sind deine zwei
ungewollten Bits;)

von spess53 (Gast)


Lesenswert?

Hi

Nochmal: Wo kommt deine '0' her? Das was du in deiner Ausgabe erhältst 
ist die binäre Schreibweise für das ASCII-Zeichen für Null.

   30h = 00110000b

MfG Spess

von Tom B. (tom51)


Lesenswert?

Besten Dank an Euch!

Das Programm hat also von Anfang an funktioniert:)
Das hätte mir nicht passieren dürfen, aber wenigstens habe ich es nun 
verstanden.

mfg tom

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.