Gast
#74965
Hallo Ihr Wissenden,
ich hab mir mal aus den Beispielen aus dem Datenbaltt des mega8
folgenden Code gebastelt um ein paar Daten zum PC zu schicken:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 1000000 /* 4Mhz */
#define UART_BAUD_RATE 9600 /* 9600 baud */
#define BAUD (F_CPU/(UART_BAUD_RATE*16l)-1)
void USART_INIT( unsigned int baud)
{
UBRRH = (unsigned int) (baud >> 8);
UBRRL = (unsigned int) baud;
UCSRB = (1<<RXEN) | (1<<TXEN);
UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0);
}
void USART_Transmit(unsigned char data)
{
while ( !(UCSRA & (1<<UDRE)))
;
UDR = data;
}
void main(void)
{
USART_INIT(BAUD);
for(;;)
{
USART_Transmit("H");
USART_Transmit("a");
USART_Transmit("l");
USART_Transmit("l");
USART_Transmit("o");
USART_Transmit(0x0A);
USART_Transmit(0x0D);
}
}
Laut Datenblatt ist der Transfer auf 8N2 eingestellt. Das gleiche hab
ich im Windows im Hyperterminal eingestellt.
Ich bekomme aber anstatt dem erwarteten String "Hallo" folgendes:
"¦ ¢¤¤" was ja zumindest mal gleichlang wie Hallo +0x0A + 0x0D
ist.
Kennt das Problem jemand bzw. sieht einen Fehler im Code.
Danke schon mal, der Jochen
P.S. weiß jemand wie man den internen Oszi deaktivieren kann. Hab bei
mir ein 4MHz Quarz am uC trag ich allerding 4MHz im Code ein tut sich
garnichts. Das müsste dann wohl heisen das der interne Quarz den UART
steuert.