《单片机》编程题题库答案Word文件下载.docx
- 文档编号:19142659
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:67
- 大小:31.25KB
《单片机》编程题题库答案Word文件下载.docx
《《单片机》编程题题库答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《《单片机》编程题题库答案Word文件下载.docx(67页珍藏版)》请在冰豆网上搜索。
MOVX@DPTR,A
INCDPTR
MOVA,@R0
INCR0
DJNZR2,LOOP
SJMP$
END
3、内部RAM20H和30H开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM2000H开始的单元中。
ORG0
MOVR0,#20H
MOVR1,#30H
MOVDPTR,#2000H
MOVR2,#08H;
每个单元存放2个16进制数,故16个16进制数占用8个单元
ADDA,@R1
INCR1
4、请编写多字节无符号数减法程序。
被减数存放在内部RAM20H开始的8个单元中,减数存放在内部RAM30H开始的8个单元,请将差存放到外部RAM2000H开始的8个单元中,借位存放到OV标志中。
注意:
所有数据均按照从低字节到高字节的顺序存放。
MOVR2,#08H
CLRC
SUBBA,@R1
MOVOV,C
5、内部RAM40H和41H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2000H单元中。
MOVA,40H
MOVA,41H
ORLA,R0
MOVDPTR,#2000H
6、将存放在内部RAM20H-2FH单元的压缩型BCD码(高位在前)转换成相应的ASCII码,依次存放到外部RAM1000H开始的单元区中。
MOVR2,#10H
MOVDPTR,#1000H
ORLA,#30H(或ADDA,#30H)
7、内部RAM30H和38H开始的单元分别存放着8个压缩BCD码,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM1000H开始的单元中。
MOVR0,#30H
MOVR1,#38H
MOVR2,#08
DAA
8、请编写多字节无符号数加法程序。
被加数存放在内部RAM20H开始的8个单元中,加数存放在内部RAM30H开始的8个单元,请将和存放到外部RAM2000H开始的8个单元中,进位存放到F0标志中。
ADDCA,@R1
MOVF0,C
9、两个8字节压缩BCD码分别存放在内部RAM30H和40H开始的连续单元中(低位字节在前),请将二者求和(不考虑溢出情况),并将和存入外部RAM1000H开始的单元中。
解:
MOVR1,#40H
MOVR2,#8
CLRC
LOOP:
MOVA,@R0
MOVX@DPTR,A
10、将存放在内部RAM20H-2FH单元的十六进制数转换成ASCII码,依次存放到外部RAM2000H开始的单元中。
MOVR2,#16
MOVR3,DPH
MOVR4,DPL
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPH,R3
MOVDPL,R4
MOVR3,DPH
MOVR4,DPL
ANLA,#0FH
INCR0
TAB:
DB‘0123456789ABCDEF’
11、内部RAM30H和外部RAM2200H开始的单元分别存放着两个8字节十六进制数(低位字节存放在前),请将二者相加(不考虑溢出情况),并将和存入内部RAM40H开始的单元中。
MOVDPTR,#2200H
CLRC
MOVXA,@DPTR
ADDCA,@R0
MOV@R1,A
12、请编写多字节无符号数减法程序。
被减数存放在内部RAM30H开始的8个单元中,减数存放在内部RAM38H开始的8个单元,请将差存放到外部RAM1000H开始的8个单元中,借位存放到F0标志中。
START:
LOOP:
MOVC,F0
13、请编写多字节无符号数减法程序。
被减数存放在内部RAM20H开始的16个单元中,减数存放在内部RAM30H开始的16个单元,请将差存放到外部RAM2000H开始的16个单元中,借位存放到OV标志中。
ADDR1EQU20H
ADDR2EQU30H
LENEQU16
ADDR3EQU2000H
START:
MOVR0,#ADDR1
MOVR1,#ADDR2
MOVDPTR,#ADDR3
MOVR2,#LEN
14、将存放在内部RAM20H-3FH单元的压缩BCD码转换成ASCII码,依次存放到外部RAM2300H开始的单元中。
(注:
每个单元均先转换高四位)
LENEQU20H
ADDR2EQU2300H
MOVDPTR,#ADDR2
ANLA,#0F0H
SWAPA
ORLA,#30H(或ADDA,#30H)
INCDPTR
INCR0
DJNZR2,LOOP
SJMP$
不要求使用伪指令。
15、将存放在内部RAM30H-35H单元的十六进制数转换成相应的ASCII码,依次存放到外部RAM1100H开始的单元区中。
每个字节转换时先转换高四位)
MOVDPTR,#1100H
MOVR2,#6
MOVA,@R0;
取需要转换的数
ANLA,#0F0H;
屏蔽低4位
PUSHDPH
PUSHDPL;
保护目的地址
MOVDPTR,#TAB
MOVCA,@A+DPTR;
查表得ASCII码
POPDPL
POPDPH;
恢复目的地址
MOVX@DPTR,A;
存转换后的ASCII码
INCDPTR;
修改目的地址指针
ANLA,#0FH;
屏蔽高4位
INCR0;
修改源地址指针
DJNZR2,LOOP;
未转换完则继续
TAB:
16、内部RAM30H开始的单元中存放着16个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM1000H开始的单元中。
MOVR2,#8;
16个ASCII码转换为8个压缩BCD码
ANLA,#0FH;
屏蔽高4位得到BCD码
MOVR1,A
INCR0;
指向下一个ASCII码
ORLA,R1;
合成压缩BCD码
MOVX@DPTR,A;
存压缩BCD码
17、设有两个长度为16字节的数组,分别存放在外部RAM0200H和0300H为首址的存储区域中,试编写程序求其对应项之和(不考虑溢出的情况),结果存放在以0400H为首址的外部RAM中。
参考程序清单如下:
ORG0
MOVR2,#16;
数组长度为16个字节
MOVR3,#02H;
数组1的首地址高8位
MOVR4,#03H;
数组2的首地址高8位
MOVR5,#04H;
和数组的首地址高8位
MOVDPL,#0;
数据指针低8位清零
MOVDPH,R3
MOVXA,@DPTR;
取被加数
MOVR1,A;
存被加数
MOVDPH,R4
MOVXA,@DPTR;
取加数
ADDA,R1;
求和
MOVDPH,R5
MOVX@DPTR,A;
存和
INCDPL;
指向下一字节
未加完则循环
18、编程求内部RAM中40H~4FH共16个单元中的内容的和(结果为2字节),并将和放入50H和51H单元中(高8位在50H)。
ORG0
MOVR0,#40H;
数据区首地址送R0
单元数送R2
MOVR3,#0;
和的高8位清零
CLRA;
和的低8位清零
ADDA,@R0;
JNCNEXT;
没有进位则转移
INCR3;
和的高8位存储单元内容加1
NEXT:
指向下一个单元
没加完则循环,和在R3和A中
MOV51H,A;
存低8位结果
MOV50H,R3;
存高8位结果
19、有一个长度为16字节的ASCII码字符串存放在外部RAM1000H为首址的存储区域中,字符串中的每一个字符均不相同,试编写程序查找字符串中是否存在ASCII码“9”。
如果在字符串中存在ASCII码“9”,则将其存储单元的地址存放到内部RAM30H和31H单元中(高8位地址在30H单元中),同时将OV标志位清零。
否则,将30H和31H单元的内容清零,并将OV标志位置“1”。
解:
MOVSP,#60H
MOVXA,@DPTR
CJNEA,#39H,EXIT
MOV30H,DPH
MOV31H,DPL
CLROV
EXIT:
MOV30H,#0
MOV31H,#0
SETBOV
END
20、有两个8字节的16进制数a和b,它们分别存放在内部RAM中30H~37H和40H~47H的单元中(高位字节在前)。
请编程求a-b,并将差存入30H开始的内部RAM单元中(高位字节在前)。
若差小于零则将F0标志位置“1”,否则清零。
设计思路:
从16进制数的最低位字节(37H和47H)开始相应字节带借位相减,然后修改地址指针在对次低位字节进行相减,一共循环8次完成两个8字节16进制数的相减。
最后将Cy标志的内容传送给F0标志位即可。
MOVR0,#37H
MOVR1,#47H
MOV@R0,A
DECR0
DECR1
MOVF0,C
21、若外部RAM的(3000H)=X,(3001H)=Y,编程实现Z=X*X+2Y,并将结果存到片内RAM的40H单元(设Z<256)。
XEQU3000H
YEQU3001H
ZEQU40H
MOVDPTR,#X;
变量X的地址送DPTR
MOVXA,@DPTR;
取变量X
MOVB,A;
变量X的值送给B寄存器
MULAB;
求X*X,根据题意知积为1字节(在A中)
MOVR0,A;
X*X的结果存入R0中
指向变量Y
取变量Y
MOVB,#2
求2*Y,根据题意知积为1字节(在A中)
ADDA,R0;
求X*X+2*Y
MOVZ,A;
和存入40H单元
SJMP$;
停机
不要求写出程序的注释和使用伪指令。
22、设外部RAM2000H单元为数据块的起始地址,数据块长度为10,试编程求数据块中的最小值,存入内部RAM30H单元。
将数据块的第1个数据放入结果单元,然后依次与剩余的9个数据进行比较。
如果新的数据比结果单元中的数据还小则将该数据存入结果单元,9次比较完成则结果单元中的数据就是最小值。
取数据块的第一个数
MOV30H,A;
存入结果单元
MOVR2,#9;
共比较9次
指向第2个数
SUBBA,30H
JNCLP;
没有借位则说明结果单元的数小,不用更换最小值
MOVXA,@DPTR
更换最小值
LP:
指向下一个数
没有比较完则继续循环
23、若外部RAM的(1000H)=X,(1001H)=Y,请编程实现Z=2X+Y*Y+5(设Z<
65536),并将结果保存到片内RAM的30H和31H单元(31H单元存放结果的高8位,30H单元存放结果的低8位)。
XEQU1000H
ZHEQU31H
ZLEQU30H
MOVZH,#0;
结果单元清零
MOVZL,#0
取X的值
MOVB,#2
计算2X
ADDA,ZL
MOVZL,A;
存结果低8位
MOVA,B;
取乘积高8位
ADDA,ZH
MOVZH,A;
存结果高8位
指向Y
取Y
MOVB,A
计算Y*Y
ADDA,ZL;
计算结果低8位
MOVZL,A
取乘积的高8位
ADDCA,ZH;
计算结果高8位,注意必须带进位加
MOVZH,A
MOVA,ZL
ADDA,#5;
计算结果加5
ADDCA,#0;
将低8位进位加到结果高8位,注意必
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 编程 题库 答案