Forum: Mikrocontroller und Digitale Elektronik RS232 komische Zeichen


von Benshee (Gast)


Lesenswert?

Ich habe einen AT89C2051 auf einer Platiene und einen MAX232 auf der 
anderen. Und ich verbinde die Datenleitung mit einem 10cm langen Kabel. 
Und dann von dem MAX232 in den PC Win 3.11 Terminal.
Wenn ich das Programm für den Mikrocontroller in BASCOM schreibe dann 
überträgt er die richtigen Zeichen . Aber wenn ich es in Asembler 
schreibe dann kommen da nur so komische zeichen raus .

; 07.01.03 19:51:51

#cpu = 80C31  ; @24 MHz


; Initialisierung






; serielle Schnittstelle aktivieren
;  4800 Baud, Modus 1
clr TR1

mov TL1, #243
        mov TH1, #243

; die SFR's initialisieren
        mov SP,  #20h
        mov SCON,#42h
        mov TMOD,#10h
        mov TCON,#40h
       mov IE,#0h
main:
mov a,#33h




serial_out:
;  auf Abschluß des letzten Sendevorganges warten
        jnb SCON.1,serial_out
        clr SCON.1
;  senden
        mov SBUF,a
        jmp main

end

ICh habe auch die Baudrate im Terminalfenster richtig eingestellt. Ich 
weiss nicht mehr weiter. 33h ist doch eigentlich die Zahl 3 oder??? Das 
heist der Controller müßte ständig eine 3 auf den PC schreiben , ins 
Terminalfenster.

von Oliver K. (Gast)


Lesenswert?

Versuch doch mal:

mov a, '3'

die meisten Assembler verstehen das.

...Kommt jetzt immer noch keine 3 raus?

Grüße
Oliver

von thkaiser (Gast)


Lesenswert?

Hallo,
mit mov a,'3' gehts auch nicht weiter, damit lädtst Du den Inhalt des 
Internen RAM Adresse 33h....

Meine MCS-51-Kenntnisse sind zwar schon ein wenig eingerostet, aber ich 
denke, es liegt am Timer.
Du mußt Timer1 im Reload-Modus laufen lassen, also:

mov TMOD,20h

Dadurch wird Timer1 in zwei 8-Bit Register gesplittet, das Low-Byte wird 
bei jedem Maschinenzyklus um 1 erhöht, bei einem Überlauf wird 
automatisch das High-Byte ins Low-Byte übertragen.
Du brauchst also nur TH1 mit 243 zu initialisieren. Außerdem hast Du das 
Timer-Run Bit gelöscht und nicht mehr gesetzt, somit läuft der Timer 
nicht und eigentlich kann das Programm nichts senden.
By the way: Du hast den Transfer-Interrupt freigegeben, bei gesetztem 
EAL und keinem definierten Sprungvektor kann dies auch recht 
interessante Effekte haben. Also in SCON nur eine 40h reinschreiben.

Hoffe, Dir geholfen zu haben

von Niglo (Gast)


Lesenswert?

Hi.

So müsste es klappen.
Denn den Timmer im 16Bit Modus verwendet, du musst ihn aber im 
8-bit-autoreload-modus verwenden (TMOD,#20h).


; Initialisierung
;---------------------------------------------------------------

; serielle Schnittstelle aktivieren
;  4800 Baud, Modus 1
        mov TL1, #243
        mov TH1, #243

; die SFR's initialisieren
        mov SP,  #20h
        mov SCON,#42h
        mov TMOD,#20h
        mov TCON,#40h

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


MfG, Niglo

von thkaiser (Gast)


Lesenswert?

Ups - das '#' vergessen..... sollte mov TMOD,#20h heißen...

von Benshee (Gast)


Lesenswert?

Wahnsinn , vielen DANK morgen probiere ich es gleich aus und wenn es 
geht dann mache ich einen LUFTSPRUNG bis zum MOND und schreibe euch dann 
eine Ansichtskarte !!!!!!!!!!

von Benshee (Gast)


Lesenswert?

Geht immer noch nicht . Ich habe mal die Frequenz vom Quarz gemessen und 
die liegt nur bei 20 Mhz und nicht bei 24 wie drauf steht .
Kann das daran liegen ?? Aber warum geht es dann bei BASCOM???

von niglok (Gast)


Lesenswert?

Hi.

Wenn die Frequenz nicht stimmt, dann kann es auch nicht gehen.
Mit BASCOM arbeite ich nicht, also keine Ahnung.

MfG, Niglo

von Benshee (Gast)


Lesenswert?

Ich habe jetzt das Bascom Programm mit einen Disasembler in 
Maschienencode umgewandelt und habe mir den CODE angeschaut und dann das 
Programm zum Teil übernommen und jetzt geht es , warum auch immer ??

von Niglo (Gast)


Lesenswert?

Freut mich!

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.