Доброй день, появилась проблема с АЦП на PIC16F72 - написал следующую программу
Код
selection ;Выборка для АЦП каждые 300мс
; RA0 и RA1 входы для АЦП
CLRF INTCON ;Запретить все прерывания
CLRF PORTA ;Иницилизация портов
CLRF PORTB
CLRF PORTC
COMF PORTA
COMF PORTB
COMF PORTC
BSF STATUS,RP0 ;Вкл. 1 банк регистров
BCF STATUS,RP1
BCF STATUS,IRP
BANKSEL TRISA
MOVLW B'00000011'
MOVWF TRISA ;Порт RA0, RA1 - на ввод RA2 - RA5 - на вывод
MOVLW 00h
MOVWF TRISB ;Порт В настроить на вывод
MOVLW 00h
MOVWF TRISC ;Порт С настроить на вывод
BANKSEL ADCON1
CLRF ADCON1
BSF ADCON1,0 ; Вход опорного напряжения - 3, все пины - аналоговые входы
;MOVWF ADCON1 ; Настройка АЦП 0,1 раз. Вход 3 - U упр
BANKSEL ADCON0
;MOVLW 81H
CLRF ADCON0
BSF ADCON0,ADCS1; выбор источника тактового сигнала - Fosc/32
BSF ADCON0,ADON ; включить АЦП
;MOVWF ADCON0 ;Настройка АЦП вкл АЦП f/32 0 раз вход
; аналого-цифровое преобразование
ACP
;BSF PORTA,2 ; потушить старший анод
;BSF PORTA,4 ; потушить средний анод
;BSF PORTA,5 ; потушить младший анод
BCF ADCON0,CHS0; подключить канал RA0 к АЦП
BCF ADCON0,CHS1
BCF ADCON0,CHS2
BANKSEL TRISA
movlw B'00000011'
movwf TRISA
NOP
NOP
NOP
NOP
NOP ; здесь задержка для схемы выборки-хранения напряжения
NOP
NOP
NOP
NOP
NOP
BSF ADCON0,GO ;старт АЦП
NOP
NOP
BANKSEL INTCON
BSF INTCON,GIE
BSF INTCON,PEIE
BANKSEL PIE1
BSF PIE1,ADIE
ACPcurrent ; АЦПшим ток
BTFSC ADCON0,GO_DONE ;анализ готовности АЦП
GOTO ACPcurrent
MOVF ADRES,0 ;чтение результата преобразования АЦП
MOVWF L_byte1
BANKSEL STATUS
BCF STATUS,C ; Очищаем флаг переноса
RLF L_byte1,1 ; Умножим на два, дабы получить на выходе максимум не 255,а 510
BTFSC STATUS,C ; если при умножение был установлен флаг переноса - сдвинем старшую часть
RLF H_byte1,1
BANKSEL PIR1
BSF ADCON0,CHS0 ; подключить канал RA1 к АЦП
BCF ADCON0,CHS1
BCF ADCON0,CHS2
NOP ; задержка для схемы выборки хранения напряжения
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF ADCON0,GO ;старт АЦП
NOP
NOP
BANKSEL PIE1
BSF PIE1,ADIE
ACPvoltage ; АЦПшим напряжение
BTFSC ADCON0,GO_DONE;анализ готовности АЦП
GOTO ACPvoltage
MOVLW 00h ;чтение результата преобразования АЦП
MOVWF H_byte2
MOVF ADRES,0
MOVWF L_byte2
return
Далее преобразование в BCD и вывод на трехразрядный 8-сегментный индикатор, так вот при включении этой функции АЦП в программу горит лишь старший разряд бледным цветом восьмеркой с точкой.
Подскажите - эта подпрограмма верна?и где возможна ошибка.
Благодарю за отзывы!