Если функции являются обычными функциями C, компилятор не может знать, что функция используется как прерывание.Да, вы можете вызвать эту функцию.
Если, как и в вашем случае, вы должны указать такие функции, используя interrupt 0
или любым другим способом (ISR
, INTERRUPT
), вы обычно не можете.
Проблема часто заключается в инструкции return
(на уровне ассемблера), используемой для завершения функции: Для подпрограммы обработки прерывания компилятор должен использовать другую инструкцию возврата.
Вы указали другой методдля "вызова функции": я предполагаю, что Timer1 = 1;
будет эффективно устанавливать бит запроса прерывания для прерывания по таймеру, что приведет к активации подпрограммы обработки прерывания.Это не должно быть проблемой вообще.Но вам нужно проверить руководства процессора / компилятора о том, какое прерывание обрабатывается первым, и если прерывания ISR прерываются.
Кстати, вы могли бы предоставить больше информации и подробностей.Не все говорят о «вызове вектора прерывания», а затем показывают, что «переменная» установлена в единицу.Я предполагаю, что вы в разработке встроенных;пожалуйста, укажите такие вещи, как компилятор и / или процессор, поскольку они более чем уместны для предоставления полезного ответа.