本人汇编语言萌新,有好多不懂的地方,下面是程序,求大神解答
OE BIT P2.7 ;ADC0808的OE端
EOC BIT P2.6 ;ADC0808的EOC端
ST BIT P2.5 ;ADC0808的START和ALE端
CS4 BIT P2.3
CS3 BIT P2.2
CS2 BIT P2.1
CS1 BIT P2.0
LED_0 DATA 30H ;显示缓冲区
LED_1 DATA 31H
LED_2 DATA 32H
LED_3 DATA 33H
ADC DATA 34H ;存放转换后的数据
ORG 0000H
AJMP START
ORG 0030H
;--------------初始化------------------------------------------
START: MOV SP,#60 ;设置堆栈
MOV LED_0,#00H ;清空显示缓冲区
MOV LED_1,#00H
MOV LED_2,#00H
MOV LED_3,#00H
MOV DPTR,#TABLE ;送字形码表首地址
;---------------ADC0808转换--------------------------------
AD_CONV: CLR ST
SETB ST
CLR ST ;启动转换
JNB EOC,$ ;等待转换结束
SETB OE ;允许输出
MOV ADC,P1 ;暂存转换结果
CLR OE ;关闭输出
;---------------数据处理---------------------------------------
ADC_RD: MOV A,ADC ;将AD转换结果转换成BCD码
MOV B,#0C4H ;乘以19.6mv(5V/255)
MUL AB ;AB相乘结果存在A
MOV R7,A ;把A结果存在R7
MOV R6,B ;B中数据存在R6
TUNBCD: CLR A ;清空A
CLR C ;清空C
MOV R3,A ;清空R3
MOV R4,A ;清空R4
MOV R5,A ;清空R5
MOV R2,#10H ;把10H赋给R2
T_BCD: MOV A,R7 ;把R7中结果赋给A
RLC A ;将A循环左移
MOV R7,A ;将循环左移后的结果存在R7
MOV A,R6 ;把R6数据赋给A
RLC A ;将A循环左移
MOV R6,A ;将循环左移结果给R6
MOV A,R5 ;把R5数据赋给A
ADDC A,R5 ;把A和R5中数据相加
DA A ;将计算结果改为十进制
MOV R5,A ;把A中数据赋给R5
MOV A,R4 ;把R4中数据赋给A
ADDC A,R4 ;把R4和A中数据相加
DA A ;把结果转换为十进制
MOV R4,A ;把转换后的结果赋给R4
MOV A,R3 ;把R3中数据赋给A
ADDC A,R3 ;把A和R3中数据相加
MOV R3,A ;把相加结果存在R3
DJNZ R2,T_BCD ;R2-1若不为零则跳到T_BCD
MOV A,R5 ;把R5数据移到A
SWAP A ;将A高四位和低四位互换
ANL A,#0FH ;把A和0FH相与
MOV LED_0,A ;把相与结果存在LED_0
MOV A,R4 ;把R4结果存在A
ANL A,#0FH ;把A和0FH相与
MOV LED_1,A ;把相与后的结果存在LED_1
MOV A,R4 ;把R4结果存在A
SWAP A ;把A高四位和低四位互换
ANL A,#0FH ;把A和0FH相与
MOV LED_2,A ;把相与后的结果赋给LED_2
MOV A,R3 ;把R3数据赋给A
ANL A,#0FH ;把A和0FH相与
MOV LED_3,A ;把相与后的结果存在LED_3
LCALL DISP ;调用DISP函数
AJMP AD_CONV ;跳到AD_CONV执行
DISP: MOV A,LED_0 ;把LED_0的数据存在A
CLR CS4 ;清空CS4
CLR CS3 ;清空CS3
CLR CS2 ;清空CS2
CLR CS1 ;清空CS1
MOVC A,@A+DPTR ;查表
SETB CS4 ;把CS4置1
MOV P0,A ;把A的数据存在P0
LCALL DELAY ;调用DELAY函数
CLR CS4 ;把CS4清零
MOV A,LED_1 ;把LED_1赋给A
MOVC A,@A+DPTR ;查表
SETB CS3 ;把CS3置1
MOV P0,A ;把A的数据赋给P0
LCALL DELAY ;调用DELAY函数
CLR CS3 ;清零CS3
MOV A,LED_2 ;把LED_2的数据赋给A
MOVC A,@A+DPTR ;查表
SETB CS2 ;把CS2置1
MOV P0,A ;把A中数据给P0
LCALL DELAY ;调用DELAY函数
CLR CS2 ;清空CS2
MOV A,LED_3 ;把LED_3中数据给A
MOVC A,@A+DPTR ;查表
SETB CS1 ;把CS1置1
MOV P0,A ;把A中数据给P0
CLR P0.7 ;第一位显示小数点
LCALL DELAY ;调用DELAY函数
CLR CS1 ;清空CS1
RET
DELAY: MOV R7,#3 ;把3赋给R7
DELA: MOV R6,#115 ;把115赋给R6
DJNZ R6,$ ;R6-1若不为0则跳到$
DJNZ R7,DELA ;R7-1若不为0则跳到DELA
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,6FH
END