Hallo, Das ist vielleicht das 1000te mal das so etwas hier gefragt wird. Habe schon einiges durchgesehen, komme aber nicht drauf warum der Interrupt nicht auslößt. int main(void) { DDRD = 0xFE; //RXD auf Eingang sei(); //Global Interrupt Enable UBRRL = 0x18; //25 für 9600Baud bei 4000000HZ UBRRH = 0x00; UCSRB = (1<<RXEN); //Empfänger ein UCSRB = (1<<RXCIE); //Interrupt-Enable-Bit Setzen while(1){out(Zeile);} } ISR(USART_RXC_vect) { while(1); } Wenn er nun auslösen würde, müsste mein Programm doch anhalten?
liegt ein signal an / wird ein usart protokoll gesendet dass den interrupt auslösen kann ?
Der Interrupt kann nicht auslösen, weil du den Receiver nach dem Einschalten gleich wieder ausschaltest.
:
Bearbeitet durch User
@Steve Ja es liegt ein eingangssignal an, und wenn ich den UART Polle dann kommt auch immer was richtiges raus. @Stefan Ernst Ich Schalte den UART gleich wieder ab? Warum, wie mach ich das? --> Es gibt keine Verändeung wenn ich UCSRB = (1<<RXEN); //Empfänger ein UCSRB = (1<<RXCIE); //Interrupt-Enable-Bit Setzen vertausche.
Überfragter schrieb: > --> Es gibt keine Verändeung wenn ich > UCSRB = (1<<RXEN); //Empfänger ein > UCSRB = (1<<RXCIE); //Interrupt-Enable-Bit Setzen > vertausche. Natürlich nicht. Dann schaltest du den Receiver zwar nicht wieder aus, dafür disablest du dann den Interrupt gleich wieder. X = 1; X = 2; Was ist nach diesen beiden Zeilen der Wert von X?
Ja!! UCSRB |=(1 << RXCIE) | (1 << RXEN); //Interrupt ein, Empfänger ein! Jetzt Klapts, danke für den Tip. So konnte es nicht gehen, da ich das Byte permanent mit dem Falschen wert überschrieben hatte. Grüße Überfragter
Überfragter schrieb: > UCSRB = (1<<RXEN); //Empfänger ein > UCSRB = (1<<RXCIE); //Interrupt-Enable-Bit Setzen Macht natürlich hier nicht so viel Sinn (vor allem wenn die Befehle direkt hintereinander liegen), aber wenn doch einzeln, dann so: UCSRB = (1<<RXEN); //Empfänger ein UCSRB |= (1<<RXCIE); //Interrupt-Enable-Bit Setzen Sollte man immer so machen, wenn man einzelne Bits gezielt setzen/rücksetzen will, ohne den Rest zu verändern.
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.