Так понятно, почему. В программе используются прерывания от таймера. При любых прерываниях программа пика переходит по адресу 4h (запоминая в стеке откуда она перешла).
Хоть у меня в проге и не указан явно адрес 4h, но обработчик прерывания обозначен коментами:
Код: Выделить всё
*** Калибровка Генератора ***
bsf Status,5
Call 3FFh ; Загрузить калибровочную константу в w
movwf OSCCAL
goto start
;*** ПОДПРОГРАММА ПРЕРЫВАНИЯ ***
bcf GPIO,0
...
Твой код явно указывает компилятору, что по адресу 4h будут расположены команды "nop" - нифига не делать и "retfie" - выход из прерывания (пик берёт из стека адрес команды, который он запомнил при переходе к обработчику прерывания) с установкой бита разрешения всех немаскированных прерываний. Соответственно, мой обработчик (bcf GPIO,0 и т.д.) никогда не выполнится.