while schleife ?????

Gast #220546
Hallo zusammen,
ich habe ein Problem!!!

Ich habe ein Display an dem ich die RTS-Leitung abfrage. D.h. ich frage
erst die RTS-Leitung ab, bevor ich neue Daten an das Display sende.

//------------------------

while (PIND.3==1) {}

//------------------------

(programmiert mit CodeVision)

Das heißt das der µC so lange nichts tun kann, bis das Display das O.K.
gibt. Was ja nicht schlecht ist. Jetzt soll aber auf dem Display auch
eine Uhr laufen die über einen Timer-Interrupt gesteuert wird. Wenn ich
die Uhr ganz normal anzeigen lasse,(keine Daten sende) gibt es keine
Probleme. Wenn ich aber Daten an das Display sende, (Menü auf dem
Display) dann hält das natürlich alles auf und nach einigen, gesendeten
Daten geht die Uhr natürlich nach. Heißt das, dass eine
"while-Schleife" keine Interrupt's zulässt??
Hättet ihr eine andere Möglichkeit??

:o(

Grüße Marcel
Persönliche Seite
> Heißt das, dass eine "while-Schleife" keine Interrupt's zulässt??
Nein. Interrupts werden normalerweise nicht einfach so deaktiviert.
Ausnahme sind jedoch andere Interrupts oder eventuell der EEPROM
Zugriff. Ansonsten ist es sinnvoll das Bit zu setzen welches den Timer
automatisch wieder auf Null setzt, da es mal den ein oder anderen Takt
mehr oder weniger dauert (der aktuelle Befehl muss meines wissens erst
beendet werden) bis der Interrupt angesprungen wird.
Gast
Falls es jemanden interessiert...

ich habe es hin bekommen.
Den Code habe ich wie folgt geändert:

while (PINB.1==1)
    {
      // Global enable interrupts
      #asm("sei")
    }
Gruß Marcel
Gast
Ich aktiviere die Interrupts nicht immer und immer wieder!! Ich habe nur
bemerkt das meine Uhr zu langsam läuft. (siehe erklärung oben) Wenn ich
keine Daten an das Display schicke, dann läuft es ohne Probleme. Werden
aber viele Daten gesendet, dann wird die ungenauigkeit immer größer.
Daraus schließe ich, dass in der while-Schleife keine Interrupts
zugelassen werden. (Uhr wird über Timer-Interrupt gesteuert) Ich kenne
die genaue Funktion von der while-Schleife nicht aber das würde es
erklären. Deshalb habe ich einfach mal die Interrupts in der
while-Schleife wieder gesetzt. Und es schein zu funktionieren. Der
Interrupt wird bei mir generell nur einmal in der "main"-Schleife
aktiviert und nie mehr ausgeschaltet.

Grüße und schönes WE...

Marcel

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.