2023年单片机编程题题库答案_第1页
2023年单片机编程题题库答案_第2页
2023年单片机编程题题库答案_第3页
2023年单片机编程题题库答案_第4页
2023年单片机编程题题库答案_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《单片机原理及应用》编程题题库参考答案六、编程(每题10分)内部RAM30H和31H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2300H单元中。解:ORG0HLJMPSTARTORG30HSTART:MOVA,30HANLA,#0FHSWAPAMOVR0,AMOVA,31HANLA,#0FHORLA,R0MOVDPTR,#2300HMOVX@DPTR,AEND评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。2、将存放在内部RAM30H-35H单元的压缩型BCD码转换成相应的ASCII码,依次存放到外部RAM2100H开始的单元区中。ORG0HLJMPSTARTORG30HSTART:MOVR0,#30HMOVR2,#06HMOVDPTR,#2100HLOOP:MOVA,@R0SWAPAANLA,#0FHORLA,#30HMOVX@DPTR,AINCDPTRMOVA,@R0ANLA,#0FHORLA,#30HMOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。3、内部RAM20H和30H开始的单元分别存放着16个16进制数,请将相应单元的内容相加(不考虑溢出),并将和存入外部RAM2023H开始的单元中。解:ORG0LJMPSTARTORG30HSTART:MOVR0,#20HMOVR1,#30HMOVDPTR,#2023HMOVR2,#08H;每个单元存放2个16进制数,故16个16进制数占用8个单元LOOP:MOVA,@R0ADDA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。4、请编写多字节无符号数减法程序。被减数存放在内部RAM20H开始的8个单元中,减数存放在内部RAM30H开始的8个单元,请将差存放到外部RAM2023H开始的8个单元中,借位存放到OV标志中。注意:所有数据均按照从低字节到高字节的顺序存放。ORG0LJMPSTARTORG30HSTART:MOVR0,#20HMOVR1,#30HMOVDPTR,#2023HMOVR2,#08HCLRCLOOP:MOVA,@R0SUBBA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPMOVOV,CSJMP$END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。5、内部RAM40H和41H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2023H单元中。解:ORG0HLJMPSTARTORG30HSTART:MOVA,40HANLA,#0FHSWAPAMOVR0,AMOVA,41HANLA,#0FHORLA,R0MOVDPTR,#2023HMOVX@DPTR,AEND评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。6、将存放在内部RAM20H-2FH单元的压缩型BCD码(高位在前)转换成相应的ASCII码,依次存放到外部RAM1000H开始的单元区中。ORG0HLJMPSTARTORG30HSTART:MOVR0,#20HMOVR2,#10HMOVDPTR,#1000HLOOP:MOVA,@R0SWAPAANLA,#0FHORLA,#30H(或ADDA,#30H)MOVX@DPTR,AINCDPTRMOVA,@R0ANLA,#0FHORLA,#30H(或ADDA,#30H)MOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。7、内部RAM30H和38H开始的单元分别存放着8个压缩BCD码,请将相应单元的内容相加(不考虑溢出),并将和存入外部RAM1000H开始的单元中。解:ORG0LJMPSTARTORG30HSTART:MOVR0,#30HMOVR1,#38HMOVDPTR,#1000HMOVR2,#08LOOP:MOVA,@R0ADDA,@R1DAAMOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。8、请编写多字节无符号数加法程序。被加数存放在内部RAM20H开始的8个单元中,加数存放在内部RAM30H开始的8个单元,请将和存放到外部RAM2023H开始的8个单元中,进位存放到F0标志中。注意:所有数据均按照从低字节到高字节的顺序存放。ORG0LJMPSTARTORG30HSTART:MOVR0,#20HMOVR1,#30HMOVDPTR,#2023HMOVR2,#08HCLRCLOOP:MOVA,@R0ADDCA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPMOVF0,CSJMP$END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。9、两个8字节压缩BCD码分别存放在内部RAM30H和40H开始的连续单元中(低位字节在前),请将两者求和(不考虑溢出情况),并将和存入外部RAM1000H开始的单元中。解:ORG0MOVR0,#30HMOVR1,#40HMOVDPTR,#1000HMOVR2,#8CLRCLOOP:MOVA,@R0ADDCA,@R1DAAMOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$END评分办法:程序设计思绪对的可得5分;对于仅写出部分指令的学生可酌情给1-4分;程序编制对的可得满分,若存在少量错误,可酌情扣1-3分。10、将存放在内部RAM20H-2FH单元的十六进制数转换成ASCII码,依次存放到外部RAM2023H开始的单元中。解:MOVR0,#20HMOVR2,#16MOVDPTR,#2023HMOVR3,DPHMOVR4,DPLLOOP:MOVA,@R0ANLA,#0FHMOVDPTR,#TABMOVCA,@A+DPTRMOVDPH,R3MOVDPL,R4MOVX@DPTR,AINCDPTRMOVR3,DPHMOVR4,DPLMOVA,@R0SWAPAANLA,#0FHMOVDPTR,#TABMOVCA,@A+DPTRMOVDPH,R3MOVDPL,R4MOVX@DPTR,AINCDPTRMOVR3,DPHMOVR4,DPLINCR0 DJNZR2,LOOPSJMP$TAB:DB‘ABCDEF’END评分办法:程序设计思绪对的可得5分;对于仅写出部分指令的学生可酌情给1-4分;程序编制对的可得满分,若存在少量错误,可酌情扣1-3分。11、内部RAM30H和外部RAM2200H开始的单元分别存放着两个8字节十六进制数(低位字节存放在前),请将两者相加(不考虑溢出情况),并将和存入内部RAM40H开始的单元中。解:ORG0MOVR0,#30HMOVR1,#40HMOVDPTR,#2200HMOVR2,#8CLRCLOOP:MOVXA,@DPTRADDCA,@R0MOV@R1,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$评分办法:程序设计思绪对的可得5分;对于仅写出部分指令的学生可酌情给1-4分;程序编制对的可得满分,若存在少量错误,可酌情扣1-3分。12、请编写多字节无符号数减法程序。被减数存放在内部RAM30H开始的8个单元中,减数存放在内部RAM38H开始的8个单元,请将差存放到外部RAM1000H开始的8个单元中,借位存放到F0标志中。注意:所有数据均按照从低字节到高字节的顺序存放。解:ORG0LJMPSTARTORG30HSTART:MOVR0,#30HMOVR1,#38HMOVDPTR,#1000HMOVR2,#8CLRCLOOP:MOVA,@R0SUBBA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPMOVC,F0SJMP$评分办法:程序设计思绪对的可得5分;对于仅写出部分指令的学生可酌情给1-4分;程序编制对的可得满分,若存在少量错误,可酌情扣1-3分。13、请编写多字节无符号数减法程序。被减数存放在内部RAM20H开始的16个单元中,减数存放在内部RAM30H开始的16个单元,请将差存放到外部RAM2023H开始的16个单元中,借位存放到OV标志中。注意:所有数据均按照从低字节到高字节的顺序存放。解:ADDR1EQU20HADDR2EQU30HLENEQU16ADDR3EQU2023HORG0LJMPSTARTORG30HSTART:MOVR0,#ADDR1MOVR1,#ADDR2MOVDPTR,#ADDR3MOVR2,#LENCLRCLOOP:MOVA,@R0SUBBA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPMOVOV,CSJMP$END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。不规定使用伪指令。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。14、将存放在内部RAM20H-3FH单元的压缩BCD码转换成ASCII码,依次存放到外部RAM2300H开始的单元中。(注:每个单元均先转换高四位)解:LENEQU20HADDR1EQU20HADDR2EQU2300HORG0LJMPSTARTORG30HSTART:MOVR0,#ADDR1MOVDPTR,#ADDR2MOVR2,#LENLOOP:MOVA,@R0ANLA,#0F0HSWAPAORLA,#30H(或ADDA,#30H)MOVX@DPTR,AINCDPTRMOVA,@R0ANLA,#0FHORLA,#30H(或ADDA,#30H)MOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。不规定使用伪指令。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。15、将存放在内部RAM30H-35H单元的十六进制数转换成相应的ASCII码,依次存放到外部RAM1100H开始的单元区中。(注:每个字节转换时先转换高四位)解:ORG0MOVR0,#30HMOVDPTR,#1100HMOVR2,#6LOOP:MOVA,@R0;取需要转换的数ANLA,#0F0H;屏蔽低4位SWAPAPUSHDPHPUSHDPL;保护目的地址MOVDPTR,#TABMOVCA,@A+DPTR;查表得ASCII码POPDPLPOPDPH;恢复目的地址MOVX@DPTR,A;存转换后的ASCII码INCDPTR;修改目的地址指针MOVA,@R0;取需要转换的数ANLA,#0FH;屏蔽高4位PUSHDPHPUSHDPL;保护目的地址MOVDPTR,#TABMOVCA,@A+DPTR;查表得ASCII码POPDPLPOPDPH;恢复目的地址MOVX@DPTR,AINCDPTR;修改目的地址指针INCR0;修改源地址指针DJNZR2,LOOP;未转换完则继续SJMP$TAB :DB‘ABCDEF’END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。16、内部RAM30H开始的单元中存放着16个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM1000H开始的单元中。解:ORG0MOVR0,#30HMOVDPTR,#1000HMOVR2,#8;16个ASCII码转换为8个压缩BCD码LOOP:MOVA,@R0ANLA,#0FH;屏蔽高4位得到BCD码SWAPAMOVR1,AINCR0;指向下一个ASCII码MOVA,@R0ANLA,#0FH;屏蔽高4位得到BCD码ORLA,R1;合成压缩BCD码MOVX@DPTR,A;存压缩BCD码INCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。17、设有两个长度为16字节的数组,分别存放在外部RAM0200H和0300H为首址的存储区域中,试编写程序求其相应项之和(不考虑溢出的情况),结果存放在以0400H为首址的外部RAM中。解:参考程序清单如下:ORG0MOVR2,#16;数组长度为16个字节MOVR3,#02H;数组1的首地址高8位MOVR4,#03H;数组2的首地址高8位MOVR5,#04H;和数组的首地址高8位MOVDPL,#0;数据指针低8位清零LOOP:MOVDPH,R3MOVXA,@DPTR;取被加数MOVR1,A;存被加数MOVDPH,R4MOVXA,@DPTR;取加数ADDA,R1;求和MOVDPH,R5MOVX@DPTR,A;存和INCDPL;指向下一字节DJNZR2,LOOP;未加完则循环END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。18、编程求内部RAM中40H~4FH共16个单元中的内容的和(结果为2字节),并将和放入50H和51H单元中(高8位在50H)。解:参考程序清单如下:ORG0LJMPSTARTORG30HSTART:MOVR0,#40H;数据区首地址送R0MOVR2,#16;单元数送R2MOVR3,#0;和的高8位清零CLRA;和的低8位清零LOOP:CLRCADDA,@R0;求和JNCNEXT;没有进位则转移INCR3;和的高8位存储单元内容加1NEXT:INCR0;指向下一个单元DJNZR2,LOOP;没加完则循环,和在R3和A中MOV51H,A;存低8位结果MOV50H,R3;存高8位结果SJMP$END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。19、有一个长度为16字节的ASCII码字符串存放在外部RAM1000H为首址的存储区域中,字符串中的每一个字符均不相同,试编写程序查找字符串中是否存在ASCII码“9”。假如在字符串中存在ASCII码“9”,则将其存储单元的地址存放到内部RAM30H和31H单元中(高8位地址在30H单元中),同时将OV标志位清零。否则,将30H和31H单元的内容清零,并将OV标志位置“ 解:ORG0MOVSP,#60HMOVDPTR,#1000HMOVR2,#16LOOP:MOVXA,@DPTRCJNEA,#39H,EXITMOV30H,DPHMOV31H,DPLCLROVSJMP$EXIT:INCDPTRDJNZR2,LOOPMOV30H,#0MOV31H,#0SETBOVSJMP$END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。20、有两个8字节的16进制数a和b,它们分别存放在内部RAM中30H~37H和40H~47H的单元中(高位字节在前)。请编程求a-b,并将差存入30H开始的内部RAM单元中(高位字节在前)。若差小于零则将F0标志位置“1”解:设计思绪:从16进制数的最低位字节(37H和47H)开始相应字节带借位相减,然后修改地址指针在对次低位字节进行相减,一共循环8次完毕两个8字节16进制数的相减。最后将Cy标志的内容传送给F0标志位即可。ORG0MOVR0,#37HMOVR1,#47HMOVR2,#8CLRCLOOP:MOVA,@R0SUBBA,@R1MOV@R0,ADECR0DECR1DJNZR2,LOOPMOVF0,CSJMP$END评分办法:程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。21、若外部RAM的(3000H)=X,(3001H)=Y,编程实现Z=X*X+2Y,并将结果存到片内RAM的40H单元(设Z<256)。解:XEQU3000HYEQU3001HZEQU40HORG0MOVDPTR,#X;变量X的地址送DPTRMOVXA,@DPTR;取变量XMOVB,A;变量X的值送给B寄存器MULAB;求X*X,根据题意知积为1字节(在A中)MOVR0,A;X*X的结果存入R0中INCDPTR;指向变量YMOVXA,@DPTR;取变量YMOVB,#2MULAB;求2*Y,根据题意知积为1字节(在A中)ADDA,R0;求X*X+2*YMOVZ,A;和存入40H单元SJMP$;停机END评分办法:不规定写出程序的注释和使用伪指令。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。22、设外部RAM2023H单元为数据块的起始地址,数据块长度为10,试编程求数据块中的最小值,存入内部RAM30H单元。解:设计思绪:将数据块的第1个数据放入结果单元,然后依次与剩余的9个数据进行比较。假如新的数据比结果单元中的数据还小则将该数据存入结果单元,9次比较完毕则结果单元中的数据就是最小值。ORG0MOVDPTR,#2023HMOVXA,@DPTR;取数据块的第一个数MOV30H,A;存入结果单元MOVR2,#9;共比较9次INCDPTR;指向第2个数LOOP:CLRCMOVXA,@DPTRSUBBA,30HJNCLP;没有借位则说明结果单元的数小,不用更换最小值MOVXA,@DPTRMOV30H,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位)。解:XEQU1000HZH EQU31HZLEQU30HORG0MOVZH,#0;结果单元清零MOVZL,#0MOVDPTR,#1000HMOVXA,@DPTR;取X的值MOVB,#2MULAB;计算2XADDA,ZLMOVZL,A;存结果低8位MOVA,B;取乘积高8位ADDA,ZHMOVZH,A;存结果高8位INCDPTR;指向YMOVXA,@DPTR;取YMOVB,AMULAB;计算Y*YADDA,ZL;计算结果低8位MOVZL,AMOVA,B;取乘积的高8位ADDCA,ZH;计算结果高8位,注意必须带进位加MOVZH,AMOVA,ZLADDA,#5;计算结果加5MOVZL,AMOVZH,A;存结果低8位ADDCA,#0;将低8位进位加到结果高8位,注意必须带进位加MOVZH,A;存结果高8位END评分办法:不规定写出程序的注释和使用伪指令。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。24、设外部RAM1000H单元为数据块的起始地址,数据块长度为60字节,试编程求数据块中所有数据的和,并将其存入内部RAM30H和31H单元(30H单元存放和的低8位,31H单元存放和的高8位)。解:ADDREQU100HH;数据块首地址LENEQU60;数据块长度ZHEQU31H;和的高8位地址ZLEQU30H;和的低8位地址ORG0MOVDPTR,#ADDR;数据块首地址送DPTRMOVR7,#LEN;数据块长度送R7MOVZH,#0;结果单元清零MOVZL,#0LOOP:MOVXA,@DPTR;取数据ADDA,ZL;将数据加到结果单元的低8位MOVZL,A;存结果低8位MOVA,ZH;取结果高8位ADDCA,#0;将低8位计算的进位加到高8位中MOVZH,A;存高8位INCDPTR;修改地址指针,指向下一个数据DJNZR7,LOOP;没有计算完则继续SJMP$END评分办法:不规定写出程序的注释和使用伪指令。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。25、若外部RAM的(1000H)=X,内部RAM(30H)=Y,请编程实现Z=X*X+3Y+18(设Z<65536),并将结果保存到片内RAM的40H和41H单元(41H单元存放结果的高8位,40H单元存放结果的低8位)。解:XEQU1000HYEQU30HZH EQU41HZLEQU40HORG0MOVZH,#0;结果单元清零MOVZL,#0MOVDPTR,#1000HMOVXA,@DPTR;取X的值MOVB,AMULAB;计算X*XADDA,ZLMOVZL,A;存结果低8位MOVA,B;取乘积高8位ADDA,ZHMOVZH,A;存结果高8位MOVXA,Y;取YMOVB,#3MULAB;计算3*YADDA,ZL;计算结果低8位MOVZL,AMOVA,B;取乘积的高8位ADDCA,ZH;计算结果高8位,注意必须带进位加MOVZH,AMOVA,ZLADDA,#18;计算结果加18MOVZL,A;存结果低8位MOVA,ZH;取结果高8位ADDCA,#0;将低8位进位加到结果高8位,注意必须带进位加MOVZH,A;存结果高8位END评分办法:不规定写出程序的注释和使用伪指令。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。26、若外部RAM的(1000H)=X,请编程实现Y=X2+2X+1(设Y<65536),并将结果保存到片内RAM的30H和31H单元(31H单元存放结果的高8位,30H单元存放结果的低8位)。解:ORG0MOV30H,#0;结果单元清零MOV31H,#0MOVDPTR,#1000HMOVA,@DPTR;取X的值MOVB,AMULAB;求X的平方MOV30H,A;存低8位MOVA,BMOV31H,A;存高8位MOVXA,@DPTR;取X的值MOVB,#2MOVAB;求2XADDA,30H; 求低8位和MOV30H,A;存和的低8位MOVA,B;取积的高8位ADDCA,31H;求高8位和MOV31H,A;存和的高8位MOVA,30HADDA,#1;加1MOV30H,A;存和的低8位MOVA,31HADDCA,#0;和的高8位加上低8位运算的进位MOV31H,A;存和的高8位SJMP$;停机END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。27、设外部RAM2023H单元为数据块的起始地址,数据块长度为100字节。假设在数据块中存在唯一的一个ASCII字符“A”,试编程找到它,并将其在外部RAM的存放地址存入内部RAM30H和31H单元中(30H单元存放地址的高8位,31H单元存放地址的低8位)。解:ORG0MOVDPTR,#2023H;数据块首地址送DPTRMOVR2,#100;数据块长度送R2LOOP:MOVXA,@DPTR;取数据CJNEA,#41H,NEXT;数据不是“A”则转移MOVA,DPHMOV30H,A;存高8位地址MOVA,DPLMOV31H,A;存低8位地址SJMP$;停机NEXT:INCDPTR;修改地址指针DJNZR2,LOOP;没有找到则继续SJMP$;停机评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。28、若内部RAM的(20H)=a,外部RAM(1300H)=b,请编程实现y=a2+b2+5(设y<65536),并将结果保存到片内RAM的30H和31H单元(31H单元存放结果的高8位,30H单元存放结果的低8位)。解:ORG0MOVA,20H;取aMOVB,AMULAB;求a2MOV30H,A;存和的低8位MOVA,BMOV31H,A;存和的高8位MOVDPTR,#1300HMOVXA,@DPTR;取bMOVB,AMULAB;求b2ADDA,30H;求a2+b2MOV30H,AMOVA,BADDCA,31HMOV31H,AMOVA,30HADDA,#5;加5MOV30H,AMOVA,31HADDCA,#0;加上低8位的进位MOV31H,ASJMP$;停机END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。29、若内部RAM的(30H)=X,(31H)=Y,请编程实现Z=X2+5Y(设Z<65536),并将结果保存到片外RAM的1000H和1001H单元(1001H单元存放结果的高8位,1000H单元存放结果的低8位)。解:ORG0MOVDPTR,#1000H;结果地址指针赋值MOVA,30H;取XMOVB,AMULAB;求X2MOVX@DPTR,A;存X2低8位INCDPTR;指向结果单元高8位MOVA,BMOVX@DPTR,A;存X2高8位DECDPL;指向结果单元低8位MOVA,31H;取YMOVB,#5MULAB;求5YMOVR0,AMOVXA,@DPTRADDA,R0;求X2+5Y的低8位和MOVX@DPTR,A;存X2+5Y的低8位和INCDPTR;指向结果单元高8位MOVXA,@DPTR;取结果单元高8位ADDCA,B;求X2+5Y的高8位和(注意加上低8位的进位)MOVX@DPTR,A;存X2+5Y的高8位和SJMP$;停机END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。30、设内部RAM20H单元为数据块的起始地址,数据块长度为32字节。请将整个数据块求和(共32字节的数据求和,设和小于65536),并把和存入外部RAM1000H和1001H的单元中(和的高8位存入1001H单元)。解:ORG0MOVR0,#20H;数据块首地址送R0MOVR2,#32;数据块长度送R2CLRA;累加器清零MOVDPTR,#1000H;指向和的低8位MOVX@DPTR,A;和的低8位清零INCDPTR;指向和的高8位MOVX@DPTR,A;和的高8位清零DECDPL;指向和的低8位LOOP:MOVA,@R0;取数据MOVR1,A;暂存在R1MOVXA,@DPTR;取和的低8位ADDA,R1;求和MOVX@DPTR,A;存和的低8位INCDPTR;指向和的高8位MOVXA,@DPTR;取和的高8位ADDCA,#0;将和的低8位的进位加到高8位中MOVX@DPTR,A;存和的高8位DECDPL;指向和的低8位INCR0;数据块指针加1DJNZR2,LOOP;没有加完则循环SJMP$;停机END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。31、若内部RAM的(20H)=a,(21H)=b,请编程实现y=a2+b2(设y<65536),并将结果保存到片外RAM的2023H和2023H单元(2023H单元存放结果的高8位,2023H单元存放结果的低8位)。解:ORG0MOVDPTR,#2023H;结果单元低8位地址送DPTRMOVA,20H;取a的值MOVB,AMULAB;求a2MOVX@DPTR,A;存a2低8位MOVA,BINCDPTR;指向结果单元高8位MOVX@DPTR,A;存结果高8位DECDPL;指向结果单元低8位MOVA,21H;取b的值MOVB,AMULAB;求b2MOVR0,A;暂存b2的低8位MOVXA,@DPTR;取结果低8位ADDA,R0;求低8位的和MOVX@DPTR,A;存结果低8位INCDPTR;指向结果单元高8位MOVXA,@DPTR;取结果高8位ADDCA,B;加上b2的高8位和低8位求和的进位MOVX@DPTR,A;存结果高8位SJMP$;停机END评分办法:不规定写出程序的注释,也不规定使用子程序。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。32、将内部RAM40H为起始地址的32个连续单元中的十六进制数转换成ASCⅡ码存入外部RAM3000H开始的存储单元中。解:ORG0MOVR0,#40H;源数据块首地址送R0MOVR2,#32;数据块长度送R2MOVDPTR,#3000H;目的数据块首地址送DPTRLOOP:MOVA,@R0;取待转换数据ANLA,#0F0H;取高四位数据SWAPA;高低四位数据互换PUSHDPH;保护目的地址指针PUSHDPLMOVDPTR,#TAB;数据指针指向表格首地址MOVCA,@A+DPTR;查表得到ASCII码POPDPL;恢复目的地址指针POPDPHMOVX@DPTR,A;存转换结果INCDPTR;指向下一个存储单元MOVA,@R0;取待转换数据ANLA,#0FH;取低四位数据PUSHDPH;保护目的地址指针PUSHDPLMOVDPTR,#TAB;数据指针指向表格首地址MOVCA,@A+DPTR;查表得到ASCII码POPDPL;恢复目的地址指针POPDPHMOVX@DPTR,A;存转换结果INCDPTR;指向下一个存储单元INCR0;指向下一个待转换数据DJNZR2,LOOP;没有转换完则继续SJMP$;停机TAB:DB‘ABCDEF’END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。33、设内部RAM20H单元为数据块的起始地址,数据块长度为10H,数据为8位无符号数,试编程找出数据块中的最小值,并将其存入40H单元。解:ORG0MOVR0,#20H;数据区首地址送R0MOVR2,#10H;数据块长度送R2MOV40H,#0FFH;结果单元送入最大值LOOP:MOVA,@R0;取数据CLRC;清进位SUBBA,40H;运用减法判断该数据是否比最小值单元的数小?JNCNEXT;假如没有借位说明待比较数据比最小值单元的值大则转移MOVA,@R0;取最小值MOV40H,A;存最小值NEXT:INCR0;修改地址指针DJNZR2,LOOP;没有比较完则继续比较。SJMP$;停机END评分办法:不规定写出程序的注释。程序设计思绪对的可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论