Я несколько раз вызываю процедуру - в PIC Simulator вижу код
Код
RETURN; возврат, нормально
MOVLW 0x00
MOVWF PCL; почему после возврата из процедуры меня кидает в начало программы?!
Сама процедура - АЦП
Код
selection ;Выборка для АЦП каждые 300мс
; очищение и настройки
banksel PORTA
CLRF INTCON ;Запретить все прерывания
CLRF PORTA ;Иницилизация портов
CLRF PORTB
CLRF PORTC
COMF PORTA
COMF PORTB
COMF PORTC
BANKSEL TRISA
MOVLW B'00000011'
MOVWF TRISA ;Порт RA0, RA1 - на ввод RA2 - RA5 - на вывод
MOVLW 00h
MOVWF TRISB ;Порт В настроить на вывод
MOVLW 00h
MOVWF TRISC ;Порт С настроить на вывод
; переходим к АЦП
BANKSEL ADCON1
MOVLW B'00000101'
MOVWF ADCON1 ; Вход опорного напряжения - Vdd, RA0-1 - аналоговые входы
BANKSEL ADCON0
MOVLW B'10000001'
MOVWF ADCON0
;MOVWF ADCON0 ; Настройка АЦП вкл АЦП f/32 0 раз вход
BCF PIR1,ADIF
BSF INTCON,GIE
banksel PIE1
BSF PIE1,ADIE
; аналого-цифровое преобразование
ACP
NOP
NOP
NOP
NOP
NOP ; здесь задержка для схемы выборки-хранения напряжения
NOP
NOP
NOP
NOP
NOP
call delayACP
banksel ADCON0
BSF ADCON0,GO_DONE ;старт АЦП
call delayACP
call delayACP
NOP
NOP
ACPcurrent ; АЦПшим ток
; BTFSS ADCON0,GO_DONE ;анализ готовности АЦП
; GOTO ACPcurrent
MOVF ADRES,W ;чтение результата преобразования АЦП
MOVWF L_byte1
BCF STATUS,C ; Очищаем флаг переноса
RLF L_byte1,1 ; Умножим на два, дабы получить на выходе максимум не 255,а 510
BTFSC STATUS,C ; если при умножение был установлен флаг переноса - сдвинем старшую часть
RLF H_byte1,1
BCF ADCON0,ADON
BCF PIR1,ADIF
BCF INTCON,GIE
banksel PIE1
BCF PIE1,ADIE
; подготовка для АЦПирования напряжения
BANKSEL ADCON1
MOVLW B'00000101'
MOVWF ADCON1 ; Вход опорного напряжения - Vdd, RA0-1 - аналоговые входы
BANKSEL ADCON0
BSF ADCON0,CHS0 ; подключить канал RA1 к АЦП
BCF ADCON0,CHS1
BCF ADCON0,CHS2
BSF INTCON,GIE
banksel PIE1
BSF PIE1,ADIE
NOP ; задержка для схемы выборки хранения напряжения
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
call delayACP
banksel ADCON0
BSF ADCON0,GO_DONE ;старт АЦП
NOP
NOP
ACPvoltage ; АЦПшим напряжение
; BTFSS ADCON0,GO_DONE;анализ готовности АЦП
; GOTO ACPvoltage
call delayACP
MOVLW 00h ;чтение результата преобразования АЦП
MOVWF H_byte2
MOVF ADRES,0
MOVWF L_byte2
BCF ADCON0,ADON
BCF PIR1,ADIF
BCF INTCON,GIE
banksel PIE1
BCF PIE1,ADIE
return
delayACP - процедура, состоящая из 40 NOP'ов
вот после неё и вылетает.
подскажите в чём может быть проблема?
спасибо.