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):
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
}
Aber immernoch das selbe Ergebnis.
Lesezeichen