mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil C51 und Interrupts


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kennt sich jemand mit dem Schreiben von Interrupt-Routinen beim C51 von
Keil aus?

Habe folgendes Programm:

Die serielle Schnittstelle soll interruptgesteuert arbeiten, mit einem
Ringbuffer.
Die Ringbuffer-Routinen funktionieren, und die Routinen für das
Schreiben/Lesen in den seriellen Buffer sind ebenfalls geschrieben,
aber noch nicht getestet.

In den Schreib/Lese-Routinen lösche ich das ES-Bit, um zu verhindern,
dass ein serieller Interrupt den Buffer durcheinander bringt, während
ich darauf zugreife.

Meine Frage ist nun, was ich für den seriellen Interrupt schreiben
muss.

1. Da ich die Schreib/Lese-Routinen für den Ringbuffer sowohl im
Interrupt als auch in den Routinen für die serielle Schnittstelle
verwende, müssen die Ringbuffer-Routinen "reentrant" sein, richtig?

2. Kann ich den Interrupt in einer anderen Registerbank laufen lassen?
Oder verhaspele ich mich da dann mit den Ringbuffer-Routinen, da die in
der eigentlichen Applikation ja in RB0 laufen?

3. Was muss ich sonst noch beachten?

Gruß Stefan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Syntax für Interrupt-Handler ist beim Keil:

void funktions_name ( void ) interrupt interrupt_nummer
{
}


Man sollte aber tunlichts vermeiden irgendwelche Funktionsungetüme aus
der PC-Welt zu übernehmen, ein 8051 läuft nunmal nicht mit 4GHz und 2GB
RAM.

Daher würde ich im Empfangsinterrupt nur das Schreiben in den
Empfangspuffer und im Sendeinterrupt das Lesen aus dem Sendepuffer
direkt einfügen (keine Unterprogramme).
Dann brauchst du auch nichts reentrantes.
Eine andere Registerbank im Interrupt lohnt selten.

Und vor allem das Small-Modell benutzen, die Puffer können bei Bedarf
als pdata oder xdata deklariert werden.

Das Large-Modell benötigt im Schnitt doppelt soviel Codespeicher und
läuft höchstens halb so schnell.
Das Large-Modell ist nur für die Leute, die nicht wissen wollen, daß
der 8051 superschnellen data-Speicher und schnarchlahmen xdata-Speicher
hat.


Peter

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,

danke für Antwort. Ich bin auch auf den Trichter gekommen, den
Ringspeicher direkt in der ISR zu behandeln. Werd ich so machen.
Hoffentlich bleibt genug Zeit übrig, um auch ein bisschen Handshake zu
machen ;-)

Gruß Stefan

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.