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
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.
ja hast recht, doof das man das nicht selber sieht! Vielen Dank
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
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.
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
ä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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.