Спасибо большое!!!) Буду дальше продвигаться!
/***************************************** Обработчик прерывания 1 ******************************************/
Написала для себя алгоритмик, а как реализовать не знаю...Хоть в правильном направлении иду? // сохранение контекста ( регистр STATUS и аккумулятор W) // проверка источника запроса прерывания (опрашиваем флаг) // сброс флага источника прерывания // восстановление контекста void __attribute__ ((__interrupt__, no_auto_psv)) _INT0Interrupt(void) { INTCON2=0; _INT0EP=0; // что-то.... }
/***************************************** Обработчик прерывания 2 ******************************************/
void __attribute__ ((__interrupt__, no_auto_psv)) _INT1Interrupt(void) { INTCON2=0; _INT1EP=0; // что-то }
Как найти источник прерываний (опросить флаги)? В программе необходимо определить источник прерывания (с какой стороны пришел сигнал), зажеч светодиод (INT0 - первый светодиод, на RB2, INT1 - второй светодиод, на RB3). Посчитать интервал в секундах.
+ есть кнопка которая разрешает выполнение программы и запрещает (кнопка нажата - пошла прога, еще раз нажали- остановилась (наверное запретили прерывания))
Обработку кнопки я поместила в main:
/* Для запрещения/разрешения прерываний используются две ассемблерные вставки. Группа команд push SR mov #0xE0, w0 ior SR выполняет сохранение в стеке содержимого регистра состояния (push SR), устанавливает уровень приоритета 7 для процессора, запрещая тем самым пользовательские прерывания (mov #0xE0, w0 и ior SR). // Для разрешения прерываний нужно просто извлечь из стека старое содержимое регистра.Это произойдет при нажатии на кнопку */
asm ("push SR" "\n mov #0xE0, w0" "\n ior SR"); while (_RA6 != 1); asm("pop SR"); while(1);
}
Как найти источник прерываний (опросить флаги)? В программе необходимо определить источник прерывания (с какой стороны пришел сигнал), зажеч светодиод (INT0 - первый светодиод, на RB2, INT1 - второй светодиод, на RB3). Посчитать интервал в секундах.
+ есть кнопка которая разрешает выполнение программы и запрещает (кнопка нажата - пошла прога, еще раз нажали- остановилась (наверное запретили прерывания))
Обработку кнопки я поместила в main:
/* Для запрещения/разрешения прерываний используются две ассемблерные вставки. Группа команд push SR mov #0xE0, w0 ior SR выполняет сохранение в стеке содержимого регистра состояния (push SR), устанавливает уровень приоритета 7 для процессора, запрещая тем самым пользовательские прерывания (mov #0xE0, w0 и ior SR). // Для разрешения прерываний нужно просто извлечь из стека старое содержимое регистра.Это произойдет при нажатии на кнопку */
asm ("push SR" "\n mov #0xE0, w0" "\n ior SR"); while (_RA6 != 1); asm("pop SR"); while(1);
}
|