Помогите разобраться с прерываниями PIC микроконтроллеров !
Короче, немного научился программировать в машинных кодах контроллер PIC12F629, так как в ассемблере чуть что не так и программа не компилируется в код. Вот до чего дошел! Пока для изучения пишу програмки, занимающие не более 20 ячеек памяти. Но застрял на прерываниях. Как пишут в литературе, когда включается бит прерывания, например при переполнении счётчика, основная программа контроллера приостанавливается и происходит переход на подпрограмму обработки прерываний. Но какой командой из этого списка команд (всего в таблице 35 команд) установить адрес расположения подпрограммы прерывания и где его записать, в какой ячейке памяти ?
у любого МК есть так называемые векторы прерывания, куда переходит МК при возникновении конкретного прерывания, всё это прописано в даташите. и примеров в сети куча.
обработка прерывания это функция, выход из этой функции команда RETFIE.
RETLW это выход из обычной функции.
я заглянул в даташит и увидел вот это . здесь адрес 0004h это и есть адрес в ПЗУ, начиная с которого будет выполнятся подпрограмма прерываний? этот адрес один, а если надо обрабатывать прерывания от нескольких источников, то надо несколько подпрограмм, но в адресе 0004h есть место только для одного адреса или команды...
Адрес расположения подпрограммы прерывания на простых микроконтроллерах фиксированный, и его не нужно задавать никакой командой.
как понятно из этой таблицы (даташит) адрес ПЗУ с которого начинается подпрограмма прерываний - 0004h? Значит, основной код программы должен быть заметно дальше 0004, например по адресу 0100, чтобы было место для подпрограммы . И в первой ячейке ПЗУ надо написать GOTO по адр. 0100, чтобы правильно начать работу.
Я верно понимаю ?
обычно, это делается не инструкцией ЦП, а директивой ORG (или что там у PIC) обявляется адрес обработчика прерывания (вектор), откуда идет jump на саму подпрограмму. Завершается подпрограмма обработки прерывания инструкцией возврата (RETFIE/RETLW)
Но я так предполагаю, т. к ни разу не занимался PIC ассемблером, но так сделано почти везде.