Witam!
Tradycyjnie fragment kodu:
Chcialbym w przerwaniu pobrac string i pozniej w programie dalej nim operowac ale niestety nie za bardzo mi to wychodzi. W obsludze przerwania ISR(USART_RXC_vect) pobieram bajt z UART i jak testuje robiac echo w samym przerwaniu to wszystko dziala ale niestety w tej wersji kod zupelnie nie chce dzialac. Ustawiam flagi po odbiorze znaku w przerwaniu i pozniej w glownej petli programu zeruje flage i wpisuje znak do bufora ale niestety w buforze nie pojawia sie zaden znak i nie wiem co jest przyczyna. Czy moglbym prosic o pomoc?
Tradycyjnie fragment kodu:
#define USART_BAUDRATE 57600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
typedef struct
{
unsigned char rx_int;
} interrupt_sig;
interrupt_sig flaga;
char rxbuff;
char string_buffer[10];
//*========================================================*//
void UART_init(void) {
UCSRB |= (1 << RXEN) | (1 << TXEN);
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
UCSRB |= (1 << RXCIE);
}
//*========================================================*//
ISR(USART_RXC_vect)
{
register u08 c;
rxbuff = UDR;
if (bit_is_clear(UCSRA, RXC))
{
rxbuff = c;
flaga.rx_int = 1; // ustaw flage
}
}
//*========================================================*//
int main(void)
{
UART_init(); // inicjalizacja portu szeregowego
sei(); // odblokowanie przerwan
int i=0;
while(1)
{
if (flaga.rx_int) // jesli przeslano znak...
{
flaga.rx_int = 0; // zeruj flage
if (rxbuff == 0x0D) // jesli przeslany znak to koniec linii
{
string_buffer[i] = 0; // zakoncz string
i = 0;
}
else
{
if (i < 10) // rozmiar bufora
{
string_buffer[i++] = rxbuff;
}
}
}
}
}Chcialbym w przerwaniu pobrac string i pozniej w programie dalej nim operowac ale niestety nie za bardzo mi to wychodzi. W obsludze przerwania ISR(USART_RXC_vect) pobieram bajt z UART i jak testuje robiac echo w samym przerwaniu to wszystko dziala ale niestety w tej wersji kod zupelnie nie chce dzialac. Ustawiam flagi po odbiorze znaku w przerwaniu i pozniej w glownej petli programu zeruje flage i wpisuje znak do bufora ale niestety w buforze nie pojawia sie zaden znak i nie wiem co jest przyczyna. Czy moglbym prosic o pomoc?
