So, ich habe mal ein kleines Programm geschrieben, das einfach einen einzelnen Buchstaben (in diesem Fall ein x) endlos auf der UART ausgibt.
Hab leider gerade keine Zeit, da noch eine Funktion draus zu basteln, die einen ganzen String ausgibt, aber das sollte kein großes Problem mehr sein. Du musst noch Deine Taktfrequenz anpassen, ich habe jetzt einfach mal 8MHz angenommen.
Ich bin jetzt auch davon ausgegangen, dass Du WinAVR benutzt. Solltest Du einen anderen Compiler verwenden, wird's nicht laufen...
Code:
#include <avr/io.h>
#include <avr/sfr_defs.h>
//Einige Makros zur Berechnung des Baud-Raten Registers
#define F_CPU 8000000 // 8MHz Taktfrequenz
#define BAUD_RATE 9600 // gewünschte Baud-Rate für UART
#define BAUD_SELECT (F_CPU/(BAUD_RATE*16l)-1) //Berechnungsformel für das Baud-Raten Register
//Diese Funktion sendet ein einzelnes Zeichen an die UART
void uart_putchar(char c)
{
//warte, bis das Bit UDRE im Register UCSRA gesetzt ist.
//Dieses Bit wird vom Prozessor gesetzt, wenn das Senderegister leer ist
loop_until_bit_is_set(UCSRA, UDRE);
//Übergebenes Zeichen ins Senderegister UDR legen.
//Die Daten werden jetzt an die UART geschickt.
UDR = c;
}
int main (void)
{
//Zuerst muss die UART initialisiert werden
//Hier wird der Sender der UART aktiviert.
//Der Empfänger und die Interrupts bleiben in diesem Beispiel aus
UCSRB = 0x08;
//Jetzt muss noch die Baudrate eingestellt werden.
//Wir weisen dem Register einfach das Makro von oben zu.
UBRRL = BAUD_SELECT;
//Jetzt kommt die Hauptschleife
//Es wird immer das gleiche Zeichen (x) an die UART ausgegeben
while(1)
{
uart_putchar('x');
}
return 1;
}
Gruß,
askazo
Lesezeichen