Forum: Mikrocontroller und Digitale Elektronik Keil C51 und Interrupts


von Stefan (Gast)


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

von Peter D. (peda)


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

von Stefan (Gast)


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

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.