Я пытаюсь выполнить аналого-цифровое преобразование на PIC16f877a. проблема в том, что когда я показываю свой результат, он работает нормально, но когда я показываю свой результат на 7 сегменте, у меня есть неправильный вывод, может быть, я не могу правильно преобразовать двоичный код в десятичный ("для преобразования BCD I Я использую 74ls47 ") Может ли кто-нибудь мне помочь.
С Уважением,
Haziq.
изображение здесь.
введите описание изображения здесь
RES_VECT CODE 0x0000 ; processor reset vector
GOTO START ; go to beginning of program
; TODO ADD INTERRUPTS HERE IF USED
CNT0 EQU 0x21 ;
MAIN_PROG CODE ; let linker place main program
START
BSF STATUS,RP0
MOVLW b'00000000'
MOVWF TRISB
MOVLW b'11110000'
MOVWF TRISD
MOVLW b'00000001'
MOVWF TRISA
BCF STATUS,5
MAIN_LOOP
CALL ADC_INIT ;INIT ADC MODULE
CALL ADC_READ ;READ ANALOG VALUE AND STORE TO ANVAL REGISTER
;OUTPUT ANVAL TO
;==================================
GOTO MAIN_LOOP
;========================================================================================
ADC_INIT
BSF STATUS,RP0 ;SELECTING BANK 01 FOR ADCON1 REG
MOVLW b'00001110' ;LEFT JUSTIFIED, FOcs/8, +VREF=VDD, -VREF=VSS,
AN0=ANALOG
MOVWF ADCON1
BCF STATUS,5 ;GOING BACK TO BANK 00
MOVLW b'010000001' ;FOcs/8, A0=ANALOG INPUT,
MOVWF ADCON0
RETURN
;=========================================================================================
ADC_READ
BCF STATUS,5 ;SELECTING BANK 00
BSF ADCON0, 2 ;START CONVERTION PROCESS (WE SET THE GO BIT)
WAIT:
BTFSC ADCON0, 2
GOTO WAIT ;WAIT FOR CONVERTION TO FINISH (WAIT FOR GO BIT TO CLEAR)
MOVF ADRESH, W ;MOVE ADRESH TO W
MOVWF PORTB ;SHOWING 8 MOST SIGNIFICANT BITS OF A/D RESULT
MOVLW 0x06
MOVWF CNT0
AGAIN_0:
BCF STATUS, C ;WE WANT SHIFT (NOT ROTATE), SO WE CLEAR CARRY
RLF ADRESL, 1 ;SHIFT LEFT 6 BITS A/D RESULT HIGH BYTE
DECFSZ CNT0
GOTO AGAIN_0
MOVF ADRESL, W ;MOVE ADRESH TO W
MOVWF PORTD ;SHOWING 2 LEAST SIGNIFICANT BITS OF A/D RESULT
RETURN
END