Routinen zum senden und empfangen von Daten über USART (hier anhand vom Mega32)
Wenn du willst kannst du diese Funktionen auch noch mit der Standard Ein- und Ausgabe verbinden (printf bzw scanf):
Das sind die Variablen dazu, im Initialisierungscode musst du das aber auch noch vermerken:
Zum Festlegen der Baudrate:
Eigentlich bin ich nich der Fan von vorkauen, aber da du schon zwei mal lieb gefragt hast BTW: Kann sein das das ganze hier nich so recht zusammen passen will und das du dich vll fragst wo du was hinpackst. Das musst du dir überlegen, ich (musste) dafür eine .c und eine .h schreiben um es später weiterverwerte zu können.
Grüße
PS: Die CODE Blöcke sind echt super
Wie gesagt, auf den standard kram kommt man schon mit dem einfachen lesen das Handbuches, da stehen lgaube ich sogar beispiele drin. Sagte ich ja
Code:
int usart_putchar( char c, FILE *stream ){
if( c == '\n' ) usart_putchar( '\r', stream );
loop_until_bit_is_set( UCSRA, UDRE );
UDR = c;
return 0;
}
int usart_getchar(FILE *stream){
char c;
loop_until_bit_is_set(UCSRA, RXC);
c = UDR;
/* Echo Ein-/Ausschalten */
if(c==ENQ){ // Echo Ein/Ausschalten, 0x05 => ENQ
if(echo==ECHO_OFF){ // ENQ ist Steuerzeichen
echo=ECHO_ON;
usart_putchar(c,stdout);
}else if(echo==ECHO_ON){
echo=ECHO_OFF;
}
}
if (c == '\r')
return '\n';
return c;
}
Wenn du willst kannst du diese Funktionen auch noch mit der Standard Ein- und Ausgabe verbinden (printf bzw scanf):
Code:
static FILE mystdout = FDEV_SETUP_STREAM( usart_putchar, NULL, _FDEV_SETUP_WRITE );
static FILE mystdin = FDEV_SETUP_STREAM( NULL, usart_getchar, _FDEV_SETUP_READ );
Das sind die Variablen dazu, im Initialisierungscode musst du das aber auch noch vermerken:
Code:
void usart_init(void)
{
UCSRB = (1<<TXEN) | (1<<RXEN); // UART TX und RX einschalten
UCSRC = (1<<USBS)|(3<<UCSZ0); // 1 stop bit, 8Bit Data
UBRRL = UBRRL_VALUE;
stdout = &mystdout;
stdin = &mystdin;
}
Zum Festlegen der Baudrate:
Code:
#define BAUD 9600 //wird später in setbaud.h verarbeitet und in UBRRH/L_VALUE übergeben
#include <util/setbaud.h> //vorher muss BAUD definiert sein
Eigentlich bin ich nich der Fan von vorkauen, aber da du schon zwei mal lieb gefragt hast BTW: Kann sein das das ganze hier nich so recht zusammen passen will und das du dich vll fragst wo du was hinpackst. Das musst du dir überlegen, ich (musste) dafür eine .c und eine .h schreiben um es später weiterverwerte zu können.
Grüße
PS: Die CODE Blöcke sind echt super
Wie gesagt, auf den standard kram kommt man schon mit dem einfachen lesen das Handbuches, da stehen lgaube ich sogar beispiele drin. Sagte ich ja