Помогите разобраться с прерываниями на AVR.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено RS 25 февраля 2003 г. 09:33

Есть два прерывания: первое по переполнению таймера 0 и второе по
окончанию приему (UART). Например, по таймеру 0 на выход D7 выдается меандр.
Почему при обработке прерывания от UART_RX изменяется частота меандра?
Ведь прерывание T0_OFV имеет более высокий преоритет чем UART_RX_interrupt!!!
Или я чего-то не понимаю? Как тогда сделать так чтобы я мог использовать UART на прием и передачу и при этом небыло влияния на прерывание по таймеру T0_OFV_vect ?

char temp=0;
. . .
. . .
__interrupt void T0_OFV(void)
{
if(temp==0)
{
temp=1;
PORTD |=(1<<7);
}
else
{
temp=0;
PORTD &=~(1<<7);
}
}

#pragma vector=UART_RX_vect
__interrupt void UART_RX_interrupt( void )
{
char data;
data = UDR; /* read the received data */

if(data==0x30) // PRINT (USING UART) VARIABLES
{
while(!(USR&(1<<5))); //ожидаем установки флага UDRE (UDR-пуст)
UDR=symbol;
}
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru