MOV A,@R1 ; ADDC A,@R1 ; DA A ; MOV @R1,A ;
DEC R1 MOV A,@R1 ADDC A,@R1 DA A MOV @R1,A 答:
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 SUBB A, #0AH
- 79 -
DJNZ R7,LOOP
INC R1 ;50H已是结果,R1指向51H,51H单元需拆分 MOV A,#00H XCHD A,@R1 MOV 52H,A MOV A,@R1 SWAP A MOV @R1,A RET END
12.编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。
POP ACC JC LOOP ADD A, #07H LOOP: ADD A, #30H RET END
13.编写程序,求内部RAM中50H~59H十个单元内容的平均值,并存放在5AH单元。 答:
ORG 0000H MOV R7,#10 MOV R0,#50H MOV B,#10 CLR C CLR A LOOP:ADDC A,@R0 INC R0 DJNZ R7,LOOP DIV AB MOV 5AH,A SJMP $ END
14.如图4.10所示,编制程序实现:上电后显示“P”,有键按下时显示相应的键号“0”~“7”。 答:
实现程序如下: TEMP EQU 30H
ORG 0000H JMP START
ORG 0100H START:MOV SP,#5FH
MOV P0,#8CH ;正序显示\
MOV P3,#0FFH ;输入方式 CLR CY
NOKEY:MOV A,P3 CPL A
JZ NOKEY ;无键按下 MOV TEMP,P3 ;有键按下 CALL D10ms
- 80 -
MOV A,P3
CJNE A,TEMP,NOKEY
;去抖动
MOV R2,#0 ;键号计数器复位 MOV A,TEMP LP:RRC A JNC DONE
INC R2 SJMP LP
MOV DPTR,#CODE_P0 MOVC A,@A+DPTR JMP NOKEY
DONE:MOV A,R2
MOV P0,A
D10ms:MOV R5,#10 ;10MS D1ms:MOV R4,#249 DL:NOP NOP
DJNZ R4,DL
DJNZ R5,D1ms RET CODE_P0:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END
- 81 -