Witam.
Rozpoczynam z Uartem. Przesyłam dane w postaci jednego bajtu bezproblemowo, natomiast mam większe problemy jak chcę wysłać kilka zmiennych stablicowanych, a wysyłanie zrealizowałem w pętli. Oto kod jaki chciałem użyć, dla wysyłania i odbierania:
Wysyłanie:
Odbieranie:
Wysyłanie jest realizowane na atmega 16, natomiast odbieranie na atmedze 88. Jeżeli chodzi o konfigurację portów to są one poprawne - wysyłanie jednej zmiennej (bez pętli i tablicy działa od razu). Dzięki za każdą odpowiedź
Pozdrawiam
Rozpoczynam z Uartem. Przesyłam dane w postaci jednego bajtu bezproblemowo, natomiast mam większe problemy jak chcę wysłać kilka zmiennych stablicowanych, a wysyłanie zrealizowałem w pętli. Oto kod jaki chciałem użyć, dla wysyłania i odbierania:
Wysyłanie:
void USART_Transmit(uint8_t adres, uint8_t dane)
{
unsigned int i; //zmienna inkrementująca
unsigned int tx_wyslane=0; //ilość wysłanych pakietów
unsigned int tx_licznik=4; //licznik wysłanych pakietów
unsigned int dlugosc_ramki=5;
//pakiety
tx_buf[0]=0x55;
tx_buf[1]=adres;
tx_buf[2]=dane;
tx_buf[3]=dlugosc_ramki;
tx_buf[4]=0xaa;
//pętla wysyłająca dane zapisane w buforze poprzez uart
while ((UCSRA & (1 << UDRE)) == 0); //zaczekaj aż do opróżnienia bufora danych
for (i = 0; i < 5; i++)
{
UDR = tx_buf[i]; //umieść dane w buforze, wyślij dane
tx_wyslane++;
}
}
Odbieranie:
//funkcja obsługi przerwania USART_RXC
ISR (USART_RX_vect)
{
unsigned int i;
for (i = 0; i < 5; i++)
{
UDR0 = rx_buf[i]; //umieść dane w buforze, wyślij dane
}
//sprawdź, czy jest to kod zaświecenia diody
if(rx_buf[2] == 0b00000101) PORTB |= _BV(0);
//sprawdź, czy jest to kod zgaszenia diody
if(rx_buf[2] == 0b00000001) PORTB &= ~(_BV(0));
}
Wysyłanie jest realizowane na atmega 16, natomiast odbieranie na atmedze 88. Jeżeli chodzi o konfigurację portów to są one poprawne - wysyłanie jednej zmiennej (bez pętli i tablicy działa od razu). Dzięki za każdą odpowiedź
Pozdrawiam