
AD_MEAS:   MOV A,CH_MEAS        ;WHAT IS TO BE MEASURED        				1
           ANL A,#03h           ;CLEAR MSNIBBLE REMAINDER HAS WHICH CH# TO MEASURE  1
           ANL P3,#11111100b    ;CLR BIT 0&1 OF P3                                  1
           ORL P3,A             ;SELECTS 4052 CHANNEL                               1
           CALL ADSTRT          ;START ADC   A not affected by this routine       2+9
           CLR A                ;
		JNB VA_SEL,VOLTS   ;Bit is Flag for CH1
		MOV A,#01       ;01 means CH1
VOLTS:     CALL GETCNT          ; GET COUNTS MSB IN B, LSB IN A           111
           mov ADCNT,B          ;HI byte                                  1
           mov ADCNT+1,A        ;LO byte
           ret                  ;                                         2

;======================================================
ADSTRT:                                        ;FOR STARTING A/D CONVERSION
           CLR Din              ; MAKE IT LO > OUTPUT                     1TICK
           CLR sclk             ; CLOCK TO BE LOW FIRST                   1TICK
           CLR _CS              ; ENABLE ADC CHIP & START CONEVERSION     1TICK
           SETB Din             ; TOMAKE VALID START BIT                  1TICK
		NOP
		NOP
           SETB sclk            ; THIS ACTUALLY STARTS CONVERSION         1TICK
           NOP                  ;                                         1
		NOP
           CLR sclk             ; NOW 1 CLOCK CYCLE OVER & START BIT SENT 1TICK
           CLR Din              ;
           RET                  ;                                         2TICKS
;==========================================================   TOTAL  =    9TICKS
;GET ADCOUNTS: THIS REQUIRES CHANNEL # IN A 0= CH0   1= CH1
; CHANNEL WORD    CH    MSB  ODD/SIGN  SINGLE/DIFF  ACTUAL WORD
;                 0      1     0          1         0000 0101
;                 1      1     1          1         0000 0111
; WORD IS SHIFTED OUT RIGHT SO LSB = SINGLE
;result 2MSBits in B and 8bits in A
;modified for MCP3002 & 24MHz CRYSTAL 13/04/07

GETCNT:    MOV DPTR,#CHWORD     ;POINTER TO CHWORD                            2
           MOVC A,@A+DPTR       ;GET REQD CHWORD                              2
           MOV R0,#03h          ; 3 BITS TO SEND                              1
                                ;                                   =6INITIAL
NXTBIT:    RRC A                ; GET BIT IN CARRY at this point sclk is low  1
           MOV Din,C            ;SHIFT TO Din PIN                             1
		NOP
           SETB sclk            ; CLK HIGH                                    1
           NOP                  ; 
		NOP                 ;                           1
           CLR sclk             ;                                             1
           DJNZ R0,NXTBIT       ;  SO 7TICKS /BIT  X 3= 21                    2
                                ;ALL 3BITS SENT NOW GET THE DATA BITS
           CLR A                ;                                             1
           MOV B,A              ;A CLRD                                       1
           CLR C                ;                                             1
           SETB SCLK            ; RAISE CLOCK HIGH                            1
           MOV C,DOUT           ; GET NULL BIT DATA                           1
           JC ADERROR           ; IF BIT IS 1 THEN AD PROBLEM          =5TICKS

           MOV R1,#04H          ; GET 4 HIGH BITS FIRST                       1

NXTB2:     CLR SCLK             ;DATA IS OUT ON FALLING EDGE                  1
           NOP                  ; 
           NOP                  ;                                            1
           SETB SCLK            ;READ DATA AFTER RISING EDGE                  1
           MOV C,DOUT           ; READ BIT MSB FIRST                          1
           RLC A                ;                                             1
           DJNZ R1,NXTB2        ;                                             2
                                ;  TOTAL 1+(7X 2 = 14) 15 TICKS
           MOV B,A              ; HI BYTE IN B                                1

           CLR A                ;                                             1
           CLR C                ;                                             1
           MOV R1,#08H          ; LO 8BITS                                    1
                                ;                                      3INITIAL
NXTB8:     CLR SCLK             ;                                             1
           NOP                  ;                                             1
           NOP                  ;
           SETB SCLK            ;                                             1
           MOV C,DOUT           ;                                             1 TICK
           RLC A                ;                                             1TICK
           DJNZ R1,NXTB8        ; 7X8=56                                      2TICKS
                                ; NOW ALL 8BITS IN A  56+3 FOR NXT8
           SETB DIN             ;                                             1
           SETB _CS             ;DESELECT AD FOR NEXT CONVERSION        	1
           RET                  ;2   6+21+6+15+59+4= 111 TICKS FOR 1CONVRSION

ADERROR:   MOV A,#00		  ;								1
           MOV B,#00            ;AD ERROR THEN COUNTS= 00				1
           SETB _CS             ;DESELECT AD FOR NEXT CONVERSION        	1
           RET                  ; CYCLE TIME FOR ADC READING > 70uSec.		2

;==================================================================
