Вот фрагмент известной многим подпрограммы, используемой для вывода цифр в индикатор.
call LCDTable
movwf r0
…………………………………………………… …………………………………………………
…………………………………………………… ……………………………………………………
decfsz Count1
goto vyv_1
bcf PortA,blink
return
;******************* ******************** *****************
; Таблица кодов индикатора
;******************* ******************** *****************
LCDTable
addwf PC,f ; W + PC -> PC
retlw b'00000010' ;data 0
retlw b'10011110' ;data 1
retlw b'00100100' ;data 2
.................... .................... ......
Встретился с проблемой, которой никогда не было. При отладке в MPLAB Sim благополучно доходим до
addwf PC,f (выделил цветом)
при выполнении следующего шага происходит переход куда попало, но не на нужную. Например, если в регистре w единица, должен выполняться переход на
retlw b'10011110' ;data 1
Причем, в счетчике команд указатель счетчика и содержимое w суммируется правильно. Переполнения младшего байта счетчика (PCL) нет.
Сколько раз пользовался этим фрагментом, никогда никаких проблем не было.
Что я мог сделать не так?