DA 指令和十六进制数转BCD 码的几种方法2008 年07 月04 日 星期五 11:28DA 指令和十六进制数转BCD 码的几种方法2008-06-20 14:32 例2、设(A) = 56H 为 56 的压缩的BCD码数,(R3)= 67H,(CY)=1 执行 ADDC A,R3 DA A 结果为:124 注意:1)DA 指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是 BCD 码数; 3)DA 指令不能与减法指令配对使用,但可以实现对 A 中压缩 BCD 减一操作。 例3、设(A)=30H(压缩 BCD 码数),执行: ADD A,#99H DA A 后,便实现了 30 - 1 = 29 的操作。 例4、两个 4 位 BCD 码相加,一个存放在(31H)(30H);另一个存放在 (33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。 解:MOV R0,#30H MOV R1,#32H MOV A,@R0 ADD A,@R1 DA A MOV @R0,A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A 在进行单片机系统开发时,有很多地方需要用到十六进制数和BCD 码的转换。比如说在需要将数据在显示器上显示时,因为参与系统内部计算的数据多为二进制数,而为了显示的时候直观方便,我们通常会将数据显示为常见的十进制形式。这时在系统内部就必须进行十六进制到BCD 码的转换。 关于十六进制到BCD 码的转换,算法很多,我这里介绍三种方法。三种方法在使用的时候各有优劣,后面会进行简单的比较。 一、方法一: ;功能;单字节十六进制数转三位单字节 BCD 码 ;入口:单字节十六进制数存 R5 ;出口:单字节 BCD 码存:百位 R2,十位 R3,个位 R4 ;影响单元:中间寄存 R5 的高四位:R0,低四位:R1 HEX2BCD: MOV A,R5 ANL A,#0FH MOV R1,A MOV A,R5 ANL A,#0F0H SWAP A MOV R0,A MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV A,R1 LCALL SUB MOV A,R0 MOV R5,A START_1: CJNE R5,#00H,DEC_1 AJMP NRET_1 DEC_1: DEC R5 MOV A,#10H LCALL SUB AJMP START_1 NRET_1: MOV 7FH,R4 MOV 7EH,R3 MOV 7DH,R2 RET SUB: ;子函数开始 ADD A,R4 ;开始处理个位进十位 CJNE A,#14H,JIN1;若 A>=20 则跳 JIN2,否则跳 NRET 结束 AJMP JIN2 ; JIN1: ; JNC JIN2 ; AJMP JIN3 ; JIN2: INC R3 INC R3 CLR C SUBB A,#14H AJMP JIN5 JIN3: CJNE A,#0AH,JIN_3;若 A>=10 则跳 JIN4,否则跳 NEXT 结束 AJMP JIN4 ...