LC-HC
05.04.2006, 21:30
HI, ich hab hier mal den Code zur testweisen implementierung des USART im ATmega 8. Leider kommt aber am Terminal nichts an. Die Einstellungen sollten korrekt sein, jedoch kann ich das Kabel nicht ohne weiteres überprüfen. Ich poste hier einfach mal den code:
<CODE>
// Prototypen wie folgt: -------------
void USART_init(void);
void USART_putc(char c);
void USART_puts(char *s);
int main(void)
{
char *text;
DDRB = 0xFF; // PORTB als AUSGANG
USART_init(); // USART initialisieren
text = "eins zwei drei!";
for(;;)
{
USART_puts(text);
_delay_ms(500);
}
return 0;
}
/*------------------------------------
USART_init()
-------------------------------------*/
void USART_init(void)
{
//UBRRH = (uint8_t) (BAUD>>8);
UBRRL = 23; // Ergibt die Berechnung nach Formel aus Datenblatt
//enable transmitter
UCSRB |= (1<<TXEN);
// set frame format:
UCSRC |= (1<<URSEL) | (3<<UCSZ0);
}
/*-----------------------------------------------------------------------------------
USART_putc()
sendet ein einzelnes Zeichen, das mit "c" als Parameter übergeben wird
------------------------------------------------------------------------------------*/
void USART_putc(char c)
{
while( !(UCSRA & (1<<UDRE)) )
;
// Daten in USART Datenreg. schieben, sendet automatisch
UDR = c;
}
/*-----------------------------------------------------------------------------------
USART_puts()
sendet einen String (indirekt), indem für jedes stringelement
USART_putc() aufgerufen wird.
------------------------------------------------------------------------------------*/
void USART_puts(char *s)
{
while ( *s )
{
USART_putc(*s);
s++;
}
}
</CODE>
<CODE>
// Prototypen wie folgt: -------------
void USART_init(void);
void USART_putc(char c);
void USART_puts(char *s);
int main(void)
{
char *text;
DDRB = 0xFF; // PORTB als AUSGANG
USART_init(); // USART initialisieren
text = "eins zwei drei!";
for(;;)
{
USART_puts(text);
_delay_ms(500);
}
return 0;
}
/*------------------------------------
USART_init()
-------------------------------------*/
void USART_init(void)
{
//UBRRH = (uint8_t) (BAUD>>8);
UBRRL = 23; // Ergibt die Berechnung nach Formel aus Datenblatt
//enable transmitter
UCSRB |= (1<<TXEN);
// set frame format:
UCSRC |= (1<<URSEL) | (3<<UCSZ0);
}
/*-----------------------------------------------------------------------------------
USART_putc()
sendet ein einzelnes Zeichen, das mit "c" als Parameter übergeben wird
------------------------------------------------------------------------------------*/
void USART_putc(char c)
{
while( !(UCSRA & (1<<UDRE)) )
;
// Daten in USART Datenreg. schieben, sendet automatisch
UDR = c;
}
/*-----------------------------------------------------------------------------------
USART_puts()
sendet einen String (indirekt), indem für jedes stringelement
USART_putc() aufgerufen wird.
------------------------------------------------------------------------------------*/
void USART_puts(char *s)
{
while ( *s )
{
USART_putc(*s);
s++;
}
}
</CODE>