Звероящер (28.09.2017 09:22, просмотров: 336) ответил symbions на На жаль тут работают - а то бы было о бы решение моего вопроса
А зачем на единицу-то проверять? Результат IFa булевый же. Вот как-то...
#pragma type_attribute=__interrupt
#pragma vector=USART_RX_vect
void CUsart::usart_Rx_interrupt()
{
u8 status;
u8 data;
u8 sreg = SREG;
status=UCSR0A;
data=UDR0;
usart_RxHead=(usart_RxHead+1)&usart_Rx_buffer_mask;//store new index
if(status & ( (1<<FE0)|(1<<DOR0)|(1<<UPE0) ) )
{
usart_RxBuf[usart_RxHead]=0xff;//ошибка
return;
}
if(usart_RxHead==usart_RxTail)//если переполнение буфера
{
usart_RxBuf[usart_RxHead]=0xff;//ошибка
usart_RxBuf[++usart_RxHead]=0xff;//ошибка
return;
}
usart_RxBuf[usart_RxHead]=data;
SREG = sreg;
}