Проектирование процедур обработки прерываний

В процессе работы нашего устройства могут возникнуть два прерывания - от таймера 0 и от УСАПП. Прерывание от таймера О обрабатывается очень просто: перезагружается начальное значение и флаг его срабатывания устанавливается в 1.

pragma vector=TIMERO_OVF_vect

interrupt void TIMERO_OVF_interrupt(void)

{

TCNT0=TmrO_Reload; TmrOFlag = 1;

}

Прерывание от УСАПП говорит о том, что прием пакета данных был закончен и принят в буферный регистр UDR. Обработчик этого прерывания должен принять эти данные и поместить в кольцевой буфер. Для этого должен быть рассчитан новый индекс буфера (указатель головы) и если этот индекс вдруг стал равен указателю хвоста, это говорит о том, что произошла ошибка и буфер приемника переполнился.

^pragma vector=USART_RXC vect

^interrupt void USART_RX_interrupt{ void )

{

unsigned char data; unsigned char tmphead;

data = UDR;

tmphead = ( USART_RxHead + 1 );

USART_RxHead = tmphead; /* Сохранить новый индекс V

if < tmphead == USART_RxTail )

(

/* Ошибка! Буффер приемника переполнен */

)

USART_RxBuf[tmphead] = data; /* Сохранить полученные данные в буффере */

}

Другие публикации

Линейная решетка вибраторных антенн
Одной из актуальных задач антенной техники является создание антенн с управляемыми диаграммами направленности. Свойство сканирования позволяет осуществлять сопров ...

Одноканальное устройство контроля температуры
В последнее время персональные компьютеры получили очень широкое распространение во всех сферах жизни общества. Они используются и в производственной области для реше ...

Меню

Copyright @2020, TECHsectors.ru.