??? 06/11/07 11:52 Read: times |
#140545 - Commented code Responding to: ???'s previous message |
OK
I had first pasted commented code. It was so horrible. So I made new txt file for removing all tabs and comments. I didnt know this inside trick. 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 ;================================================================== The connection to CH0 and CH1 are not drawn but marked as CH0 CH1 etc. Ch0 is pin 13 of CD4052 and CH1 pin3. |