Forum: Mikrocontroller und Digitale Elektronik Wartezeit einbauen, beim XC167


von Kücken (Gast)


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

von Carsten (Gast)


Lesenswert?

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

von Thomas B. (Gast)


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 */
        ...
    }
}

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.