《单片机》编程题题库答案.docx

上传人:b****5 文档编号:6141946 上传时间:2023-01-04 格式:DOCX 页数:67 大小:31.25KB
下载 相关 举报
《单片机》编程题题库答案.docx_第1页
第1页 / 共67页
《单片机》编程题题库答案.docx_第2页
第2页 / 共67页
《单片机》编程题题库答案.docx_第3页
第3页 / 共67页
《单片机》编程题题库答案.docx_第4页
第4页 / 共67页
《单片机》编程题题库答案.docx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

《单片机》编程题题库答案.docx

《《单片机》编程题题库答案.docx》由会员分享,可在线阅读,更多相关《《单片机》编程题题库答案.docx(67页珍藏版)》请在冰豆网上搜索。

《单片机》编程题题库答案.docx

《单片机》编程题题库答案

《单片机原理及应用》编程题题库参考答案六

1、内部RAM30H和31H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2300H单元中。

解:

ORG0H

LJMPSTART

ORG30H

START:

MOVA,30H

ANLA,#0FH

SWAPA

MOVR0,A

MOVA,31H

ANLA,#0FH

ORLA,R0

MOVDPTR,#2300H

MOVX@DPTR,A

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

 

2、将存放在内部RAM30H-35H单元的压缩型BCD码转换成相应的ASCII码,依次存放到外部RAM2100H开始的单元区中。

ORG0H

LJMPSTART

ORG30H

START:

MOVR0,#30H

MOVR2,#06H

MOVDPTR,#2100H

LOOP:

MOVA,@R0

SWAPA

ANLA,#0FH

ORLA,#30H

MOVX@DPTR,A

INCDPTR

MOVA,@R0

ANLA,#0FH

ORLA,#30H

MOVX@DPTR,A

INCDPTR

INCR0

DJNZR2,LOOP

SJMP$

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

 

3、内部RAM20H和30H开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM2000H开始的单元中。

解:

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#20H

MOVR1,#30H

MOVDPTR,#2000H

MOVR2,#08H;每个单元存放2个16进制数,故16个16进制数占用8个单元

LOOP:

MOVA,@R0

ADDA,@R1

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

SJMP$

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

4、请编写多字节无符号数减法程序。

被减数存放在内部RAM20H开始的8个单元中,减数存放在内部RAM30H开始的8个单元,请将差存放到外部RAM2000H开始的8个单元中,借位存放到OV标志中。

注意:

所有数据均按照从低字节到高字节的顺序存放。

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#20H

MOVR1,#30H

MOVDPTR,#2000H

MOVR2,#08H

CLRC

LOOP:

MOVA,@R0

SUBBA,@R1

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

MOVOV,C

SJMP$

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

5、内部RAM40H和41H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2000H单元中。

解:

ORG0H

LJMPSTART

ORG30H

START:

MOVA,40H

ANLA,#0FH

SWAPA

MOVR0,A

MOVA,41H

ANLA,#0FH

ORLA,R0

MOVDPTR,#2000H

MOVX@DPTR,A

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

6、将存放在内部RAM20H-2FH单元的压缩型BCD码(高位在前)转换成相应的ASCII码,依次存放到外部RAM1000H开始的单元区中。

ORG0H

LJMPSTART

ORG30H

START:

MOVR0,#20H

MOVR2,#10H

MOVDPTR,#1000H

LOOP:

MOVA,@R0

SWAPA

ANLA,#0FH

ORLA,#30H(或ADDA,#30H)

MOVX@DPTR,A

INCDPTR

MOVA,@R0

ANLA,#0FH

ORLA,#30H(或ADDA,#30H)

MOVX@DPTR,A

INCDPTR

INCR0

DJNZR2,LOOP

SJMP$

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

 

7、内部RAM30H和38H开始的单元分别存放着8个压缩BCD码,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM1000H开始的单元中。

解:

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#30H

MOVR1,#38H

MOVDPTR,#1000H

MOVR2,#08

LOOP:

MOVA,@R0

ADDA,@R1

DAA

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

SJMP$

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

8、请编写多字节无符号数加法程序。

被加数存放在内部RAM20H开始的8个单元中,加数存放在内部RAM30H开始的8个单元,请将和存放到外部RAM2000H开始的8个单元中,进位存放到F0标志中。

注意:

所有数据均按照从低字节到高字节的顺序存放。

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#20H

MOVR1,#30H

MOVDPTR,#2000H

MOVR2,#08H

CLRC

LOOP:

MOVA,@R0

ADDCA,@R1

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

MOVF0,C

SJMP$

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

9、两个8字节压缩BCD码分别存放在内部RAM30H和40H开始的连续单元中(低位字节在前),请将二者求和(不考虑溢出情况),并将和存入外部RAM1000H开始的单元中。

解:

ORG0

MOVR0,#30H

MOVR1,#40H

MOVDPTR,#1000H

MOVR2,#8

CLRC

LOOP:

MOVA,@R0

ADDCA,@R1

DAA

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

SJMP$

END

10、将存放在内部RAM20H-2FH单元的十六进制数转换成ASCII码,依次存放到外部RAM2000H开始的单元中。

