سلام دوستان
من میخوام هروقت دیتا به میکرو رسید اطلاعات رو بخونه و با توجه به چیزی که دریافت کرده عملی انجام بده
مثلا اگر ۱۱۱۱ از طریق usart به میکرو رسید رله ۱ فعال بشه
حالا سوالم اینه که میشه از وقفه RX استفاده کنم؟ و چطوری؟
من وقفه رو از طریق codewizard فعال کردم و کد رو اینجا میذارم تا ببینم نظر دوستان چیه؟ من دستورات خودمو کجا بنویسم؟
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0) rx_buffer_overflow=1;
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
#endif
}
}
من میخوام هروقت دیتا به میکرو رسید اطلاعات رو بخونه و با توجه به چیزی که دریافت کرده عملی انجام بده
مثلا اگر ۱۱۱۱ از طریق usart به میکرو رسید رله ۱ فعال بشه
حالا سوالم اینه که میشه از وقفه RX استفاده کنم؟ و چطوری؟
من وقفه رو از طریق codewizard فعال کردم و کد رو اینجا میذارم تا ببینم نظر دوستان چیه؟ من دستورات خودمو کجا بنویسم؟
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0) rx_buffer_overflow=1;
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
#endif
}
}
دیدگاه