Code:
// đây là đoạn code bi lỗi.
// USART Receiver buffer
//#define RX_BUFFER_SIZE 64
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
//USART Receiver interrupt service routine
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_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE) // SAI Ở ĐÂY
// PHẢI SỬA LÀ if (++rx_counter == RX_BUFFER_SIZE+1)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
// :D :D
// MOI NGƯỜI CHÚ Ý NHÉ


Comment