ADC0832折腾好几天了 C和汇编都试过 数据基本都输出00H 0FFH

2020-02-05 08:50发布

而且两块板测试 都是输出00H与0FFH

C也试了无数个例程 很少出现其他数据
接线没有问题 就几根线 而且DI DO独立
也试过 开始怀疑淘宝的芯片问题了
/***显示数据错误************************************/
/***2012 7 8  12 12*********************************/
               ADCS       BIT     P1.6     ;数据输入
               ADDI       BIT     P0.0     ;片选
               ADDO       BIT     P0.0     ;片选
               ADCLK      BIT     P0.1     ;时钟
               RS         BIT     P3.5
               RW         BIT     P3.6
               E          BIT     P3.7
               DAT        EQU     5AH
               COM        EQU     5BH
               START      EQU     44H      ;44H>49H
               DATAH      EQU     40H      ;读取数据高位
               DATAL      EQU     41H      ;读取数据低位
               T_S        EQU     50H
               T_M        EQU     51H
               T_H        EQU     52H
               T_G        EQU     53H
;---------数据字节定义-------------
               ORG        0000H
               LJMP       MAIN
               ORG        0030H
MAIN:          CLR        P1.5
               LCALL      CLRYJ
               LCALL      DEL
               SETB       P1.5  
               CLR        P1.6
               LCALL      XSA
               SETB       P3.5
               LCALL      DEL
               SETB       P1.6
               CLR        P1.5
LOOP:          ACALL      ADCONV
               LCALL      ZH
               LCALL      CB
               LCALL      XSSJ
               LCALL      DEL
               SETB       P1.5
               CLR        P1.6
               LCALL      DEL
               CLR        P1.5
               SETB       P1.6
               LJMP       LOOP
;==== ADC0832读数据子程序====
ADCONV:        MOV        B,#03H   ;通道1修改
               SETB       ADDI ;初始化通道选择
               NOP
               NOP
               NOP
               NOP
               CLR        ADCS ;拉低/CS端
               NOP
               NOP
               NOP
               NOP
               SETB       ADCLK ;拉高CLK端
               NOP
               NOP
               CLR        ADCLK ;第一个下降沿
               MOV        A,B
              ; MOV        C,ACC.1 ;确定取值通道选择
               SETB       C    ;通道1选择修改
               MOV        ADDI,C        ;第一位数据
               NOP
               NOP
               NOP
               NOP
               SETB       ADCLK ;拉高CLK端
               NOP
               NOP
               NOP
               NOP
               CLR        ADCLK ;第二个下降沿
               MOV        A,B
               SETB       C     ;通道1选择修改
              ; MOV        C,ACC.0 ;确定取值通道选择
               MOV        ADDI,C
               NOP
               NOP
               NOP
               NOP
               SETB       ADCLK ;拉高CLK端
               NOP
               NOP
               NOP
               NOP
               CLR        ADCLK ;;第三个下降沿
               SETB       ADDI
               NOP
               NOP
               NOP
               NOP
               CLR        ADDI  ;MUX SETTING 增加
               MOV        R7,#8 ;准备送下后8个时钟脉冲
AD_1:          MOV        C,ADDO ;接收数据
               MOV        ACC.0,C
               RL         A ;                  左移一次
               SETB       ADCLK
               NOP
               NOP
               NOP
               NOP
               CLR        ADCLK ;形成一次时钟脉冲
               NOP
               NOP
               NOP
               NOP
               DJNZ       R7,AD_1 ;循环8次
               MOV        C,ADDO ;接收数据
               MOV        ACC.0,C
               MOV        B,A        ;读出数据交寄存器B
               MOV        R7,#8
