[uquote="veso74",url="/forum/viewtopic.php?p=4368846#p4368846"]В помощь:
Код: Выделить всё
#define F_CPU 8000000
#define BAUD 9600
#define RATE ((F_CPU / 16 / BAUD) - 1)
UBRRH |= (RATE >> 8);
UBRRL |= RATE;
[/uquote]
Все равно печатаются такие символы: Р)ббщяР)ббщяР)ббщяР)
Программирую AVR ATmega 328p
Код: Выделить всё
#define F_CPU 20000000UL
#define BAUD 9600
#define RATE ((F_CPU / 16 / BAUD) - 1)
#include <avr/io.h>
#include <util/delay.h>
void uart_init()
{
UBRR0H |= RATE >> 8;
UBRR0L |= RATE;
UCSR0A = 0b00000000;
UCSR0B = (1 << RXEN0) | (1 << TXEN0); // 0b00011000;
UCSR0C = 0b10000110;
}
void uart_send(char c)
{
while (!(UCSR0A & (1 << UDRE0))) {}
UDR0 = c;
}
char uart_receive(void)
{
return ((UCSR0A >> RXC0) & 1) ? UDR0 : 0;
}
void uart_send_str(const char *s)
{
while (*s != 0)
{
uart_send(*s++);
}
}
int main(void)
{
uart_init();
while (1)
{
uart_send_str("hello");
_delay_ms(500);
char c = uart_receive();
_delay_ms(500);
}
}
Кстати, почему здесь регистры названы не как в книге Ревича (UDR, UBRR и т.д.), а с нулем на конце?