Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Warteschleife in ms

  1. #1
    Tairell
    Gast

    Warteschleife in ms

    Hi leutz,...sitz hier in der Schule beim C Programmieren und habn kleines Prób...
    Hier erstmal das Programm...

    //-header-
    #include <reg552.h>
    #include <stdio.h>

    void lauf (void);
    void licht1 (void);
    void licht2(void);
    void warten (void);

    //--------------------- main ----------------------------------------------
    void main (void) // Main Programm
    {
    int start; // Variable Start
    P1 = 0xff; // P1 als Eingang definiert

    while(1) // Schleife für gesamt Programm
    {
    start=P1 & 0x01; // Schalter 0 als An/Aus Schalter definiert

    if (start==1)
    {
    lauf (); // Verweis auf Unterprogramm lauf
    }
    else
    {
    P4=0x00;
    }
    }
    }
    void licht1 (void) // Lauf von LED0 nach LED7

    {
    P4=0x80;
    warten(); // Verweis auf Unterprogramm warten
    P4=0x40;
    warten();
    P4=0x20;
    warten();
    P4=0x10;
    warten();
    P4=0x08;
    warten();
    P4=0x04;
    warten();
    P4=0x02;
    warten();
    P4=0x01;
    warten();
    }

    void licht2 (void) // Lauf von LED7 nach LED0

    {
    P4=0x01;
    warten();
    P4=0x02;
    warten();
    P4=0x04;
    warten();
    P4=0x08;
    warten();
    P4=0x10;
    warten();
    P4=0x20;
    warten();
    P4=0x40;
    warten();
    P4=0x80;
    warten();
    }


    void lauf (void) // Bestimmung der Laufrichtung durch umlegen des Schalter 1
    {
    int renn; // Variable für Schalter 1
    renn=(P1 & 0x02)>>1;
    if (renn==1)
    {
    licht1 (); // Verweis auf Unterprogramm licht1
    }
    else
    {
    licht2 (); // Verweis auf Unterprogramm licht2
    }
    }

    void warten (void) // Wartefrequenz für 1-4 hz
    {
    int i;
    int x; // Variable für Schalter 6 und 7
    x=(P1 & 0xc0)>>6;
    if (x==0)
    {
    x=4;
    for (i=0;i<5000/x;i++); // 5000 = ~1 hz
    }
    else
    {
    for (i=0;i<5000/x;i++); // 5000 = ~1 hz
    }
    }


    Das ganze soll ein Lauflicht darstellen. Wie können wir jetzt eine Wartezeit in ms einbauen ? 2. Problem, wie können wir das Lauflicht über eine Shiftfunktion weiterlaufen lassen ?

    Ich würde mich über "schnelle" Hilfe freuen, denn unsere Lehrer sind nicht wirklich bereit uns zu helfen :*(,.....Danke im Vorraus

    Mfg Tai

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    void main(...) ist falsch, es muss int main(...) sein, wie hier schon mehrfach erötert wurde. Ansonsten wäre evtl. hilfreich gewesen, wenn ihr mitgeteilt hättet, dass das Ganz auf einem Mikrocontroller laufen soll. Sonst hätte ich euch jetzt einfach auf nanosleep oder usleep verwiesen. Mit Mikrocontrollern kenne ich mich nicht so aus, aber ihr solltet irgendwo in der Entwicklungsumgebung zu dem Teil eine Wartefunktion finden, da müsst ihr in die Doku schauen. Ansonsten z.B. Inline-Assembler benutzen und in einer Schleife einen Befehl aufrufen, von dem ihr wisst, wieviel Takte er Zeit braucht.

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Entweder machst du das mit nem Interrupt, falls das Ding das kann (wird wohl wenn du das mit C programmieren kannst) oder halt mit einem Wartebefehl der je nach Microcontroller und so halt anders heisst

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer Avatar von r00t043
    Registriert seit
    11.01.2004
    Beiträge
    38
    So im Groben und Ganzen:
    -prescaler fuer den timer setzen (falls man das kann)
    -timer overflow interrupt einschalten
    im Interrupt dann soetwas:
    Code:
    P4=(P4==0x01)?0x80:P4>>1;
    oder anders herum, aufrufen.
    Die restlich Details, die du brauchst, findest du in dem Datenblatt deines 8051.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •