Timer0 Counter0 BUG Kategorie: Programmierung C (von Hannes - 7.06.2008 14:13) | ||
| ||
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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum