F_Get_ADC10bitResult:
MOV ADC_RES,#0
MOV ADC_RESL,#0
MOV A,R7
ORL A,#0E8H ;Trigger ADC
MOV ADC_CONTR,A
NOP
NOP
NOP
NOP
L_10bitADC_Loop1:
MOV A,ADC_CONTR
JNB ACC.4,L_10bitADC_Loop1 ;Wait for the ADC conversion complement
MOV ADC_CONTR,#080H ;Clear flag
MOV A,ADC_RES
MOV B,#04H
MUL AB
MOV R7,A
MOV R6,B
MOV A,ADC_RESL
ANL A,#03H
ORL A,R7
MOV R7,A
RET
F_AutoZero: ; Call once every 250ms
; This is detected using the sum of the absolute values of the differences between two adjacent samples.
CLR A
MOV R5,A
L_AutoZero_Loop:
MOV A,R5
ADD A,ACC
ADD A,#LOW (adc)
MOV R0,A
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
MOV A,R5
ADD A,ACC
ADD A,#LOW (adc_prev+01H)
MOV R0,A
CLR C
MOV A,R7
SUBB A,@R0
MOV R3,A
MOV A,R6
DEC R0
SUBB A,@R0
MOV R2,A
CLR F0 ;Push down
JNB ACC.7,L_AutoZero_1
SETB F0
CLR C
CLR A
SUBB A,R3
MOV R3,A