楼主这段程序从哪下的啊,怎么和我写的一模一样啊,而且还少了一段吧。源程序应该如下:
CS BIT P1.0
SDO BIT P1.1
SDI BIT P1.2
CLOCK BIT P1.3
EOC BIT P1.4
AD_DATA_H EQU 78H
AD_DATA_L EQU 79H
R8 EQU 7AH
ORG 0000H
LJMP MAIN
ORG 0030H
;*****************************************
;系统初始化
;*****************************************
MAIN: MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MAIN_2: ACALL TLC2543 ;调用TLC2543AD转换子程序
ACALL CHULI ;调用数据处理子程序,将AD转换结果乘以122,结果放入40H~42H单元
MOV R5,40H
MOV R6,41H
MOV R7,42H
ACALL H3B4 ;调用三字节二进制转四字节BCD码,结果放入43H~46H单元
ACALL CHAIFEN ;调用拆分子程序
MOV R8,#25
MAIN_1: ACALL DISPLAY ;调用显示子程序
DJNZ R8,MAIN_1
AJMP MAIN_2
;*****************************************
;TLC2543AD转换子程序
;*****************************************
TLC2543: CLR CLOCK ;清时钟
SETB CS ;设置片选为高
CLR CS ;设置片选为低
MOV R4,#4 ;先读高4位数据
MOV A,#00H ;选择通道0
TLC2543_1:MOV C,SDO
RLC A
MOV SDI,C
SETB CLOCK
CLR CLOCK
DJNZ R4,TLC2543_1
MOV AD_DATA_H,A ;保存高4位数据
MOV A,#00H
MOV R4,#8 ;再读低8位数据
TLC2543_2:MOV C,SDO
RLC A
SETB CLOCK
CLR CLOCK
DJNZ R4,TLC2543_2
MOV AD_DATA_L,A ;保存低8位数据
SETB CS ;设置片选为高
RET
;*****************************************
;数据处理子程序,将AD转换结果乘以122,结果放入40H~42H单元
;*****************************************
CHULI: MOV A,AD_DATA_L
MOV B,#122
MUL AB
MOV 42H,A
MOV 41H,B
MOV A,AD_DATA_H
MOV B,#122
MUL AB
ADD A,41H
MOV 41H,A
MOV A,B
ADDC A,#00H
MOV 40H,A
RET
;*****************************************
;入口条件:待转换的三字节十六进制整数在R5(高)、R6、R7中。
;出口信息:转换后的四字节BCD码整数在R1(高)、R2、R3、R4中。
;影响资源:PSW、A、R0~R7 堆栈需求: 2字节
;*****************************************
H3B4: CLR A ;BCD码初始化
MOV R1,A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R0,#24 ;转换三字节十六进制整数
H3B4_1: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
MOV A,R4 ;BCD码带进位自身相加,相当于乘2
ADDC A,R4
DA A;十进制调整
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
DA A
MOV R2,A
MOV A,R1
ADDC A,R1
DA A
MOV R1,A
DJNZ R0,H3B4_1 ;处理完24bit
MOV 43H,R1
MOV 44H,R2
MOV 45H,R3
MOV 46H,R4
RET
;*****************************************
;拆分子程序,结果放入30H~33H
;*****************************************
CHAIFEN: MOV A,44H
ANL A,#0F0H
SWAP A
MOV 30H,A
MOV A,44H
ANL A,#0FH
MOV 31H,A
MOV A,45H
ANL A,#0F0H
SWAP A
MOV 32H,A
MOV A,45H
ANL A,#0FH
MOV 33H,A
RET
;*******************
;显示子程序
;*******************
DISPLAY: MOV DPTR,#TAB1
MOV P2,#0FEH
MOV A,30H
MOVC A,@A+DPTR
ORL A,#80H
MOV P0,A
ACALL DS1MS
MOV P2,#0FDH
MOV A,31H
MOVC A,@A+DPTR
MOV P0,A
ACALL DS1MS
MOV P2,#0FBH
MOV A,32H
MOVC A,@A+DPTR
MOV P0,A
ACALL DS1MS
MOV P2,#0F7H
MOV A,33H
MOVC A,@A+DPTR
MOV P0,A
ACALL DS1MS
RET
DS1MS: MOV TH1,#0FCH
MOV TL1,#18H
SETB TR1
DS1MS_1: JBC TF1,DS1MS_2
SJMP DS1MS_1
DS1MS_2: CLR TR1
RET
TAB1: DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
END |