;*********************************************************************
;* Filename: DeltaSig.asm
;*********************************************************************
;* Author: Dan Butler
;* Company: Microchip Technology Inc.
;* Revision: 1.00
;* Date: 02 December 1998
;* Assembled using MPASM V2.20
;*********************************************************************
;* Include Files:
;* p16C622.inc V1.01
;*********************************************************************
;* Provides two functions implementing the Delta Sigma A2D.
;* InitDeltaSigA2D sets up the voltage reference and comparator
;* in the "idle" state.
;* DeltaSigA2D runs the actual conversion. Results provided in
;* result_l and result_h.
;* See An700 figure 2 for external circuitry required.
;*********************************************************************
;* What's changed
;*
;* Date Description of change
;*
;*********************************************************************
#include <p16f628a.inc>
cblock
result_l
result_h
counter:2
endc
;
;
;
;InitDeltaSigA2D
bsf STATUS,RP0
movlw 0xEC
movwf VRCON
bcf PORTA,3 ;
bcf STATUS,RP0
movlw 0x06 ;
movwf CMCON
return
;
; Delta Sigma A2D
; The code below contains a lot of nops and goto next instruction. These
; are necessary to ensure that each pass through the loop takes the same
; amount of time, no matter the path through the code.
;DeltaSigA2D
clrf counter
clrf counter+1
clrf result_l
clrf result_h
movlw 0x03 ;
movwf CMCON
loop
btfsc CMCON,C1OUT ;
goto complow ;
comphigh
nop
bcf PORTA,3 ;
incfsz result_l,f ;
goto eat2cycles ;
incf result_h,f ;
goto endloop ;
complow
bsf PORTA,3 ;
nop ;
goto eat2cycles ;
eat2cycles
goto endloop ;
endloop
incfsz counter,f ;
goto eat5cycles ;
incf counter+1,f ;
movf counter+1,w ;
andlw 0x04 ;
btfsc STATUS,Z ;
goto loop ;
goto exit ;
eat5cycles
goto $+1 ;
nop ;
goto loop ;
exit
movlw 0x06 ;
movwf CMCON
return
end