Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle fehlerhafte Zeichen


von Benshee (Gast)


Lesenswert?

Ich habe einen 8051 und einen MAX 232, wenn ich den in Bascom 8051 
programiere dann sendet die serielle Schnittstelle die richtigen 
zeichen. Aber wenn ich nur in Assembler mal die Zahl 100 übertragen will 
dann kommt jedesmal nur so ein komisches "y" mit ü Punkte oben drauf 
raus. Baudrate stimmt und sonnst weiss ich nicht mehr weiter.
                       Hier ist mal das Programm:
; 13.12.02 16:20:42

#cpu = 80C31  ; @24 MHz
           org 0h
    ; Stack auf 30h hinter Registerbänke und Bit-Area setzen
           mov sp,#30h
    ; Timer programmieren
           mov PCON,#00h
           mov TMOD,#22h
           mov TH1, #230
           mov TL1, #230
           setb TCON.6
           mov SCON,#052h

    start:
mov a,100
mov sbuf, a
         ajmp start
    END

von crazy horse (Gast)


Lesenswert?

genau habe ich mir dein Programm/Initialisierung nicht angeschaut (ewig 
nichts mehr mit 51er Assembler gemacht), aber auf jeden Fall überfährst 
du mit deinem Programm die serielle Schnittstelle. Du mußt schon warten, 
bis das Byte rausgeschoben oder zumindest im Shiftregister ist, bevor du 
was neues reinschreiben kannst. Gibt irgendein Flag dafür, das anzeigt, 
daß man schreiben kann.

von Benshee (Gast)


Lesenswert?

ja hast recht, doof das man das nicht selber sieht!

Vielen Dank

von edi (Gast)


Lesenswert?

hi,
Du hast 2400 baud eingestellt...auch am PC ?
nach sbuf,a solltest Du eine schleife einbauen,damit etwas zeit 
verbraten wird.
dann muesstest Du jeweils ein '' d ''sehen

von thkaiser (Gast)


Lesenswert?

Du möchtest "100" an den PC senden oder ASCII 100 = "d" ????
Dann solltest Du es im letzteren Fall mit

mov a,#100

versuchen.

Im ersteren Fall mußt Du drei Ascii-Zeichen übertragen.

Im jetzigen Prog liest er den Inhalt des internen SRAM.

Ansonsten schließe ich mich crazy horse an.

von edi (Gast)


Lesenswert?

tippfehler??

von Benshee (Gast)


Lesenswert?

Ich habe jetzt ein neues Programm geschrieben , daß geht besser.
Aber immer noch kommen nur komische zeichen anstat einer 100.

; 13.12.02 16:20:42

#cpu = 80C31  ; @24 MHz



;---------------------------------------------------------------

; Programmbeginn
;---------------------------------------------------------------
 ORG 0h
        jmp start


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; ein Byte aus ACC ausgeben
serial_out:
;  auf Abschluß des letzten Sendevorganges warten
        jnb SCON.1,serial_out
        clr SCON.1
;  senden
        mov SBUF,a
  jmp main
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

; Initialisierung
;---------------------------------------------------------------
start:

; serielle Schnittstelle aktivieren
;  1200 Baud, Modus 1
        mov TL1, #204
        mov TH1, #204

; die SFR's initialisieren
        mov SP,  #20h
        mov SCON,#82
        mov TMOD,#32
        mov TCON,#64

; Hauptprogramm
;---------------------------------------------------------------
main:

mov a, #222

jmp serial_out

; Programmende
;---------------------------------------------------------------
ende:
        jmp ende
END

von thkaiser (Gast)


Lesenswert?

ähm, könnte es sein, daß das Zeichen "Ì" ist? Das ist der Ascii-Code 
222, den Du sendest.
Um eine "100" zu senden, mußt Du drei Ascii-Zeichen senden:

 49,48,48 (dezimal)

von thkaiser (Gast)


Lesenswert?

Nachtrag: Wenn Du nur einmal eine "100" ausgeben möchtest, mußt Du 
natürlich den Übertragungsvorgang nach der 2. "0" beenden - sonst 
kriegst Du tausende von "100" übertragen...

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.