Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Не правильная компиляция СИ кода в HEX / MPLAB X | C

Чт апр 12, 2018 23:06:18

Всем привет! Пытаюсь освоить PIC12F629. В качестве IDE выбрал MPLAB X. Сделал блинк, компилирую... загружаю в PicKit 3 Programmer... и не работает. PIC выдаёт 0.10 вольт на пине. Посмотрел в HEX и тут вижу: в самом начале какой-то "2BFD" на 000. На "3e2" уже начинаются какие-то данные. Почему так произходит? (При компиляции ассеблерского кода всё нормально.)
ИзображениеИзображение

Re: Не правильная компиляция СИ кода в HEX / MPLAB X | C

Пт апр 13, 2018 10:49:48

... и не работает

поправил, расположил тут:
viewtopic.php?p=3352979#p3352979
в протеусе мигает
з.ы. у этих пиков, насколько помню, в начале программы должна быть команда загрузки константы для внутреннего RC генератора или переход в конец. А компилятор вроде с давних времен код с конца размещал.

Re: Не правильная компиляция СИ кода в HEX / MPLAB X | C

Сб апр 14, 2018 07:50:26

Посмотрел в 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

..... 

Re: Не правильная компиляция СИ кода в HEX / MPLAB X | C

Вс апр 15, 2018 00:01:00

... и не работает

поправил, расположил тут:
viewtopic.php?p=3352979#p3352979
в протеусе мигает
з.ы. у этих пиков, насколько помню, в начале программы должна быть команда загрузки константы для внутреннего RC генератора или переход в конец. А компилятор вроде с давних времен код с конца размещал.

Урааа!!! Работает!! Только надо было поправить GPIO4 на GPIO2. Я рад как ребёнок!!!!11 :)) :lol: :) 8) :love: :wink: :))) :idea:
Изображение
Код:
Вложения
MAIN.c
pic12f629 blink C
(1.42 KiB) Скачиваний: 562
worked_test.X.production.hex
pic12f629 blink
(215 байт) Скачиваний: 573
Ответить