www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle fehlerhafte Zeichen


Autor: Benshee (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benshee (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja hast recht, doof das man das nicht selber sieht!

Vielen Dank

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tippfehler??

Autor: Benshee (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.