英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: PIC的AD模块精度 [打印本页]

作者: winnie    时间: 2009-5-20 13:39
标题: 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 ADCON0  BANKSEL ADCON1
  MOVLW 0X8E
  MOVWF ADCON1  BANKSEL ADCON0
  RETURN
;-----------------------------------------------
作者: winnie    时间: 2009-5-20 13:39
我找到问题了,我在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




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2