www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem: Interupt der ser. Schnittstelle


Autor: Christian (Gast)
Datum:
Angehängte Dateien:

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

Autor: thkais (Gast)
Datum:

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

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..zieh doch mal das serielle Kabel und resette...besser?
Ulli

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde den Pin entweder toggeln oder zeitlich begrenzt setzen.
Dann weißt du sofort mehr.

SG Josef

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Abziehen des seriellen Kabels funktioniert nicht!

Aber ich werde den Bit mal zeitlich begrenzen, Danke!

MfG Christian

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann es sein das du das bit erst mal setzen mußt ... beim einschalten
waren glaube ich immer alle bit an den audgängen gelöscht beim 80c51
...

CA

Autor: Markus_8051 (Gast)
Datum:

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

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.