Nun kommt was anderes an, aber immernoch nicht das richtige...
Mein Programm:
Code:#define F_CPU 3686400 #include <avr\io.h> //---------------------------------------------------------------------- void uartInit() { uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*9600) - 1); UBRRH = (uint8_t) (ubrr>>8); UBRRL = (uint8_t) (ubrr); // UART Receiver und Transmitter anschalten // Data mode 8N1, asynchron UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); } //---------------------------------------------------------------------- void uartPutChar(char data) { //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313 while (!(UCSRA&32)); //sende UDR=(uint8_t)data; } //---------------------------------------------------------------------- void print(char buffer[]) { for (int i=0;buffer[i]!=0;i++) uartPutChar(buffer[i]); } //====================================================================== main () { uartInit(); while (true) // Mainloop { print("x"); } }
Edit:
Ich habe das Beispiel aus der Wiki übernommen (die ohne Interupts):
Aber immernoch das selbe Ergebnis.Code:#define F_CPU 3686400 // Taktferquenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen #include <util\delay.h> void uart_init() { uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*9600) - 1); UBRRH = (uint8_t) (ubrr>>8); UBRRL = (uint8_t) (ubrr); // UART Receiver und Transmitter anschalten // Data mode 8N1, asynchron UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); // Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte) do { UDR; } while (UCSRA & (1 << RXC)); } int uart_putc (const uint8_t c) { // Warten, bis UDR bereit ist für einen neuen Wert while (!(UCSRA & (1 << UDRE))) ; // UDR Schreiben startet die Übertragung UDR = c; return 1; } uint8_t uart_getc_wait() { // Warten, bis etwas empfangen wird while (!(UCSRA & (1 << RXC))) ; // Das empfangene Zeichen zurückliefern return UDR; } int uart_getc_nowait() { // Liefer das empfangene Zeichen, falls etwas empfangen wurde; -1 sonst return (UCSRA & (1 << RXC)) ? (int) UDR : -1; } //---------------------------------------------------------------------- main () // Hauptprogramm, startet bei Power ON und Reset { uart_init(); //... // hier Init-Code eintragen do { // Schleifenanfang Mainloop uart_putc('x'); _delay_ms(50); } while (true); // Schleifenende Mainloop }







Zitieren
Lesezeichen