Посмотрел в HEX и тут вижу: в самом начале какой-то "2BFD" на 000. На "3e2" уже начинаются какие-то данные. Почему так произходит?
0x2BFD это команда
goto 0x03FD, то есть безусловный переход по адресу 0x03FD.
Так как в исходном коде нет обработчика прерываний, кода по вектору
0х0004 нет.
Размещение кода "снизу" флеша - стандартная фича микрочиповских компиляторов для 8-разрядных контроллеров. Сверху (младшие адреса) обычно размещаются таблицы констант. Даже тело обработчика прерываний размещается снизу, а на векторе 0004 тоже обычно goto.
PS. Далее исполнение выглядит так (в коде нет вызова калибровочной константы):
Код:
0x03FD 0x0183 clrf STATUS
0x03FE 0x2BE2 goto 0x03E2
0x03E2 0x1683 bsf STATUS, RP0
0x03E3 0x0195 clrf WPU ; WPU=0x00
0x03E4 0x1781 bsf OPTION_REG, GPPU
0x03E5 0x3007 movlw 0x07
0x03E6 0x1283 bcf STATUS, RP0
0x03E7 0x0099 movwf CMCON0 ; CMCON=0x07
0x03E8 0x1683 bsf STATUS, RP0
0x03EA 0x0185 clrf TRISIO ; TRISIO=0x00
0x03EB 0x1283 bcf STATUS, RP0
0x03EC 0x0185 clrf GPIO ; GPIO=0x00
0x03ED 0x1283 bcf STATUS, RP0
0x03EE 0x3010 movlw 0x10
.....