AD_13:         MOV        C,ADDO     ;接收数据
               MOV        ACC.0,C
               RR         A          ;右移一次
               SETB       ADCLK
               NOP
               NOP
               NOP
               NOP
               CLR        ADCLK ;形成一次时钟脉冲
               NOP
               NOP
               NOP
               NOP
               DJNZ       R7,AD_13 ;循环8次
               CJNE       A,B,ADCONV ;数据校验
               SETB       ADCS ;拉高/CS端
               CLR        ADCLK ;拉低CLK端
               SETB       ADDO ;拉高数据端,回到初始状态
               MOV        R7,A      ;低位TDATAL
               MOV        R6,#00H      ;高位
               MOV        R5,#00H         ;
               RET
;----------------二十进制转换程序-------
ZH:            CLR        A               ;清累加器
               MOV        T_G,A
               MOV        T_H,A           ;清除出口单元,准备转换
               MOV        T_M,A
               MOV        T_S,A
               MOV        R2,#24          ;共计转换24位
HB3:           MOV        A,R7            ;获得低位数据
               RLC        A               ;带位左移,高位数据在CY中
               MOV        R7,A            ;保存数据
               MOV        A,R6            ;取得高位数
               RLC        A               ;带进位左移
               MOV        R6,A            ;保存数据
               MOV        A,R5            ;取得高位数
               RLC        A               ;带进位左移
               MOV        R5,A
               MOV        A,T_S           ;得到低位数据
               ADDC       A,T_S           ;累加
               DA         A               ;十进制调整
               MOV        T_S,A           ;保存数据
               MOV        A,T_M           ;得到第二位数据
               ADDC       A,T_M           ;累加
               DA         A               ;十进制调整
               MOV        T_M,A           ;保存结果
               MOV        A,T_H           ;得到第三位
               ADDC       A,T_H           ;累加
               DA         A
               MOV        T_H,A           ;保存
               MOV        A,T_G           ;得到第四位
               ADDC       A,T_G           ;累加
               MOV        T_G,A            
               DJNZ       R2,HB3          ;没有转换完毕,重复转换
               NOP                       ;转换完毕,恢复PSW;返回
;---------------------------------------
;码型变换,将带转换的数据分成,不同的数位,并转换成单位BCD

;---------------------------------------
BCD:           MOV        R0,#START       ;获得首地址
               MOV        A,T_S           ;获得待转化的低位
               MOV        B,#16           ;转化进制,如果要进行十进制转换
               DIV        AB             ;计算 A/B   aA
               MOV        @R0,B           ;第一位转换完毕,保存低位转化后
               INC        R0              ;自增
               MOV        @R0,A           ;保存高位
               INC        R0              ;取第二个数据地址
               MOV        A,T_M           ;获得第二个需要转换的数据
               MOV        B,#16           ;十六进制
               DIV        AB ;计算
               MOV        @R0,B           ;存低位
               INC        R0
               MOV        @R0,A           ;存高位
               INC        R0              ;第三位
               MOV        A,T_H           ;获得第三个需要转换的数据
               MOV        B,#16           ;十六进制
               DIV        AB             ;计算
               MOV        @R0,B           ;存低位
               INC        R0
               MOV        @R0,A           ;存高位
               LCALL      ASJ             ;ADD <6675>
               RET                       ;完毕,返回
;=======================================
CB:            MOV        A,58H
               MOV        DPTR,#TAB
               MOVC       A,@A+DPTR
               MOV        68H,A
;---------------------------------------
               MOV        A,57H
               MOV        DPTR,#TAB
               MOVC       A,@A+DPTR
               MOV        67H,A
;---------------------------------------
               MOV        A,56H
               MOV        DPTR,#TAB
               MOVC       A,@A+DPTR
               MOV        66H,A
;---------------------------------------
               MOV        A,55H
               MOV        DPTR,#TAB
               MOVC       A,@A+DPTR
               MOV        65H,A
               RET
