关于STC12C5410AD的A/D转换
哪位能帮偶看看,按说输入端接VCC,应该显示1111111111B,接GND应该显示0才对,可是转换的结果漂移不定:
AUXR      EQU 8EH
P1M0      EQU 91H        ;P1 口模式选择寄存器0
P1M1      EQU 92H        ;P1 口模式选择寄存器1
;AUXR2     EQU 0A2H
WDTRST    EQU 0A6H
ADC_CONTR EQU 0C5H      ;A/D 转换寄存器
;ADC_DATAH EQU 2FH      ;A/D 转换结果寄存器, 为10 位A/D 转换结果的高8 位
;ADC_DATAL EQU 3CH      ;A/D 转换结果寄存器, 低2 位有效, 为10 位A/D 转换结果的低2 位
ADC_DATAH EQU 0C6H      ;A/D 转换结果寄存器, 为10 位A/D 转换结果的高8 位
ADC_DATAL EQU 0BEH      ;A/D 转换结果寄存器, 低2 位有效, 为10 位A/D 转换结果的低2 位
WDT_CONTR EQU 0E1H
        ORG     0000H
        LJMP    START


        ORG     002BH
        LJMP    INT_ADC

            MOV   PCON,#00H
            MOV   IE,#10110010B         ;(B2H),EA, EPCA_LVD, EADC_SPI, ES, ET1, EX1, ET0, EX0;允许 A/D 、SIO 和 T0 中断
            MOV   IP,#00000000B         ;(20H), -, PPCA_LVD, PADC_SPI, PS, PT1, PX1, PT0, PX0;A/D 转换优先
            MOV   SCON,#01010000B       ;(50H)SM0/FE, SM1, SM2, REN, TB8, RB8, TI, RI
            MOV   TH0,#0F8H
            MOV   TL0,#0CCH
            MOV   TH1,#0FBH    ;18.432MHz 晶振, 波特率= 9600
            MOV   TL1,#0FBH
            MOV   TH2,#0C7H
            MOV   TL2,#0BCH
            MOV   RCAP2H,#0C7H
            MOV   RCAP2L,#0BCH
            MOV   TMOD,#00100001B  ;(21H),GATE, C/T, M1, M0, GATE, C/T, M1, M0;T1,8位自动重装,T0,16位
            MOV   TCON,#01010101B    ;(55H),TF1, TR1, TF0, TR0, IE1, IT1, IE0, IT0;启动两定时器,外部中断边沿触发
            MOV   WDT_CONTR,0B     ;WDT_FLAG, - ,EN_WDT, CLR_WDT, IDLE_WDT, PS2, PS1, PS0
            MOV   AUXR,#00010000B      ;(10H),T0x12, T1x12, UART_M0x6, EADCI, ESPI, ELVDI, -, - ;允许A/D 中断
            MOV   ADC_CONTR,#10001111B ;(8FH),ADC_POWER, SPEED1, SPEED0, ADC_FLAG, ADC_START, CHS2, CHS1, CHS0 ;开A/D 转换电源
            MOV   A,#10000000B         ;(80H)设置A/D 通道所在的I/O P1.7为开漏模式
START:
            MOV   P1M0,A
            MOV   P1M1,A
            LCALL DELAY_1
            MOV   T_25MS,#25
            MOV   T_80MS,#4
            MOV   ALA_DELAY,#0
            MOV   DFICOUNT,#0
            MOV   DFIADDR,#5
            MOV   SAMPADR,#0H
            MOV   SRXWP,#MHG_HDR1
            MOV   A,#11100000B
            MOV   A,#11111111B
            ANL   CHIP_SE,A
;            ORL   ADC_CONTR,#00001000B ;启动AD 转换
            MOV   ADC_DATAH,#0h;01001011B ;(4BH)
            MOV   ADC_DATAL,#0H
            SJMP  $

INT_ADC:   
            PUSH  A
            PUSH  0
            PUSH  1
            PUSH  2
            ANL   ADC_CONTR,#11100111B  ;清0 ADC_FLAG, ADC_START 位, 停止A/D 转?
            MOV   A,DFICOUNT
            MOV   R3,A                  ;后面用
            ADD   A,#DFI_BUFH           ;高低字节在同一缓冲区
            MOV   R1,A

            MOV   A,ADC_DATA           ;读高字节
            RL    A
            RL    A
            MOV   R2,A                  ;高8位暂存R2
            ANL   A,#00000011B

            MOVX  @R1,A                 ;送入采集滤波缓存
;            MOV   R5,A                  ;取高8位的高2位暂存R5
            MOV   A,R2                  ;恢复高8位
            ANL   A,#11111100B
            MOV   R2,A                  ;取高8位的低6位暂存R2

            MOV   A,ADC_LOW2           ;读低字节
            ANL   A,#00000011B          ;低2位有效,所以屏蔽高6位
            ORL   A,R2                  ;与高8位的低6位合成低8位
            INC   R1                    ;
            MOVX  @R1,A                 ;送入采集缓存
                                        ;送入数字滤波缓存
            ORL   ADC_CONTR,#00001000B ;再次启动AD 转换
            POP   2
            POP   1
            POP   0
            POP   A
             RETI
急用,请您务必帮忙,多谢!