Код почти из даташита. Кварц 12 мега, на старой плате все работало. Уже который час курю маны и без толку.
Код: Выделить всё
#include <stdint.h>
#include <avr/io.h>
// Define baud rate
#define USART_UBBR_VALUE 38 //12 meg quartz - speed 19200 baud
void USART_vInit(void)
{
// Set baud rate
UBRR0H = (uint8_t)(USART_UBBR_VALUE>>8);
UBRR0L = (uint8_t)USART_UBBR_VALUE;
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSR0C = (0<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00) | (1<<UMSEL0);;
// Enable receiver and transmitter
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
}
void USART_vSendByte(uint8_t u8Data)
{
// Wait if a byte is being transmitted
while((UCSR0A&(1<<UDRE0)) == 0);
// Transmit data
UDR0 = u8Data;
}
uint8_t USART_vReceiveByte()
{
// Wait until a byte has been received
while((UCSR0A&(1<<RXC0)) == 0);
// Return received data
return UDR0;
}
int main(void)
{
uint8_t u8Data;
// Initialise USART
USART_vInit();
DDRA=0xFF;
PORTA=0x00;
// Send string
USART_vSendByte('A');
// Repeat indefinitely
for(;;)
{
// Echo received characters
u8Data = USART_vReceiveByte();
USART_vSendByte(u8Data);
}
}