而且两块板测试 都是输出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
一周热门 更多>