答: MOV A, 20H MOV DPTR, #0020H MOVX @DPTR, A
(4) 将程序状态字寄存器PSW内容传送到外部RAM的0D0H单元中。 答: MOV A, PSW MOV DPTR, #00D0H MOVX @DPTR, A
(5) 将内部RAM 08H~7FH单元,共120字节传送到以8000H为首地址的外部RAM中。 答: MOV DPTR, #8000H MOV R0, #08H MOV R2, #120
LOOP: MOV A, @R0 MOVX @DPTR, A INC R0 INC DPTR DJNZ R2, LOOP END
(6) 将外部RAM 8000H~0803FH单元,共64字节传送到以40H为首地址的内部RAM中。
答: MOV DPTR, #8000H MOV R0, #40H MOV R2, #64
LOOP: MOVX A, @DPTR MOV @R0, A INC DPTR INC R0 DJNZ R2, LOOP END
(7) 将外部RAM 8000H~0807FH单元,共128字节传送到以0000H为首地址的外部RAM中。
答: AURX1 EQU 0A2H ;注意要自己定义 MOV DPTR, #8000H INC AUXR1 MOV DPTR, #0000H INC AUXR1 MOV R0, #128
LOOP: MOVX A, @DPTR INC DPTR INC AUXR1
MOVX @DPTR, A INC DPTR INC AUXR1 DJNZ R0, LOOP END
(8) 将存放在内部RAM 的40H、41H和外部RAM的 8000H、8001H的16位二进制数相加,结果存放在内部RAM 的40H和41H单元中(假设低位字节存放在低地址中)。
答: MOV DPTR, #8000H MOVX A, @DPTR ;注意使用MOVX指令,下同 ADD A, 40H MOV 40H, A INC DPTR MOVX A, @DPTR ADDC A, 41H MOV 41H, A END
(9) 如果0~9七段数码显示器对应的字模码3FH,06H,5BH,4FH,66H,6DH,7DH, 07H,7FH,6FH存放在1000H为首地址的程序存储器中,写出将数字4对应的字模码输出到外部RAM 3003H单元(即扩展I/O端口地址)的程序段。
答: MOV DPTR, #1000H MOV A, #4 MOVC A, @A+DPTR ;注意使用MOVC指令 MOV DPTR, #3003H MOVX @DPTR, A ;注意使用MOVX指令 ORG 1000H DB 03FH,06H,5BH,4FH,55H,66H,6DH,6DH,07H,7FH,6FH END
(10) 将内部RAM 01H~0FFH单元内容清零。 答: MOV R0, #01H
LOOP: MOV @R0, #0 INC R0 CJNE R0, #0FFH, LOOP END
(11) 我国FSK来电显示采用单数据消息格式,其中第0字节为消息类型(固定为04,即单数据消息格式标志),随后的一个字节为消息体长度,消息体内的消息字包括了来电日期(月、日)与时间(时、分)(8个字节)及主叫号码,最后一个字节为校验信息(校验算法可概括为:从消息类型字节到主叫号码最后一个字节按256模式累加和,再求补码)。试写出相应的校验程序片段(假设来电信息从内部RAM 30H单元开始存放)。
答:
(12) 使内部RAM 20H单元的b7、b3位清零,b6、b2位置1,b4、b0位取反,其他位不变。
答: SETB 20H.6 ;如果给定的地址不在20H~2FH之间,则不能用位寻址
SETB 20H.2 CLR 20H.7 CLR 20H.3 CPL 20H.4 CPL 20H.0
(13) 将IPH寄存器的b7、b5位清零,b2、b0位置1,其他位不变。 答: IPH EQU 0B7H MOV A, IPH ANL A, #01011111B ORL A, #00000101B MOV IPH, A END
(14) 将内部RAM 30H单元乘4(假设30H单元内容不超过63)。 答: MOV 30H, #4 MOV A, 30H RL A RL A MOV 30H, A END
(15) 将存放在内部RAM 40H、41H和外部RAM 8000H、8001H的四位BCD码相加,结果存放在内部RAM 40H、41H、42H单元中(假设低位字节存放在低地址中,高位字节存放在高地址中)。
答: MOV DPTR, #8000H MOVX A, @DPTR CLR C ADD A, 40H DA A MOV 40H, A INC DPTR MOVX A, @DPTR ADDC A, 41H DA A MOV 41H, A MOV 42H, C END
(16) 将立即数32H传送到内部RAM 30H单元中。 答: MOV 30H, #32H
(17) 将立即数32H传送到内部RAM 88H单元中。 答: MOV R0, #88H MOV @R0, 32H
END
(18) 将Acc.3位送Acc.0位。 答: MOV C, ACC.3 MOV ACC.0, C END
(19) 用MCS-51位指令,实现P1.3?P1.2?P1.1?P1.0的逻辑运算。
答: MOV C, P1.3 ANL C, /P1.2 MOV 20H.0, C ;暂存 MOV C, P1.1 ORL C, P1.0 CPL C ORL C, 20H.0 END
3-6 假设4位BCD码压缩存放在R3、R2中,试编写BCD减1的程序段,并在仿真机上验证。 答: ;相当于WXYZ+10000-1=WXYZ+9999 CLR C; MOV A, R2 ADD A, #99 DA A MOV R2, A MOV A, R3 ADDC A, #99 DA A MOV R3, A END
3-7 利用双DPTR功能,将存放在程序存储区内的数表(共计16字节,首地址为DATATAB)传送到以4000H为首地址的外部RAM中。 答: AUXR1 EQU 0A2H MOV DPTR, #DATATAB INC AUXR1 MOV DPTR, #4000H MOV R7, #16 ;16 个字节 MOV A, #0 ;最开始的位置
LOOP: MOV R6, A ;暂存A的值
MOVC A, @A+DPTR ;注意用MOVC,同时职能用A做变址寄存器 INC DPTR MOVX @DPTR, A ;注意使用MOVX指令 MOV A, R6
INC DPTR
I INC A ;A的值增1,指向下一个字节 DJNZ R7, LOOP DATATAB: DB 01H,02H, 03H,04H, 01H,02H,03H,04H
END
3-8 将存放在R3、R2中的三位压缩BCD码转换为二进制形式。 答: 三位BCD码<999 MAIN:
MOV A, R2 ANL A, #0F0H SWAP A MOV B, #10 MUL AB
MOV B, A //存放十位 MOV A, R2 ANL A, #0FH
ADD A, B //加个位 MOV R2, A //暂存 //
MOV A, R3 ANL A, #0FH MOV B, #100 MUL AB // ADD A, R2 // MOV R2, A //
MOV A, B // ADDC A, #0 MOV R3, A
3-9 将存放在R2中不超过十进制99的二进制数转换为压缩BCD码,结果存放在R2中。
答: MOV A, R2
MOV B, #10 DIV AB SWAP A ORL A,B MOV R2,A
3-10 在32位除16位的多位除法运算中,如果已知除数在8000H~FFFFH之间,为缩短运算时间,是否需要扩展被除数?请写出相应的程序段。
答:不需要,因为32位二进制(FFFFFFFFH)表示的最大十进制数为4294967295,除以80000H~FFFFH之间的数,其结果<=1FFFFH(注:“1”存放在进位位),所以用32位已经
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库新编单片机原理与应用课后答案(2)在线全文阅读。
相关推荐: