Hallo Wissende, in einem kleinen Enpfangsmodul mit einem ATtiny2313 läuft untenstehendes Programm. Beachtet bitte die zwei Zeilen innerhalb der While-Schleife ganz unten. Die empfangenen 16 Zeichen werden im Display korrekt angezeigt, => ISR korrekt. Kommentiere ich aber nun Zeile A aus wird das Display nicht mehr aktualisiert obwohl die LED an PD2 - 0-aktiv - kurz an und wieder aus geht. Jetzt frage ich mich schon eine Weile wo der Bug versteckt ist? Compiler ist der gcc der im Atmel Studio 7 integriert ist. Wo liegt hier das Problem? Danke Tom schnipp---anfang #define STX 0x7E //-> #define ETX 0x7F //<- #define LF 0x24 //$ unsigned char RxDByte = 0; unsigned char RxDCnt = 0; unsigned char EmpfangOK = 0; char Zeile0[16]; char Zeile1[16]; ISR (USART_RX_vect) { RxDByte = UDR; switch (RxDByte) { case STX: RxDCnt=0; EmpfangOK = 0; PORTD &= ~(1<<PD2); break; case ETX: EmpfangOK = 1; PORTD |= (1<<PD2); break; default: Zeile1[RxDCnt] = RxDByte; RxDCnt++; } } int main(void) { DDRD = DDRD | 0b11111100; PORTD = PORTD | 0b00000111; UBRRH = 0; UBRRL = 12; UCSRB |= (1<<RXCIE) | (1<<RXEN); lcd_gotoxy(0,1); lcd_puts(" RxD ? "); sei(); RxDCnt = 0; EmpfangOK = 0; while (1) { if (EmpfangOK == 1) { PORTD |= (1<<PD2); } //Zeile A if (EmpfangOK == 1) { lcd_gotoxy(0,1); lcd_puts(Zeile1); EmpfangOK = 0;} } } schnipp---ende
Hallo Timmo, in der Tat, der Compiler hat die wegoptimiert. Warum auch immer? Auf jeden Fall mal wieder was dazu gelernt. Vielen Dank :-) Glück Auf Tom
Tom F. schrieb: > in der Tat, der Compiler hat die wegoptimiert. Warum auch immer Interrupt: Volatile Variablen
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.