Witam, napisałem prosty program w C, który ma za zadanie odebrać znak z komputera, zasygnalizować to, a następnie odesłać ten sam znak do komputera (echo). Odbiór danych jest w porządku (działa sygnalizacja diodami), natomiast dane nie są odsyłane do komputera. Zapewne problem jest banalny, ale nie mogę znaleźć rozwiązania. Nie korzystam z kwarcu zewnętrznego, ale to chyba nie powinno być problemem?
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#define F_CPU 1000000
#define BAUD 9600
#define MYUBRR F_CPU / 16 / BAUD - 1
//Inicjalizacja UART
void USART_Init(unsigned int ubrr)
{
UBRRH=(unsigned char)(ubrr>>8);
UBRRL=(unsigned char) ubrr;
UCSRB=(1<<RXEN)|(1<<TXEN);
UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
//Odbiór danych
unsigned char odbierz(void)
{
while(!(UCSRA & (1<<RXC)));
return UDR;
}
//Wysyłanie danych
void nadajznak(unsigned char dana)
{
while(!(UCSRA & (1<<UDRE)));
UDR=dana;
}
int main (void)
{
char odebrano;
USART_Init(MYUBRR);
DDRC=0xFF;
PORTC=0xFF;
for(;;)
{
odebrano=odbierz();
if(odebrano==0x31) //Jeśli odebrano 1 to gasi jedną diodę i nadaje echo
{
PORTC=0xFF,
PORTC=~_BV(1);
nadajznak(odebrano);
}
if(odebrano==0x32) //Jeśli odebrano 2 to gasi inną diodę i nadaje echo
{
PORTC=0xFF;
PORTC=~_BV(2);
nadajznak(odebrano);
}
}
}