Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC16F72 АЦП
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
ArgentumLIME
Доброй день, появилась проблема с АЦП на 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-сегментный индикатор, так вот при включении этой функции АЦП в программу горит лишь старший разряд бледным цветом восьмеркой с точкой.
Подскажите - эта подпрограмма верна?и где возможна ошибка.
Благодарю за отзывы!
evc
Цитата(ArgentumLIME @ May 1 2010, 00:50) *
Далее преобразование в BCD и вывод на трехразрядный 8-сегментный индикатор,...где возможна ошибка.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.