Serielle Schnittstelle fehlerhafte Zeichen

Gast #19222
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
Gast #19223
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.
Gast #19226
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.
Gast #19228
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

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