Forum: Mikrocontroller und Digitale Elektronik Interruptbehandlungen beim 80C535 in C


von Dennis (Gast)


Lesenswert?

Habe mal zwei Fragen zu den Interruptbehandlungen beim 80C535 in C. Habe 
zwar in vielen Büchern und Dokus gelesen das man den Interrupten 
verschieden Prioritäten geben kann, aber dieses nicht durch 
Bitadressierung erreichen kann. Nur leider finde ich dazu keine 
Beispiele. Hoffe ihr könnt mir mal ein Beispielcode schicken. Im 
weiteren habe ich gelesen das bei Interruptbehandlungen keine 
Werteübergabe möglich ist, aber leider stand in den Büchern keine 
Begründung dazu, warum ist dieses denn so?

von Joerg Wunsch (Gast)


Lesenswert?

Du bist hier wohl im flaschen Forum.  Die Leute hier können Dir
zu AVR und MSP weiterhelfen, aber eher wenig zu MCS51.

von Dennis (Gast)


Lesenswert?

oh sorry bin hier leider durch google, mit der interruptsuche, drauf 
gestoßen.

von Peter D. (peda)


Lesenswert?

Ganz so falsch bist Du hier nicht.

Es gibt auch ne Menge 8051-Leute hier.

Das war ja auch erst nur die AVR-Rubrik und später ist der MSP 
dazugekommen.

Kann also durchaus sein, daß als nächstes der C51 hier Einzug hält.

Ansonsten kannst Du Deine Fragen ja im "Allgemein" Forum stellen.


Zu Deiner Frage:

Natürlich kannst Du auch auf das IP-Register bitweise zugreifen, da 
dessen Adresse durch 8 teilbar ist.
Einfach das entsprechende Bit setzen und schon hat dieser Interrupt die 
hohe Priorität, d.h. er kann alle Interrupts unterbrechen, bei denen das 
Bit im IP nicht gesetzt ist.


Die andere Frage, beantwortet sich von selbst. Da den Interrupt keiner 
aufruft, kann ihm auch keiner einen Wert mitgeben.
Ein Interrupt wird z.B. ausgelöst, indem ein Pin von 1 nach 0 wechselt. 
Wie soll dieser Pin dann einen Wert übergeben ???


Peter

von Dennis (Gast)


Lesenswert?

Danke für Deine Antwort. Habe gleich mal versucht das IP0.4 Bitweise zu 
setzen, es kommt aber leider eine Errormeldung das er dieses Symbol 
nicht kennt.
Und zu den Übergabeparametern. Da hast du Recht aber was ist wenn ich 
nach einen Interrupt mein Main Programm anders ablaufen lassen möchte 
und dort einen Parameter abfragen möchte? Ich finde es auch traurig das 
alle Autoren(die ich bisher gelesen habe)schreiben das bei 
Hardwareinterrupts keine Rückgabe oder Übergabe von Parametern möglich 
ist, aber ich nicht eine einzige Begründung darüber lese. Das Problem 
ist ja auch, ich würde es gerne einfach so hinnehmen, aber leider muß 
ich in der FH ein Referat darüber halten und da möchte ich dann doch 
schon gerne die genauen Gründe dafür haben.
Aber schon mal vielen Dank für die schnelle Antwort.

von Peter D. (peda)


Lesenswert?

Mit IP0.4 wirst Du auch kein Glück haben, der "." Operator hat in C eine 
andere Bedeutung.

Schau doch einfach mal im REG51.H nach, welche Namen für die Bits 
definiert sind oder definiere selber einen mit der "sbit" Direktive.


Das ein Interrupt nichts zurückgibt hat genau den gleichen Grund: Das 
Main weiß ja nicht, wann der Interrupt zuschlägt. Und wenn der dann 
heimtückisch mal eben ein Register mit einem anderen Wert laden würde, 
ist das Main "not amused".

Natürlich muß man auch mit Interrupts kommunizieren können, z.B. über 
globale Variablen.


Peter

von Dennis (Gast)


Lesenswert?

Habe in der "REG51.H" nachgeschaut.
...
...
at 0xB8 sfr IP     //Einzige Eintrag mit IP
...
at 0xA9 sbit ET0   //Freigabe für Interrupttimer 0
...
at 0xB9 sbit PT0
...

Habe in meinen Unterlagen mal nachgeschaut und IP0/1 soll auf
0xB9 & 0xA9 im sfr liegen nur leider stimmt das nicht mit der header 
Datei überein, oder habe ich mich da jetzt geirrt?
Habe zum prg jetzt eine globale Variable benutzt und IP0/1 Byteweise 
gesetzt. Aber es interessiert mich welcher Eintrag in der header Datei 
dafür verantwortlich ist und wie ich die Prioitäten auch Bitweise setzen 
kann.

Dennis

von Peter D. (peda)


Lesenswert?

Im allgemeinen sollten die *.h-Files stimmen. Ansonsten sieh einfach im 
entsprechenden Datenblatt nach.

Zur Bitbeeinflussung werden in C gerne Masken verwendet. Ein guter 
Compiler nimmt dann wenn möglich automatisch die richtigen Bitbefehle.

Ansonsten sieh in Deinem Compiler Handbuch nach.
Im "C51-Primer" steht auch sehr viel drin.


Peter

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.