Да, извините, не досмотрел - там оно не используется. Попробуйте действительно упростить прерывание - и выдачу сделать в основном цикле. Кстати, функция принтф требует 37 байтов стека, а в визарде по умолчанию стоит 32, поправьте в свойствах проекта.
Код:
|
// 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;
rx_buffer_overflow=1;
};
}
}
/// и тд
while (1)
{
if(rx_buffer_overflow)
{
rx_buffer_overflow=0;
for(i=0;i‹8;i++)
{
printf("%02X
",rx_buffer[i]);
}
}
}; |