ORG 0000H MOV DPTR,#1000H MOV R0,#30H MOV R7,#32 LOOP:MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R7,LOOP RET 8.编写程序,实现双字节无符号数加法运算,要求60H61H)。 答: ORG 0000H MOV A,R1 ADD A,R7 MOV 61H,A MOV A,R0 ADDC A,R6 MOV 60H,A SJMP $ END - 16 -
R0R1)+(R6R7) (→(9.若80C51的晶振频率为6MHz,试计算延时子程序的延时时间。 DELAY:MOV R7,#0F6H LP:MOV R6,#0FAH DJNZ R6,$ DJNZ R7,LP RET 答:延时时间: 2μs*{[1+((1+2*250+2)*246)+2]+2}=0.247486秒(含调用指令2个机器周期) 10.在内部RAM 的30H~37H单元存有一组单字节无符号数。要求找出最大数存入BIG单元。试编写程序实现。 答: ORG 0000H BIG DATA 2FH ONE DATA 2AH TWO DATA 2BH START:MOV R7,#7 ;比较次数 MOV R0,#30H LOOP:MOV A,@R0 MOV ONE,A INC R0 MOV TWO,@R0 CLR C - 17 -
SUBB A,@R0 JC NEXT ;ONE小,TWO大继续比下一对数 MOV @R0,ONE ;ONE大放后面(交换) DEC R0 MOV @R0,TWO ;TWO小放前面 INC R0 ; NEXT:DJNZ R7,LOOP MOV BIG,37H SJMP $ END 11.编写程序,把累加器A中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的50H、51H、52H中。 答:单字节二进制数转换为压缩的BCD码仅需要2个字节;在将压缩的BCD码拆分存于3个单元。 org 0 MOV 52H,#0 MOV 51H,#0 MOV 50H,#0 MOV A,#0FDh LCALL DCDTH SJMP $ - 18 -
DCDTH:MOV R7,#8 MOV R0,A ;暂存于R0 LOOP:CLR C MOV A,R0 RLC A MOV R0,A MOV R1,#51H; MOV A,@R1 ; ADDC A,@R1 ; DA A ; MOV @R1,A ; DEC R1 MOV A,@R1 ADDC A,@R1 DA A MOV @R1,A DJNZ R7,LOOP INC R1 ;50H已是结果,R1指向51H,51H单元需拆分 MOV A,#00H XCHD A,@R1 MOV 52H,A - 19 -
MOV A,@R1 SWAP A MOV @R1,A RET END 12.编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。 答: ORG 0 MOV R1,#5BH MOV A,R1 ANL A,#0F0H SWAP A ACALL ASCII MOV R3,A MOV A,R1 ANL A, #0FH ACALL ASCII MOV R4, A SJMP $ ASCII:PUSH ACC CLR C - 20 -