Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава б. Основы программирования МКАVR 133 где число прерываний может достигать нескольких десятков, а из-за четырехбайто­ вого формата команды jmp автоматически заменить ее на единственную reti или nop не получается, и легко наделать ошибок. Способ основан на использовании директивы . org, которая устанавливает абсолютный адрес в памяти программ. В inс-файлах есть специальные определения констант для адресов прерываний, на­ пример (взято из файла m1 6def. inc для модели ATmega l б) : . equ INTOaddr Ох0 002 External Interrupt Request О . equ INTladdr Ох0 0 0 4 External Interrupt Request 1 . equ OC2addr ОхО О О б Timer/Counter2 Compare Match . equ OVF2addr ОхО О О В Timer/Counter2 Overflow . equ ICPlad9.r ОхОООа Timer/Counterl Capture Event . equ OVFladdr Ох0 0 1 0 Timer/Counterl Overflow . equ OVFOaddr Ох0 0 1 2 Timer/CounterO Overflow . equ INT2addr Ох0 0 2 4 External Interrupt Request 2 . equ OCOaddr Ох0 0 2 6 T imer/CounterO Compare Match . equ S PМRaddr Ох0 0 2 8 Store Program Memory Ready Тогда, если вам, к примеру, никакие иные прерывания не требуются, кроме внеш­ них прерываний INTO и INT2, а также прерывания переполнения Timerl , то начало программы может быть таким, как показано в листинге 6 . 7 . ; Установка векторов прерываний . org О ; начало программы после сброса rjmp RESET . org INTOaddr ; адрес прерывания INTO rjmp Int_O . org OVFladdr ; адрес прерывания OVFl rjmp OVF_Timerl . org INT2addr ; адрес прерывания INT2 rjmp Int_2 . org INT_VECTORS_S I ZE ; Конец таблицы прерываний - начало кода <программ а> Здесь Int_o, OVF_Timerl и Int_2 - процедуры, которые выполняются при возникно­ вении соответствующих прерываний. Если первым идет вектор сброса rjmp RESET, то . org о в начале ставить необязательно. В общем-то необязательно и направлять в конец таблицы прерываний ( rNТ_VECTORs_s r zE ) , но только если остальные указа­ тели идут строго по их очередности в этой таблице . Обратите внимание на то, что при таком способе записи при смене модели не требуется что-либо исправлять (при

RkJQdWJsaXNoZXIy MTExODQxMg==