Problem: Interupt der ser. Schnittstelle

Gast #127340
Lesenswert?

Hi!

Ich habe hier ein kleines Testprogramm geschreiben, welches bei einem
Interupt der seriellen Schnittstelle den Pin 2.0 löschen soll.

Mein Problem ist, dass offensichtlich direkt nach dem Reset das Bit
gelöscht wird. Warum???
Es sollte normalerweise erst bei einem interupt gelöscht werden.

Ich verwende einen AT89C51ED2, an den Schnittstellenleitungen ist ein
MAX232 angeschlossen.
Die Schnittstelle funktioniert aber, ich kann darüber mein Programm
laden.

Weis jemand was da falsch läuft?

MfG Christian
Angehängte Dateien:
Gast #127341
Lesenswert?

Das kann verschiedene Ursachen haben.
Ein kleiner "Einschaltknacks" an der RXD-Leitung, und schon ist es
passiert. Eine weitere Fehlerquelle: Die Reihenfolge der
Initialisierung der SFR. Ich umgehe diese Fallen immer mit dem
manuellen Rücksetzen der Interrupt-Flags, bevor ich den Interrupt
freigebe.
Gast #127346
Lesenswert?

Hallo Christian,

beim 8051 werden die Bits TI und RI, die geodert den seriellen
Interrupt erzeugen, nicht per Hardware wieder gelöscht. Sprich, das
mußt Du per Software in der seriellen Interrupt-Routine erledigen,
sonst springt der µC da sofort wieder rein, sobald er sie verläßt.

also etwa so:

SER_IRQ:  CLR RI
          CLR TI
          CLR P2.0
          RETI

(Da Du in deinem Beispiel nichts sendest, würde es auch genügen, nur
den RI zu löschen.)
Am besten löschst Du die beiden Bits auch nochmal in der
Initialisierungsphase (nach dem setzen der SFRs, vor der Freigabe der
IRQs). Dann kannst Du sicher sein, daß der µC nicht - durch
irgendwelcher Einschaltimpulse gestört - in den SER-IRQ verzweigt.

Hoffe, das hilft,

Markus_8051

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