Hallo, ich möchte beim Empfang eines Zeichens über die serielle Schnittstelle in die Interrupt-Routine springen und das Zeichen auf das Display schreiben. Jedoch springt er nicht in die Interrupt Routine. Ich hab kein Ahnung warum. Die Interrupts sind mittels sei(); aktiviert. Der Interrupt-Vektor stimmt auch! Flo #include <avr/io.h> #include <avr/interrupt.h> void USART_Init() { UCSRB |= ( 1 << TXEN )|( 1 << RXEN ); UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 ); UBRRH = 0; UBRRL = 51; } ISR (USART_RXC_vect) { unsigned char buffer; buffer = UDR; glcdWriteChar(buffer); } int main(void) { //Interrupts freigeben sei(); //Display initialisieren glcdInit(); //serielle Schnittselle initialisieren USART_Init(); while(1) { } }
Abgesehen von
1 | UCSRB |= ((1<<RXEN) | (1<<TXEN)|(1<<RXCIE)); //Transmit&Receive&RX Int |
wirst du noch mehr Probleme bekommen indem du aus einer ISR eine warscheinlich sehr koplexe Funktion (glcdWriteChar) aufruft. Aber wie immer: Aus Erfahrung lernen. ;-) Werner
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.