winnie 发表于 2009-5-20 13:39:28

PIC的AD模块精度

PIC的AD模块可以用AD中断的方式的方式,也可以用查询的方式,但我需要多次求平均,可我发现我的程序16次只能做第一次转换,请问为什么?          我的AD取得电压值很小,他是判断此电压是否为零的,既然此AD只能准确到8位,那该用什么方法提高精度呢,能不能提高到10位以上?
;=========================================================
; A/D转换子程序,采样16次并取平均值
;
;---------------1次A/D转换子程序--------------------------
ADCONV
CALL INTADC
   CALL DELAY1
   BSF ADCON0,GO ;A/D START
ADCONV1
   BTFSS PIR1,ADIF
   GOTO ADCONV1
   MOVF ADRESH,W
   MOVWF ADH
   BANKSEL ADRESL
   MOVF ADRESL,W
BANKSEL PORTC
   MOVWF ADL
RETURN
;------------------------16次求和--------------------------
ADAVG
MOVLW 10H
MOVWF COUNT0
ADAVG1
CALL ADCONV
BCF STATUS,C
MOVF ADL,0
ADDWF TEMPL,1
MOVF ADH,0
ADDWF TEMPH,1
   BTFSC STATUS,C ;DO WITH "C"
CALL ADDONE
GO_ON
DECFSZ COUNT0,1
GOTO ADAVG1
MOVLW 04H
MOVWF RL
GO1
BCF STATUS,0
RRF TEMPL,1
RRF TEMPH,1
DECFSZ RL,1
GOTO GO1

RETURN
ADDONE
MOVLW 01H
ADDWF TEMPH
RETURN
;-----------------------------------------------
INTADC
BANKSEL ADCON0
MOVLW 0X41
MOVWF ADCON0BANKSEL ADCON1
MOVLW 0X8E
MOVWF ADCON1BANKSEL ADCON0
RETURN
;-----------------------------------------------

winnie 发表于 2009-5-20 13:39:40

我找到问题了,我在AD中断溢出后没有及时清除溢出标志,后加上就没事了。

;---------------1次A/D转换子程序--------------------------
ADCONV
CALL INTADC
   CALL DELAY1
   BSF ADCON0,GO ;A/D START
   ADCONV1
   BTFSS PIR1,ADIF
   GOTO ADCONV1
   MOVF ADRESH,W
   MOVWF ADH
   BANKSEL ADRESL
   MOVF ADRESL,W
BANKSEL PORTC
   MOVWF ADL

   BCF PIR1,ADIF                  ;加一句清中断溢出标志即可
RETURN
页: [1]
查看完整版本: PIC的AD模块精度