不好意思,程序的说明不是很清楚,但此程序是经过验证的,绝
ORG 000H ljmp START
ORG 0100H START: mov SP,#070H mov R0,#010H ;压缩BCD码最高位地址 mov R1,#02FH ;HEX最低位地址 mov R7,#09 ;9字节BCD数据 call BCD_HEX jmp $
;例如RAM中010H~018H保存数据BCD码数据=99 22 33 44 55 66 77 88 99 共9字节 ;转换结果是:028H~02F的HEX数据=0D C5 1F 0F C9 45 0E 13
;==========压缩BCD码数据,转换为16进制数据子程序======== ;函数名称:BCD2_HEX ;功能: 压缩BCD码数据,转换为16进制数据 ;入口参数:R0 指向BCD码最高位(压缩BCD码数据保存格式 = 低位地址存最高位BCD码),R7 = 压缩BCD码数据字节数 ;出口参数:(R1) = 最低16进制数据地址(低位地址存最高位HEX数据) ;影响资源:C,A,B,R2,R3,R4,R5,R6,R7 ;其他: 压缩BCD码 ;==========================经过修改========================= BCD_HEX: push PSW push Acc push B mov A,R1 mov R6,A mov A,R7 mov R3,A clr A BCD_HEX0: mov @R1,A dec R1 djnz R3,BCD_HEX0 mov A,R7 mov R3,A ;清零 BCD_HEX1: lcall BCD_HEX2 mov A,@R0 anl A,#0F0H swap A lcall BCD_HEX4 lcall BCD_HEX2 mov A,@R0 anl A,#0FH lcall BCD_HEX4 inc R0 djnz R3,BCD_HEX1 pop B pop Acc pop PSW inc R1 ret
BCD_HEX2: mov A,R7 ;*10 mov R4,A mov A,R6 mov R1,A clr C mov R2,#00H BCD_HEX3: mov A,@R1 mov B,#0AH push PSW mul AB pop PSW addc A,R2 mov @R1,A mov R2,B dec R1 djnz R4,BCD_HEX3 ret ;*C10 End BCD_HEX4: mov R5,A ;+ mov A,R6 mov R1,A mov A,R7 mov R4,A mov A,R5 addc A,@R1 mov @R1,A dec R1 dec R4 mov A,R4 jnz BCD_HEX5 ljmp BCD_HEXEND BCD_HEX5: mov A,@R1 addc A,#00H mov @R1,A dec R1 djnz R4,BCD_HEX5 BCD_HEXEND: ret
|
|