Я пытаюсь сделать очень простую программу USART, которая отправляет полученный символ обратно в передатчик и представляет эквивалентное двоичное число, сверкая 8 светодиодами на моем макете.USART с ATMEGA168A -
Вот код:
#define F_CPU 1000000UL // set the CPU clock
#define BAUD 9600 // define baud
#define BAUDRATE ((F_CPU)/(BAUD*16UL)-1) // set baudrate value for UBRR
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <inttypes.h>
#include "led.h"
// function to initialize UART
void uart_init (void)
{
UBRRH=(BAUDRATE>>8);
UBRRL=BAUDRATE; //set baud rate
UCSRB|=(1<<TXEN)|(1<<RXEN); //enable receiver and transmitter
UCSRC|=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);// 8bit data format
}
// function to send data
void uart_transmit (unsigned char data)
{
while (!(UCSRA & (1<<UDRE))); // wait while register is free
UDR = data; // load data in the register
}
// function to receive data
unsigned char uart_receive (void)
{
while(!(UCSRA) & (1<<RXC)); // wait while data is being received
return UDR; // return 8-bit data
}
// main function: entry point of program
int main (void)
{
unsigned char a = 0;
char buffer[10] = 0;
DDRB = 0xFF;
uart_init(); // initialize UART
while(1)
{
a=uart_receive(); // save the received data in a variable
uart_transmit(a); // send it back
blink(a - 0); // print in the led
_delay_ms(100); // wait before next attempt
}
return 0;
}
Проблема я столкнулся в том, что ни один из регистров, связанных с USART, кажется, распознается компилятором. См. Пример ошибки компиляции, которую я получаю:
'UBRRH' undeclared (first use in this function)
Я не могу включить сюда сюда?
Спасибо за подсказку Габриэля. Есть ли ссылка для проверки всех связанных имен регистра на другой UART? – Bob
Несомненно, вот документация: http://www.atmel.com/images/doc2545.pdf –