mikrocontroller.net

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


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joerg Wunsch (Gast)
Datum:

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

Autor: Dennis (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

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.