这程序也写的太复杂了!既然51单片机有DIV指令,并且只是把A中的数字转变为BCD,那就用DIV直接运算:
MOV A,#0FDH
MOV B,#100
DIV AB
MOV 50H,A
MOV A,B
MOB B,#10
DIV AB
MOV 51H,A
MOV 52H,B
计算完成,这样50H就是百位数,51H是十位数,52H是个位数
这个运算是通过移位的方式,将一个十六进制的数据做十进制调整,这条指令DJNZ R7,LOOP执行完之后,BCD码的百位在50H,十位和个位在51H。 MOV A,#0FDH,0FDH是待转换的十六进制数据。最终通过这一段指令
INC R1
MOV A,#00H
XCHD A,@R1
MOV 52H,A
MOV A,@R1
SWAP A
MOV @R1,A之后,50H,51H,52H就依次存放的是百十个位了