10、试编写一子程序,是R1、R0指向的两个片外RAM连续单元中的高4位二进制数,合并成一个字节,装入累加器A中。已知R0指向低地址,并要求该单元高四位放在A中高四位。 答: MOVX A,@R1 ANL A,#0F0H SWAP A MOV R2,A MOVX A,@R0 ANL A,#0F0H ORL A,R2
11、试编程把以2040H为首地址的连续50个单元的无符号数按降序排列,存放到以3000H为首地址的存储区中。
答: MOV R2,#50 MOV R3,#20H
MOV R4,#40H ;源地址 MOV R5,#30H
MOV R6,#00H ;目的地址
SEND: MOV DPH,R3 ;SEND将2040H数据块移入3000H存储区 MOV DPL,R4 MOVX A,@DPTR INC DPTR MOV R3,DPH MOV R4,DPL MOV DPH,R5 MOV DPL,R6 MOVX @DPTR,A INC DPTR MOV R5,DPH MOV R6,DPL DJNZ R2,SEND
MOV R2,#49 ;重复次数 CMP1: MOV DPTR,#3000H
MOV R3,#49 ;比较次数 CMP2: MOVX A,@DPTR MOV B,A INC DPTR MOVX A,@DPTR CJNE A,B,L1
- 10 -
AND MOVX INC INC DJNZ SJMP A,#00H @DPTR,A R0 DPTR R2,LP $
L1:
JC NOMOVE MOV 30H,A CLR C
MOV A,DPL SUBB A,#01H
MOV DPL,A MOV A,30H MOVX @DPTR,A INC DPTR MOV A,B MOVX @DPTR,A
NOMOVE: DJNZ R3,CMP2 ;50个数重复一遍? DJNZ R2,CMP1 ;排序结束? LJMP $
12、试编一查表程序,从首地址为2000H,长度为100的数据块中找出ASCII码为A,将其地址送到20A0H和20A1H单元中。 答: MOV DPTR,#2000H MOV R2,#100 GO_ON: MOVX A,@DPTR
CJNE A,#41H,IFEND MOV A,DPH MOV B,DPL
MOV DPTR,#20A0H MOVX @DPTR,A INC DPTR XCH A,B MOVX @DPTR,A SJMP OVER IFEND: INC DPTR
DJNZ R2,GO_ON OVER: SJMP OVER
13、设在200H~204H单元中,存放5个压缩BCD码,编程将他们转换成ASCII码,存放到以205H单元为首地址的存储区。 答: MOV R2,#05H MOV R3,#02H MOV R4,#00H MOV R5,#02H MOV R6,#05H CHLP: MOV DPH,R3
MOV DPL,R4
MOVX A,@DPTR INC DPTR MOV R3,DPH MOV R4,DPL MOV B,A
- 11 -
SWAP A
ANL A,#0FH ORL A,#30H MOV DPH,R5 MOV DPL,R6 MOVX @DPTR,A INC DPTR MOV A,B ANL A,#0FH ORL A,#30H MOVX @DPTR,A MOV R5,DPH MOV R6,DPL DJNZ R2,CHLP
14、有一无符号数据块长度在30H单元中,其首地址为31H单元,求出数据块中最大值,并存入40H中。
答: MOV R0,#31H MOV R1,30H MOV 40H,#00H LOOP: MOV A,@R0 CJNE A,40H,L1 SJMP AGAIN L1: JNC L2 SJMP AGAIN L2: MOV 40H,A AGAIN: INC R0
DJNZ R1,LOOP SJMP $ 15、略
16、在以2000H为首地址的存储区内,存放20个用ASCII码表示的0~9之间的数,试编程,将它们转换成BCD码,并以压缩BCD码的形式存在3000H~3009H单元中。 答: MOV R2,#10 MOV R3,#20H MOV R4,#00H MOV R5,#30H MOV R6,#00H LP: MOV DPH,R3 MOV DPL,R4 MOVX A,@DPTR ANL A,#0FH SWAP A XCH A,B INC DPTR MOVX A,@DPTR ANL A,#0FH
- 12 -
ORL A,B INC DPTR MOV R3,DPH MOV R4,DPL MOV DPH,R5 MOV DPL,R6 MOVX @DPTR,A INC DPTR MOV R5,DPH MOV R6,DPL DJNZ R2,LP SJMP $
17、试编程实现下列逻辑表达式功能。设P1.7~P1.0为8个变量的输入端,而其中P1.7又作为变量的输出端。
;输入端定义
X0 EQU P1.0
X1 EQU P1.1 X2 EQU P1.2 X3 EQU P1.3 X4 EQU P1.4 X5 EQU P1.5 X6 EQU P1.6
X7 EQU P1.7
(1)Y?X0X1X2?X3?X4X5X6?X7
MOV ANL ANL ORL MOV MOV ANL ANL ORL ORL MOV
C,X0 C,X1 C,/X2 C,X3 00H,C C,X4 C,X5 C,X6 C,/X7 C,00H P1.7,C
(2)Y?X0X1?X2X3X4?X5X6X7
MOV ANL CPL MOV MOV ANL ANL C,X0 C,X1 C
00H,C C,X2 C,X3 C,X4
- 13 -
CPL C
MOV 01H,C MOV C,X5 ANL C,X6 ANL C,X7 CPL C
ORL C,O1H CPL C
ORL C,00H MOV P1.7,C 18、略 19、略
20、试编写延时1s、1min、1h子程序。
;单片机时钟fosc=12MHz,计算为近似值 ;1s延时子程序 DLY_1S: MOV R0,#10 L3: MOV R1,#200 L2: MOV R2,#250 L1: DJNZ R2,L1 DJNZ R1,L2 DJNZ R0,L3 RET
;延时1min
DLY_1M: MOV R3,#60 L4: LCALL DLY_1S DJNZ R3,L4 RET
;延时1h
DLY_1H: MOV R4,#60 L5: LCALL DLY_1M DJNZ R4,L5 RET
21、用程序实现c=a2+b2。设a、b均小于10,a存在31H单元中,b存在32H单元中,c存33H单元。
答: ORG 1000H SR: MOV A,31H
ACALL SQR MOV R1,A MOV A,32H ACALL SQR ADD A,R1 MOV 33H,A SJMP $
- 14 -