Курсовая работа: Проектирование удаленного устройства индикации

i

_disable_interrupt() ;

TCCRO = 5;// установитьделительчастоты 1024

TIMSK |= (1 «TOIEO); // разрешитьпрерываниятаймера

TCNTO = TmrO_Reload;

enable_interrupt{);

]

ИнициализацияУСАППработаетследующимобразом - врегистр

UBRRзаписываетсязначение, котороесоответствуетзаданной скоростипередачиданныхдлясоответствующейчастотыработы микроконтроллера.

УСАПП и параметры кадра данных. Кроме этого, т.к. прием и обработка данных в программе происходит через кольцевой буфер, то в процедуре инициализации необходимо провести начальные установки для головы и хвост буфера - обнулить их.

void USART_Init( unsigned int baudrate )

i

unsigned char x;

UBRROH = (unsigned char) (baudrate»8) ; UBRROL = (unsigned char) baudrate;

UCSRB = ({1 « RXCIE) j <1«ЮС£Н) ) ;

UCSRC = (1«URSEL) | (3«UCSZO) | (1«UPM1);

x = 0;

USART_RxTail = x; USARTJRxHead = x;

}

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

В процессе работы нашего устройства могут возникнуть два прерывания - от таймера 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 )

К-во Просмотров: 427
Бесплатно скачать Курсовая работа: Проектирование удаленного устройства индикации