Обработка прерывания работы микроконтроллера PIC 16F684
-
19-09-2019 - |
Вопрос
Я только что закончил курс микропроцессоров в колледже, всего несколько недель назад, там мы программировали только на ассемблере.Мы узнали довольно много (ИМХО) о прерываниях.
Вот мой вопрос:Я программирую на C, используя компилятор HiTech для 16F684, в разделе datasheet обсуждаются прерывания (Спецификация PIC 16F684 Раздел 12.4) в нем говорится, что программа перейдет к вектору прерывания 0x0004.Используя сборку в моем классе микропроцессоров, мы бы просто настроили инструкцию .org, указывающую на этот адрес, и записали необходимую сборку ниже, чтобы при возникновении прерывания она переходила туда и выполнялась.Я могу разобраться с этим на ассемблере, но когда я программирую на C, я не верю, что у меня есть контроль над тем, где части программы размещаются в памяти, что представляет проблему.Я не могу понять, как размещать команды при прерывании в C.
Пожалуйста, дайте мне знать, если мне нужно будет уточнить!
Решение
Этот часто задаваемый вопрос от Microchip имеет некоторую информацию об использовании прерываний в HiTech C.
Другие советы
HiTech C расширяет язык C с помощью interrupt
тип функции:
void interrupt my_interrupt_handler (void) {
handle_interrupts_here();
}
Вам действительно следует получить руководство по компилятору.Я полагаю, что руководство для Pic-lite доступно для скачивания бесплатно, по крайней мере, так было, когда я загружал свою копию некоторое время назад в 2001 году.
Вам придется покопаться в документации HiTech, но часто компиляторы используют специальные ключевые слова для определения функций прерывания.Компилятору или системе времени выполнения приходится иметь дело с функцией, вызываемой прерыванием, специально:В дополнение к настройке вектора компилятор (или система выполнения) должен сохранить все регистры.Возможно, ему не придется делать этого для обычной функции, не требующей прерывания.
Руководство станет вашим другом.
В Компилятор CCS для PICs использует директивы компилятора #INT_* или "атрибуты" функций обработки прерываний для различных источников прерываний.