mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wartezeit einbauen, beim XC167


Autor: Kücken (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe die Frage in einem anderen Beitrag gestellt, aber da schaut 
keiner rein, denn die Überschrift sieht anderst aus, egal ich probier es 
noch ein mal:

Bei windows mit µVision programmiere ich einen XC167
Eigenltich möchte ich einfach eine LED ein und aus machen und damit man
sie blinken sieht, brauch ich eine Pause dazwischen. Wie kann ich das 
denn realisieren ohne, dass ich gleich nen Timer mitlaufen lassen muss 
und so.
Gibt es da in C nicht ein Befehl?

THX

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
long int i;
LED_EIN
for(i=0;i<=0xF0000;i++);
LED_AUS
for(i=0;i<=0xF0000;i++);

Autor: Thomas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achtung: Wenn Du  die Wartezeit mit einer idle-Schleife implementierst, 
paß auf, daß der Watchdog nicht zuschlägt! Falls Du ihn nicht 
deaktiviert hast oder über einen interrupt regelmäßig bedienst, ändere 
die Schleife:

for(i=0;i<=0xF0000;i++) {
    _srvwdt_();
}

Die skizzierte idle-Schleife hat halt den Nachteil, daß Du wirklich 
nichts anderes in dieser Zeit machen kannst.
Benutzt Du ein RTOS oder hast Du nur ein Hauptprogramm mit der 
klassischen Endlosschleife? Im letzteren Fall kannst Du ja den watchdog 
regelmäßig bedienen und einen einfachen Zähler mitlaufen lassen. Die LED 
kannst Du dann aus- / einschalten, wenn ein bestimmter Zählerstand 
erreicht wird:

#define LED_TIMEOUT 0xF0000L

sbit LED_PORT = ...
sbit LED_PORT_D = ...

main() {

    long int led_tmr = 0L;

    /* port direction = out */
    LED_PORT = 0;
    LED_PORT_D = 1;

    for (;;) {

        _srvwdt_();
        led_tmr++;

        if (led_tmr >= LED_TIMEOUT) {
            led_tmr = 0L;
            LED_PORT = !LED_PORT;
        }

        /* und hier alles andere */
        ...
    }
}

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.