;-------------清除显示子程序 -----------
CLRYJ:         MOV        COM,#30H
               LCALL      WRI
               ACALL      D1
               MOV        COM,#0DH
               LCALL      WRI
               ACALL      D1
               MOV        COM,#01H ;清除显示子程序
               LCALL      WRI
               LCALL      D1
               MOV        COM,#06H   
               LCALL      WRI
               LCALL      D1
               RET
;-------------写命令子程序 -----------
WRI:           PUSH       ACC
               CLR        RS
               SETB       RW
WRI1:          MOV        P2,#0FFH                  
               SETB       E
               MOV        A,P2
               CLR        E   
               JB         ACC.7,WRI1
               LCALL      D1
               CLR        RW              
               MOV        P2,COM
               LCALL      D1
               SETB       E
               LCALL      D1        
               CLR        E   
               POP        ACC              
               RET
;-------------写数据子程序 -----------
WRD:           PUSH       ACC
               CLR        RS   
               LCALL      D1
               SETB       RW                  
WRD1:          MOV        P2,#0FFH
               LCALL      D1
               SETB       E               
               MOV        A,P2
               LCALL      D1
               CLR        E               
               JB         ACC.7,WRD1
               LCALL      D1
               SETB       RS
               LCALL      D1
               CLR        RW
               LCALL      D1
               MOV        P2,DAT
               SETB       E
               LCALL      D1
               CLR        E
               POP        ACC
               RET                  
;---------------------------------------
XSA:           MOV        R1,#0CEH
               MOV        COM,#80H
               LCALL      WRI
               MOV        DAT,#0B2H
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD      ;cai参
;---------------------------------------
               MOV        R1,#0FDH
               MOV        COM,#81H
               LCALL      WRI
               MOV        DAT,#0CAH
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD   ;shu数
;---------------------------------------
               MOV        R1,#0E8H   
               MOV        COM,#82H   
               LCALL      WRI
               MOV        DAT,#0C9H
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD   ;She设
;---------------------------------------
               MOV        R1,#0A8H
               MOV        COM,#83H
               LCALL      WRI
               MOV        DAT,#0B6H
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD   ;din定
               RET
;---------------------------------------
XSSJ:          MOV        R2,#0A3H
               MOV        R1,68H
               MOV        COM,#90H
               LCALL      WRI
               MOV        DAT,R2
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD     
;---------------千位--------------------
               MOV        R2,#0A3H
               MOV        R1,67H
               MOV        COM,#91H
               LCALL      WRI
               MOV        DAT,R2
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD     
;----------------百位-------------------
               MOV        R2,#0A3H
               MOV        R1,66H
               MOV        COM,#92H
               LCALL      WRI
               MOV        DAT,R2
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD     
;----------------十位-------------------
               MOV        R2,#0A3H
               MOV        R1,65H
               MOV        COM,#93H
               LCALL      WRI
               MOV        DAT,R2
               LCALL      WRD
               MOV        DAT,R1
               LCALL      WRD      
               RET
;----------------个位-------------------
ASJ:           MOV        55H,44H         ;个位
               MOV        56H,45H                    ;十位
               MOV        57H,46H                    ;百位
               MOV        58H,47H                    ;千位
               MOV        59H,48H
               MOV        5AH,49H
               RET
DEL:           MOV        R2,#0FFH
DE2:           MOV        R3,#0AFH
DE3:           MOV        R4,#01FH
               DJNZ       R4,$
               DJNZ       R3,DE3
               DJNZ       R2,DE2
               RET
;--------------------------------------
D1:            MOV        R7,#0FFH
DEM:           MOV        R6,#06H         ;0001.0100
DEN:           DJNZ       R6,DEN
               DJNZ       R7,DEM
               RET                       ;延时6毫秒子程序
;--------------------------------------
DYS:           MOV        R0,#0FFH
DY4:           DJNZ       R0,DY4
               RET
               ORG        0500H
TAB:           DB         0B0H,0B1H,0B2H,0B3H,0B4H
               DB         0B5H,0B6H,0B7H,0B8H,0B9H
               END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。