Simple I would like to test ADC operation with PIC 16f877a in assembly language
I am taking the ADC reading out at port C and port B.
The problem is : the DONE bit cannot be clear so that I can take my readings.It does not stop polling in Proteus simulation.
here is my code and thanks in advance
Btw, I am toggling portD to see what is going on ,but this piece of code unreachable
I am taking the ADC reading out at port C and port B.
The problem is : the DONE bit cannot be clear so that I can take my readings.It does not stop polling in Proteus simulation.
here is my code and thanks in advance
Rich (BB code):
INCLUDE "P16F877A.INC"
__CONFIG 0X3F7A
BUFFER0 EQU 0X20
BUFFER1 EQU 0X21
BUFFER2 EQU 0X22
ORG 0X00
GOTO MAIN
MAIN:
BSF STATUS, RP0
CLRF TRISB
CLRF TRISC
CLRF TRISD
BCF STATUS, RP0
CLRF PORTD
CLRF PORTB
CLRF PORTC
MOVLW 0X89
MOVWF ADCON0
BSF STATUS, RP0
MOVLW 0X80
MOVWF ADCON1
AGAIN:
CALL TACQ
BSF ADCON0,GO ;GO/DONE--> BIT 2 OF ADCON0 SOC SIGNAL
A:
BTFSC ADCON0,2 ; WAIT FOR END OF CONVERSION SIGNAL
GOTO A
MOVLW ADRESL
MOVWF PORTB
MOVLW ADRESH
MOVWF PORTC
CLRF PORTD
CALL ONESEC
MOVLW 0XFF
MOVWF PORTD
CALL ONESEC
GOTO AGAIN
; DELAY 0.1964 SEC * 5 = 1 SEC at 4 MHz
ONESEC:
MOVLW 0X05
MOVWF BUFFER2
LOOP3:
MOVLW 0XFF
MOVWF BUFFER1
LOOP2:
MOVLW 0XFF
MOVWF BUFFER0
LOOP1:
DECFSZ BUFFER0,F
GOTO LOOP1
NOP
DECFSZ BUFFER1,F
GOTO LOOP2
DECFSZ BUFFER2,F
GOTO LOOP3
RETURN
TACQ: ; DELAY 20USEC
MOVLW 0X07
MOVWF BUFFER2
LOOP4:
DECFSZ BUFFER2,F
GOTO LOOP4
RETURN
END