解:

MOVR0,#20H

MOVR2,#16

MOVDPTR,#2000H

MOVR3,DPH

MOVR4,DPL

LOOP:

MOVA,@R0

ANLA,#0FH

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPH,R3

MOVDPL,R4

MOVX@DPTR,A

INCDPTR

MOVR3,DPH

MOVR4,DPL

MOVA,@R0

SWAPA

ANLA,#0FH

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPH,R3

MOVDPL,R4

MOVX@DPTR,A

INCDPTR

MOVR3,DPH

MOVR4,DPL

INCR0

DJNZR2,LOOP

SJMP$

TAB:

DB‘0123456789ABCDEF’

END

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

解:

ORG0

MOVR0,#30H

MOVR1,#40H

MOVDPTR,#2200H

MOVR2,#8

CLRC

LOOP:

MOVXA,@DPTR

ADDCA,@R0

MOV@R1,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

SJMP$

END

12、请编写多字节无符号数减法程序。

被减数存放在内部RAM30H开始的8个单元中,减数存放在内部RAM38H开始的8个单元,请将差存放到外部RAM1000H开始的8个单元中,借位存放到F0标志中。

注意:

所有数据均按照从低字节到高字节的顺序存放。

解:

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#30H

MOVR1,#38H

MOVDPTR,#1000H

MOVR2,#8

CLRC

LOOP:

MOVA,@R0

SUBBA,@R1

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

MOVC,F0

SJMP$

END

13、请编写多字节无符号数减法程序。

被减数存放在内部RAM20H开始的16个单元中,减数存放在内部RAM30H开始的16个单元,请将差存放到外部RAM2000H开始的16个单元中,借位存放到OV标志中。

注意:

所有数据均按照从低字节到高字节的顺序存放。

解:

ADDR1EQU20H

ADDR2EQU30H

LENEQU16

ADDR3EQU2000H

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#ADDR1

MOVR1,#ADDR2

MOVDPTR,#ADDR3

MOVR2,#LEN

CLRC

LOOP:

MOVA,@R0

SUBBA,@R1

MOVX@DPTR,A

INCR0

INCR1

INCDPTR

DJNZR2,LOOP

MOVOV,C

SJMP$

END

14、将存放在内部RAM20H-3FH单元的压缩BCD码转换成ASCII码,依次存放到外部RAM2300H开始的单元中。

(注:

每个单元均先转换高四位)

解:

LENEQU20H

ADDR1EQU20H

ADDR2EQU2300H

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#ADDR1

MOVDPTR,#ADDR2

MOVR2,#LEN

LOOP:

MOVA,@R0

ANLA,#0F0H

SWAPA

ORLA,#30H(或ADDA,#30H)

MOVX@DPTR,A

INCDPTR

MOVA,@R0

ANLA,#0FH

ORLA,#30H(或ADDA,#30H)

MOVX@DPTR,A

INCDPTR

INCR0

DJNZR2,LOOP

SJMP$

END

评分办法:

程序设计思路正确可得5分,指令完全写对可得10分。

不要求使用伪指令。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

 

15、将存放在内部RAM30H-35H单元的十六进制数转换成相应的ASCII码,依次存放到外部RAM1100H开始的单元区中。

(注:

每个字节转换时先转换高四位)

解:

ORG0

MOVR0,#30H

MOVDPTR,#1100H

MOVR2,#6

LOOP:

MOVA,@R0;取需要转换的数

ANLA,#0F0H;屏蔽低4位

SWAPA

PUSHDPH

PUSHDPL;保护目的地址

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表得ASCII码

POPDPL

POPDPH;恢复目的地址

MOVX@DPTR,A;存转换后的ASCII码

INCDPTR;修改目的地址指针

MOVA,@R0;取需要转换的数

ANLA,#0FH;屏蔽高4位

PUSHDPH

PUSHDPL;保护目的地址

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表得ASCII码

POPDPL

POPDPH;恢复目的地址

MOVX@DPTR,A

INCDPTR;修改目的地址指针

INCR0;修改源地址指针

DJNZR2,LOOP;未转换完则继续

SJMP$

TAB:

DB‘0123456789ABCDEF’

END

评分办法:

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

 

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

解:

ORG0

MOVR0,#30H

MOVDPTR,#1000H

MOVR2,#8;16个ASCII码转换为8个压缩BCD码

LOOP:

MOVA,@R0

ANLA,#0FH;屏蔽高4位得到BCD码

SWAPA

MOVR1,A

INCR0;指向下一个ASCII码

MOVA,@R0

ANLA,#0FH;屏蔽高4位得到BCD码

ORLA,R1;合成压缩BCD码

MOVX@DPTR,A;存压缩BCD码

INCDPTR

INCR0

DJNZR2,LOOP

SJMP$

END

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

解:

参考程序清单如下:

ORG0

MOVR2,#16;数组长度为16个字节

MOVR3,#02H;数组1的首地址高8位

MOVR4,#03H;数组2的首地址高8位

MOVR5,#04H;和数组的首地址高8位

MOVDPL,#0;数据指针低8位清零

LOOP:

MOVDPH,R3

