Hallo, ich probiere gerade alle möglichen Interrupts des AT90s4433 mit WinAVR aus. Leider klappts mit dem UART Rx Interrupt nicht. Mein Programm soll ganz einfach sein: Sobald ich mit einem Terminalprogramm eine Zahl sende, soll diese an den Lampen des PORTBs ausgegeben werden. (Verwende das STK500.) Folgendes habe ich gemacht: PORTB auf Ausgabe gestellt (DDRB=0xFF). RXIE, RXCIE, TXCIE im UCSRB Register angeschaltet. Die Baudrate auf 38000 in UBRR eingestellt. Die globalen Interrupts mittels sei() freigeschaltet. Als Interruptvektor habe ich SIG_UART_RECV gewählt. Leider funktioniert es nicht. Könnte mir jemand vielleicht sagen, was ich falsch gemacht habe bzw. vergessen? Vielen Dank
Vielleicht, weil die Baudrate bei 38400 liegen müsste? Dann solltest du erst die Baudrate und dann die UART-Flags einstellen. Du weisst auch, dass PORTB=0x00 beim STK500 ein Leuchten aller LEDs nach sich zieht?!
Das ich 38000 geschrieben habe, war ein versehen, es ist natürlich 38400. Das alle Lampen leuchten weiß ich, ist ja soweit egal. Sobald eine Zahl gesendet wird ändert sich ja was an den Lampen. Habe die Baudrate jetzt zuerst eingestellt, leider ohne Veränderung am Problem.
Hey, jetzt klappts doch. War ein kleiner Fehler beim Aufspielen des Programms. Eine Frage hätte ich allerdings noch. Ich weiß wofür SIG_UART_RECV und SIG_UART_TRANS vorhanden ist. Aber bei SIG_UART_DATA....wofür ist das? Andere Programme, z.B. Codevision verwenden auch nur 2 Typen Interrupt. Danke
_TRANS wird verwendet, wenn man wissen will, ob ein Byte vollständig gesendet wurde (halbduplex-Übertragungen wie RS485). _DATA meldet, dass das UDR frei ist, und neue Daten in dieses Register geschrieben werden können.
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.