Hallo. Ich möchte mit WinAvr den UART des AT90Can nutzen. Doch alle Beispielprogramme, die ich so eintippe machen Fehler. Es kommen dann Sachen wie "error: 'UBRRL' undeclared (first use in this function)". Kann mir einer ein Beispiel für den AT90Can zukommen lassen, mit dem ich was anfangen kann oder mir tipps geben, woher meine Fehler rühren? Bin neu im WinAvr. Gruß, Alex
Alex wrote: > Hallo. > Ich möchte mit WinAvr den UART des AT90Can nutzen. Doch alle > Beispielprogramme, die ich so eintippe machen Fehler. Es kommen dann > Sachen wie "error: 'UBRRL' undeclared (first use in this function)". Wäre es nicht sinnvoller, sich mal damit zu beschäftigen, wie die UART funktioniert, statt nur stupid copy&paste zu machen? Schau dochmal, für welchen AVR der Beispielcode mit UBRRL gemacht ist. Dann schau ins Datenblatt, welche Funktion UBRRL hat. Und dann schau ins Datenblatt Deines AVR, wie dort das Register mit derselben Funktion heißen könnte. Peter
Ja, hast recht. Bin damit berits zurande gekommen, nachdem ich im datenblatt nachgesehen habe. Problem war, dass der At90Can 2 UARTS hat, die mit 0 und 1 bezeichnet werden. Demnach werden die Register auch anders genannt. UBRRH heist beispielsweise ubrr0h und ubrr1h für das jeweilige uart. hatte mit ubrrh0 etc experimentiert, aber zwecklos. lesen ist halt doch nicht immer sinnlos!
Hab nun aber ein neues Problem! Win AVR kompiliert den Code nun Problemlos. Möchte ich allerdings das Testprogramm bein AVR Studio Simulieren, bleibt das Programm hängen, sobald das UCSR0A leer ist. //---------------------------------------------------------------------- --- //USART0 Initialisieren void USART0_init(void) { //Baudrate einstellen (Normaler Modus) UBRR0H = (unsigned char) (UBRR_BAUD>>8); UBRR0L = (unsigned char) UBRR_BAUD; //Aktivieren von receiver und transmitter UCSR0B = (1<<RXEN)|(1<<TXEN); //Einstellen des Datenformats: 8Datenbits, 1 Stopbit UCSR0C = (0<<UMSEL0)|(0<<UPM0)|(0<<USBS0)|(3<<UCSZ0); //Receiver und Transmitter Freigeben UCSR0B = (1<<RXEN0) | (1<<TXEN0); } //---------------------------------------------------------------------- --- //USART0 Übertragen void USART0_Transmit(unsigned char data) { //Warten auf leeren Transmitbuffer while (!(UCSR0A & (1<<UDRE0))) { } //Daten in den buffer, senden der daten UDR0 = data; } /----------------------------------------------------------------------- -- //---------------------------------------------------------------------- --- //Hauptprogramm int main(void) { unsigned char i; //uint8_t buffer; USART0_init(); //Endlosschleife while (1) { PORTB = i++; ----> !!Fehler while (!(UCSR0A & (1<<UDRE0))) { } //Daten in den buffer, senden der daten UDR0 = 'x'; //USART0_Transmit("x"); //i=USART0_Receive(); } return 0; } Hat es was mit dem Simulieren zu tun oder mit meinem Programmcode?? Gruß
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.