Ещё один совет, по поводу оформления векторов.
Если заглянуть в файл m16def.inc то там можно найти следующее:
Код: Выделить всё
.equ INT0addr=$002 ;External Interrupt0 Vector Address
.equ INT1addr=$004 ;External Interrupt1 Vector Address
.equ OC2addr =$006 ;Output Compare2 Interrupt Vector Address
.equ OVF2addr=$008 ;Overflow2 Interrupt Vector Address
.equ ICP1addr=$00A ;Input Capture1 Interrupt Vector Address
.equ OC1Aaddr=$00C ;Output Compare1A Interrupt Vector Address
.equ OC1Baddr=$00E ;Output Compare1B Interrupt Vector Address
.equ OVF1addr=$010 ;Overflow1 Interrupt Vector Address
.equ OVF0addr=$012 ;Overflow0 Interrupt Vector Address
.equ SPIaddr =$014 ;SPI Interrupt Vector Address
.equ URXCaddr=$016 ;UART Receive Complete Interrupt Vector Address
.equ UDREaddr=$018 ;UART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$01A ;UART Transmit Complete Interrupt Vector Address
.equ ADCCaddr=$01C ;ADC Interrupt Vector Address
.equ ERDYaddr=$01E ;EEPROM Interrupt Vector Address
.equ ACIaddr =$020 ;Analog Comparator Interrupt Vector Address
.equ TWIaddr =$022 ;Irq. vector address for Two-Wire Interface
.equ INT2addr=$024 ;External Interrupt2 Vector Address
.equ OC0addr =$026 ;Output Compare0 Interrupt Vector Address
.equ SPMRaddr=$028 ;Store Program Memory Ready Interrupt Vector Address
А это значит, что тот-же мой пример, который я показывал выше, можно оформить и так:
Показываю только вектора:
Код: Выделить всё
.cseg
.org 0x0000
jmp RESET ;От суда мы идем в начало программы, после подачи питания.
.org OVF1addr
jmp TIM1_OVF ;От суда мы идём в обработку прерывания по переполнению таймера 1
.org URXCaddr
jmp USART_RXC ;От суда мы идём в обработку прерывания приёма данных с USART
.org ADCCaddr
jmp ADC ;От суда мы идём в обработку прерывания АЦП
.org INT_VECTORS_SIZE ;Это указывает на конец таблицы векторов прерываний