Forum: Mikrocontroller und Digitale Elektronik Interrupt handling C167


von Birgit Egger (Gast)


Lesenswert?

Hallo,

ich möchte mich erstmal bedanken bei allen die mir bis jetzt 
weitergeholfen haben - ist ein echt super forum. Ich bin ja gerade am 
Anfang mit dem uC Programmieren bzw. generell.
Ich hoffe ihr habt Geduld mit mir - ich lese momentan ziemlich viel über 
den C167 aber so ganz hab ich das alles noch nicht durchschaut.

Da hätte ich auch schon die nächste Frage, ein Interrupt ist ja dazu da, 
dass man von extern (außerhalb des C167) über einen Port z.B.: einen 
Tastendruck mitbekommt (was anderes hab ich jetzt noch nicht gelesen, wo 
ein interrupt herkommen kann). Wenn dieser Interrupt daherkommt, dann 
wird eine Methode in meinem C- Programm aufgerufen (also der Port wo der 
Taster angeschlossen ist und Interrupt- Methoden- Adresse müssen 
zusammenpassen).

In der Interrupt- Routine mache ich dann was ich machen will.
Ich hoff ich hab das bis jetzt hier richtig erklärt.

Meine Frage wäre jetzt, was bei einem Interrupt- Routinen aufruf derweil 
mit der Endlosschleife passiert. Wird da der Interrupt ausgeführt und 
dann gehts in der Endlosschleife wieder weiter?

Wäre dankbar für Antworten/Korrekturen - vielen Dank.

lg
Birgit

von Jörg S. (joerg-s)


Lesenswert?

Birgit Egger schrieb:
> Da hätte ich auch schon die nächste Frage, ein Interrupt ist ja dazu da,
> dass man von extern (außerhalb des C167) über einen Port z.B.: einen
> Tastendruck mitbekommt
Gibt noch etliche andere Quellen, die intern im Controller passieren 
können (Timer, UART, etc)

> Wenn dieser Interrupt daherkommt, dann
> wird eine Methode in meinem C- Programm aufgerufen (also der Port wo der
> Taster angeschlossen ist und Interrupt- Methoden- Adresse müssen
> zusammenpassen).
> In der Interrupt- Routine mache ich dann was ich machen will.
> Ich hoff ich hab das bis jetzt hier richtig erklärt.
Was du mit der Methode meinst weiß ich jetzt nicht genau. Aber wenn ein 
Interrupt-Quelle ein Interrupt auslöst wird die dazu passende Interrupt 
Routine aufgerufen, ja.


> Meine Frage wäre jetzt, was bei einem Interrupt- Routinen aufruf derweil
> mit der Endlosschleife passiert. Wird da der Interrupt ausgeführt und
> dann gehts in der Endlosschleife wieder weiter?
Richtig.
Siehe:
http://de.wikipedia.org/wiki/Interrupt

von Birgit Egger (Gast)


Lesenswert?

Vielen Dank Jörg,

vielen Dank für die Antwort.
Wenn ich jetzt eine Interrupt Service Routine habe:
1
void my_interrupt_service_routine(void) interrupt 0x23 {
2
   // mach was
3
}

wie kann ich das mappen dass ich die Adresse z.B.: auf Port 2.12 lege.
Muss ich das irgendwo mappen:

2.12 -> 0x23

?
Vielen Dank!!
lg
Birgit

von Jörg S. (joerg-s)


Lesenswert?

Was meinst du mit mappen?
Wenn der Interrupt was mit P2.12 anstellen soll, dann schreibst du das 
einfach in der Interrupt Routine.

von Birgit Egger (Gast)


Lesenswert?

Kann ich das so machen?

void my_interrupt_service_routine(void) interrupt P2_12 {
   // mach was
}

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

Wenn du vorher wo definierst:
#define P2_12  0x23

dann schon.

Grüsse

von Route_66 (Gast)


Lesenswert?

Hallo!
Quatsch mit Soße. Die 8051er Familie hat eine feste Zuordnung der 
Interrupt-Adressen zu den Interrupt-Quellen. 0x23 ist der seriellen 
Schnittstelle zugeordnet.

von Route_66 (Gast)


Lesenswert?

Sorry, habe nur die 0x23 gesehen, kenne die Eigenarten beim C167 aber 
nicht so genau.

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.