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?
Du bist hier wohl im flaschen Forum. Die Leute hier können Dir zu AVR und MSP weiterhelfen, aber eher wenig zu MCS51.
oh sorry bin hier leider durch google, mit der interruptsuche, drauf gestoßen.
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.