Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Timer0 Counter0 BUG Kategorie: Programmierung C (von Hannes - 7.06.2008 14:13)
Ich nutze:
C-Control Pro Mega32, eigenes Board

Hallo,

wird in dem Demo-Programm in main() bei Sekunde=10 die Funktion   Timer_T0CNT();
aufgerufen bleibt das Programm stehen!

Bug?







// LCD_Uhr_1: LCD-Uhr  (Anzeigeformat "13:47:24")
// LED1 blinkt mit 1Hz
// erforderliche Library: IntFunc_Lib.cc, LCD_Lib.cc

// Auf dem Display wird eine LCD-Uhr im Anzeigenformat "13:47:24" dargestellt.
// Zeitbasis 10ms Interrupt mit Zeitkorrektur

byte cnt1;                                  // globale Variablendeklaration
byte Sekunde, Minute, Stunde;               // globale Variablendeklaration

//------------------------------------------------------------------------------
// Zeichenausgabe
//
void Write2Digits(byte pos,byte val)
{
    char num[3];

    LCD_CursorPos(pos);                     // LCD Cursor positionieren
    Str_WriteWord(val,10,num,0,2);          // Zahl mit Basis 10, Offset 0, 2 stellig in String schreiben
    LCD_WriteText(num);                     // String ausgeben
}

//------------------------------------------------------------------------------
// Ausgabeformat der Uhr festlegen
//
void Display_Time(void)
{
    Write2Digits(0,Stunde);                 // Stunde
    LCD_WriteChar(':');
    Write2Digits(3,Minute);                 // Minute
    LCD_WriteChar(':');
    Write2Digits(6,Sekunde);                // Sekunde
}

//------------------------------------------------------------------------------
// Zeitberechnung
//
void RTC(void)
{
    cnt1++;                                 // 10ms Zähler erhöhen
    if (cnt1==50)
    {
        Port_WriteBit(PORT_LED1,PORT_OFF);  // LED1 ausschalten
    }
    if (cnt1==100)
    {
        Port_WriteBit(PORT_LED1,PORT_ON);   // LED1 einschalten
        Display_Time();                     // Funktionsaufruf: Display_Time
        Sekunde++;
        if (Sekunde==60)
        {
            Sekunde=0;
            Minute++;
            if (Minute==60)
            {
                Minute=0;
                Stunde++;
                if (Stunde==24) Stunde=0;
            }
        }
        cnt1=0;
    }
}

//------------------------------------------------------------------------------
// Interrupt alle 10ms
//
void INT_10ms(void)
{
    int irqcnt;

    RTC();                                  // Funktionsaufrauf: RTC
    irqcnt=Irq_GetCount(INT_TIM2COMP);      // Interrupt Request Counter
}

//------------------------------------------------------------------------------
// Hauptprogramm
//
void main(void)
{
    LCD_Init();                             // Display initialisieren
    LCD_ClearLCD();                         // Display löschen
    LCD_CursorOff();                        // Display Cursur ausschalten

    cnt1=0;

    Port_DataDirBit(PORT_LED1,PORT_OUT);    // LED1 auf Ausgabe vorbereiten
    Port_WriteBit(PORT_LED1,PORT_OFF);      // LED1 ausschalten
    Sekunde=30;                           // Startzeit festlegen z.B. 12:25:00
    Minute=32;
    Stunde=12;
    Irq_SetVect(INT_TIM2COMP,INT_10ms);     // Interrupt Service Routine definieren



    while (1)                              // Endlosschleife, hier können weitere
    {                                       // Anweisungen stehen
       



            if (Sekunde == 10)        // Programm bleibt stehen
            Timer_T0CNT();
    }

}


    Antwort schreiben


Antworten:

Re: werden Fragen noch beantwortet? (von Hannes - 21.06.2008 10:38)
    Re: werden Fragen noch beantwortet? (von PeterS - 21.06.2008 11:49)
        Re: werden Fragen noch beantwortet? (von Hannes - 22.06.2008 11:44)
            Re: werden Fragen noch beantwortet? (von PeterS - 22.06.2008 12:13)
                Re: werden Fragen noch beantwortet? (von Hannes - 23.06.2008 8:16)