《单片机》编程题题库答案(2)

2018-11-20 18:10

MOV DPTR,#2000H MOV R3, DPH MOV R4, DPL LOOP: MOV A,@R0 ANL A,#0FH MOV DPTR,#TAB MOVC A,@A+DPTR MOV DPH,R3 MOV DPL,R4 MOVX @DPTR,A INC DPTR MOV R3,DPH MOV R4,DPL MOV A,@R0 SWAP A

ANL A,#0FH MOV DPTR,#TAB MOVC A,@A+DPTR MOV DPH,R3 MOV DPL,R4 MOVX @DPTR,A INC DPTR MOV R3,DPH MOV R4,DPL INC R0 DJNZ R2,LOOP SJMP $

TAB: DB ‘0123456789ABCDEF’ END

11、内部RAM 30H和外部RAM 2200H开始的单元分别存放着两个8字节十六进制数(低位字节存放在前),请将二者相加(不考虑溢出情况),并将和存入内部RAM 40H开始的单元中。

解: ORG 0

MOV R0,#30H

MOV R1,#40H MOV DPTR,#2200H MOV R2,#8 CLR C LOOP: MOVX A,@DPTR ADDC A,@R0 MOV @R1,A INC R0 INC R1

第6页 共58页

INC DPTR DJNZ R2,LOOP SJMP $ END

12、请编写多字节无符号数减法程序。被减数存放在内部RAM 30H开始的8个单元中,减数存放在内部RAM 38H开始的8个单元,请将差存放到外部RAM 1000H开始的8个单元中,借位存放到F0标志中。注意:所有数据均按照从低字节到高字节的顺序存放。

解: ORG 0

LJMP START ORG 30H START: MOV R0,#30H MOV R1,#38H MOV DPTR,#1000H MOV R2,#8 CLR C LOOP: MOV A,@R0 SUBB A,@R1 MOVX @DPTR,A INC R0 INC R1 INC DPTR DJNZ R2,LOOP MOV C,F0 SJMP $ END

13、请编写多字节无符号数减法程序。被减数存放在内部RAM 20H开始的16个单元中,减数存放在内部RAM 30H开始的16个单元,请将差存放到外部RAM 2000H开始的16个单元中,借位存放到OV标志中。注意:所有数据均按照从低字节到高字节的顺序存放。

解: ADDR1 EQU 20H ADDR2 EQU 30H LEN EQU 16 ADDR3 EQU 2000H ORG 0 LJMP START ORG 30H

START: MOV R0,#ADDR1 MOV R1,#ADDR2 MOV DPTR,#ADDR3 MOV R2,#LEN CLR C LOOP: MOV A,@R0 SUBB A,@R1

第7页 共58页

MOVX @DPTR,A INC R0 INC R1 INC DPTR DJNZ R2,LOOP MOV OV,C SJMP $ END

14、将存放在内部RAM 20H-3FH单元的压缩BCD码转换成ASCII码,依次存放到外部RAM 2300H开始的单元中。(注:每个单元均先转换高四位) 解: LEN EQU 20H ADDR1 EQU 20H ADDR2 EQU 2300H ORG 0 LJMP START ORG 30H

START: MOV R0,#ADDR1 MOV DPTR,#ADDR2 MOV R2,#LEN LOOP: MOV A,@R0 ANL A,#0F0H SWAP A

ORL A,#30H (或 ADD A,#30H) MOVX @DPTR,A INC DPTR MOV A,@R0 ANL A,#0FH

ORL A,#30H (或 ADD A,#30H) MOVX @DPTR,A INC DPTR INC R0

DJNZ R2,LOOP SJMP $ END

评分办法:程序设计思路正确可得5分,指令完全写对可得10分。不要求使用伪指令。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

15、将存放在内部RAM 30H-35H单元的十六进制数转换成相应的ASCII码,依次存放到外部RAM 1100H开始的单元区中。(注:每个字节转换时先转换高四位)

第8页 共58页

解: ORG 0

MOV R0,#30H MOV DPTR,#1100H MOV R2,#6

LOOP: MOV A,@R0 ; 取需要转换的数 ANL A,#0F0H ; 屏蔽低4位 SWAP A PUSH DPH

PUSH DPL ; 保护目的地址 MOV DPTR,#TAB

MOVC A,@A+DPTR ; 查表得ASCII码 POP DPL

POP DPH ; 恢复目的地址

MOVX @DPTR,A ; 存转换后的ASCII码 INC DPTR ; 修改目的地址指针 MOV A,@R0 ; 取需要转换的数 ANL A,#0FH ; 屏蔽高4位 PUSH DPH

PUSH DPL ; 保护目的地址 MOV DPTR,#TAB

MOVC A,@A+DPTR ; 查表得ASCII码 POP DPL

POP DPH ; 恢复目的地址 MOVX @DPTR,A

INC DPTR ; 修改目的地址指针 INC R0 ; 修改源地址指针 DJNZ R2,LOOP ; 未转换完则继续 SJMP $ TAB : DB ‘0123456789ABCDEF’ END

评分办法:程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

16、内部RAM 30H开始的单元中存放着16个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM 1000H开始的单元中。

第9页 共58页

解: ORG 0

MOV R0,#30H MOV DPTR,#1000H

MOV R2,#8 ; 16个ASCII码转换为8个压缩BCD码 LOOP: MOV A,@R0

ANL A,#0FH ; 屏蔽高4位得到BCD码 SWAP A MOV R1,A

INC R0 ; 指向下一个ASCII码 MOV A,@R0

ANL A,#0FH ; 屏蔽高4位得到BCD码 ORL A,R1 ; 合成压缩BCD码 MOVX @DPTR,A ; 存压缩BCD码 INC DPTR INC R0

DJNZ R2,LOOP SJMP $ END

17、设有两个长度为16字节的数组,分别存放在外部RAM 0200H和0300H为首址的存储区域中,试编写程序求其对应项之和(不考虑溢出的情况),结果存放在以0400H为首址的外部RAM中。

解: 参考程序清单如下: ORG 0

MOV R2,#16 ; 数组长度为16个字节 MOV R3,#02H ; 数组1的首地址高8位 MOV R4,#03H ; 数组2的首地址高8位 MOV R5,#04H ; 和数组的首地址高8位 MOV DPL,#0 ; 数据指针低8位清零 LOOP: MOV DPH,R3

MOVX A,@DPTR ; 取被加数 MOV R1,A ; 存被加数 MOV DPH,R4

MOVX A,@DPTR ; 取加数 ADD A,R1 ; 求和 MOV DPH,R5

MOVX @DPTR,A ; 存和

INC DPL ; 指向下一字节 DJNZ R2,LOOP ; 未加完则循环 END

评分办法:程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

18、编程求内部RAM中40H~4FH共16个单元中的内容的和(结果为2字节),并将和放入50H和51H单元中(高8位在50H)。

第10页 共58页


《单片机》编程题题库答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教师招聘面试:数学应届毕业生自我介绍优秀范文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: