Hallo zusammen, ich hoffe Ihr könnt mir mal wieder helfen. Ich bin im Moment dabei eine Firmware zu schreiben. Timer 1 soll zyklisch eine Blink LED ansteuern, Timer 2 soll mir die Baudrate generieren, ist also für seriellei Kommunikation zuständig. Bei Programmstart wird ein INIT Funktion geladen: void init(void) { EX0 = 0; // disable external interrupt0 EA = 0; // disable interrupts baudrate = 2; time_counter=0; init_communication(); ET1 = 0; // disable timer1 interrupt TR1 = 0; // disable timer1 TF1 = 0; // reset timer 1 interrupt-flag TL1 = 0; // reset timer value TH1 = 0; // TMOD = 0x10; // clear timer1 mode bits ET1 = 1; // enable timer1 overflow interrupt TR1 = 1; // enable timer1 again EX0 = 0; // disable external interrupt0 EA = 1; // enable interrupts } void init_communication(void) { SCON = 0x52; // Set to 8-Bit UART T2CON = 0x30; // set timer 2 control register for use as baudrate generator RCAP2H = 0xFF; // preset the timer 2 register for correct rollover switch(baudrate) { case 0: { RCAP2L = 0xB8; break; } case 1: { RCAP2L = 0xDC; break; } case 2: { RCAP2L = 0xEE; break; } case 3: { RCAP2L = 0xF7; break; } default: { RCAP2L = 0xEE; //19200 break; } } TR2 = 1; // start timer 2 // IPL0 = 0x10;//&=0xEF // IPH0 |= 0x18;//|=0x10 // Serieller Interrupt hat hohe priority // RI = 0; // TI = 0; ES = 1; // !!! PROBLEMZEILE !!! } Die Interrupt Funktion der LED sieht folgendermaßen aus: void timer1_interrupt(void) interrupt 3 using 2 { TF1 = 0; // reset timer 1 interrupt-flag time_counter++; // Zähler für Timeout und OP-Signal if (time_counter>=7) // 500ms sind verstrichen ? { time_counter=0; // Timeout Zähler rücksetzen LED5 = ~LED5; // OP-Signal umschalten } } So nun zum Problem. Wird in der Problemzeile ES = 1 gesetzt, also der serielle Interrupt wieder aktiviert blinkt meine LED nicht mehr. Irgendwie scheint des meinen Interrupt von TImer 1 zu beeinflussen. Hat jemand ne Idee oder sieht jemand des offensichtliche, was ich wohl übersehen habe? Vielen Dank für alle Ideen und Anregeungen
> // Serieller Interrupt hat hohe priority
Vielleicht wird ständig nur immer der SerINT angesprungen ?
Tja manchmal ist die Antwort so einfach ;-) Ich hab den anstehenden seriellen Interrupt nicht zurückgesetzt und das wars dann.... VIelen Dank :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.