Постановка задачи:
Есть Atmega162, которая непрерывно посылками светит по USART.
Нужно выцепить определенный байт из посылки.
Задача 1: Просто что-нибудь поймать по USART
#include <avr/io.h>
#include <avr/delay.h>
#include "lcd.h"
#include <stdio.h>
#include "stdafx.h"
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned long dword;
void uart0_init(void) // инициализация uart
{
DDRE = (DDRE | 2) & ~1; // выводы порта - PE0 in, PE1 out
UCSR0B = 0x00; // временно запретить uart
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x17; // скорость 19200
UBRR0H = 0x00;
UCSR0B = 0x18; // запуск
}
void uartsend(byte c) // посылка байта
{
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = c;
}
byte uartrecv() // прием байта
{
while(!(UCSR0A & (1<<RXC0)));
return UDR0;
}
void main(void)
{
UCHAR i;
DDRE = 0x00;
char text[6];
unsigned int n=0;
double ut = 0;
CLI();
lcd_init();
lcd_write("Autorising...");
seconds(1);
lcd_init();
lcd_write("Autorising...");
seconds(1);
uart0_init();
DDRD = (1 << 4);
SEI();
while (1)
{
ut = uartrecv();
dtostrf(ut,6,0,text);
lcd_send(COMMAND, LCD_CLEAR);
DDRD = (1 << 4);
lcd_write(text);
DDRD = 0x00;
seconds(1);
}
}
Что здесь не так?