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

В процессе работы нашего устройства могут возникнуть два прерывания - от таймера 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; /* Сохранить полученные данные в буффере */

}

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

Генераторы ВЧ фирм Rohde&Sсhwarz, Agilent Technology
Электронный генератор представляет собой устройство, преобразующее электрическую энергию источника постоянного тока в энергию незатухающих электрических колебаний ...

Исследование системы автоматического управления с нелинейным элементом
Исследовать систему автоматического управления с нелинейным элементом. 1. Преобразовать заданную структурную схему системы. 2. Применив метод гармоническог ...

Меню

Copyright @2022, TECHsectors.ru.