MOVXA,@DPTR;取被加数

MOVR1,A;存被加数

MOVDPH,R4

MOVXA,@DPTR;取加数

ADDA,R1;求和

MOVDPH,R5

MOVX@DPTR,A;存和

INCDPL;指向下一字节

DJNZR2,LOOP;未加完则循环

END

评分办法:

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

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

解:

参考程序清单如下:

ORG0

LJMPSTART

ORG30H

START:

MOVR0,#40H;数据区首地址送R0

MOVR2,#16;单元数送R2

MOVR3,#0;和的高8位清零

CLRA;和的低8位清零

LOOP:

CLRC

ADDA,@R0;求和

JNCNEXT;没有进位则转移

INCR3;和的高8位存储单元内容加1

NEXT:

INCR0;指向下一个单元

DJNZR2,LOOP;没加完则循环,和在R3和A中

MOV51H,A;存低8位结果

MOV50H,R3;存高8位结果

SJMP$

END

19、有一个长度为16字节的ASCII码字符串存放在外部RAM1000H为首址的存储区域中,字符串中的每一个字符均不相同,试编写程序查找字符串中是否存在ASCII码“9”。

如果在字符串中存在ASCII码“9”,则将其存储单元的地址存放到内部RAM30H和31H单元中(高8位地址在30H单元中),同时将OV标志位清零。

否则,将30H和31H单元的内容清零,并将OV标志位置“1”。

解:

ORG0

MOVSP,#60H

MOVDPTR,#1000H

MOVR2,#16

LOOP:

MOVXA,@DPTR

CJNEA,#39H,EXIT

MOV30H,DPH

MOV31H,DPL

CLROV

SJMP$

EXIT:

INCDPTR

DJNZR2,LOOP

MOV30H,#0

MOV31H,#0

SETBOV

SJMP$

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标志位即可。

ORG0

MOVR0,#37H

MOVR1,#47H

MOVR2,#8

CLRC

LOOP:

MOVA,@R0

SUBBA,@R1

MOV@R0,A

DECR0

DECR1

DJNZR2,LOOP

MOVF0,C

SJMP$

END

21、若外部RAM的(3000H)=X,(3001H)=Y,编程实现Z=X*X+2Y,并将结果存到片内RAM的40H单元(设Z<256)。

解:

XEQU3000H

YEQU3001H

ZEQU40H

ORG0

MOVDPTR,#X;变量X的地址送DPTR

MOVXA,@DPTR;取变量X

MOVB,A;变量X的值送给B寄存器

MULAB;求X*X,根据题意知积为1字节(在A中)

MOVR0,A;X*X的结果存入R0中

INCDPTR;指向变量Y

MOVXA,@DPTR;取变量Y

MOVB,#2

MULAB;求2*Y,根据题意知积为1字节(在A中)

ADDA,R0;求X*X+2*Y

MOVZ,A;和存入40H单元

SJMP$;停机

END

评分办法:

不要求写出程序的注释和使用伪指令。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

22、设外部RAM2000H单元为数据块的起始地址,数据块长度为10,试编程求数据块中的最小值,存入内部RAM30H单元。

解:

设计思路:

将数据块的第1个数据放入结果单元,然后依次与剩余的9个数据进行比较。

如果新的数据比结果单元中的数据还小则将该数据存入结果单元,9次比较完成则结果单元中的数据就是最小值。

ORG0

MOVDPTR,#2000H

MOVXA,@DPTR;取数据块的第一个数

MOV30H,A;存入结果单元

MOVR2,#9;共比较9次

INCDPTR;指向第2个数

LOOP:

CLRC

MOVXA,@DPTR

SUBBA,30H

JNCLP;没有借位则说明结果单元的数小,不用更换最小值

MOVXA,@DPTR

MOV30H,A;更换最小值

LP:

INCDPTR;指向下一个数

DJNZR2,LOOP;没有比较完则继续循环

SJMP$;停机

END

评分办法:

不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

23、若外部RAM的(1000H)=X,(1001H)=Y,请编程实现Z=2X+Y*Y+5(设Z<65536),并将结果保存到片内RAM的30H和31H单元(31H单元存放结果的高8位,30H单元存放结果的低8位)。

解:

XEQU1000H

ZHEQU31H

ZLEQU30H

ORG0

MOVZH,#0;结果单元清零

MOVZL,#0

MOVDPTR,#1000H

MOVXA,@DPTR;取X的值

MOVB,#2

MULAB;计算2X

ADDA,ZL

MOVZL,A;存结果低8位

MOVA,B;取乘积高8位

ADDA,ZH

MOVZH,A;存结果高8位

INCDPTR;指向Y

MOVXA,@DPTR;取Y

MOVB,A

MULAB;计算Y*Y

ADDA,ZL;计算结果低8位

MOVZL,A

MOVA,B;取乘积的高8位

ADDCA,ZH;计算结果高8位,注意必须带进位加

MOVZH,A

MOVA,ZL

ADDA,#5;计算结果加5

MOVZL,A

MOVZH,A;存结果低8位

ADDCA,#0;将低8位进位加到结果高8位,注意必

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1