单片机基础第3版课后习题答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章:一、填空题1.11100EH10011100011001002.43.255-514.输入设备5.846.630*8*10247.位字节字bitbtypeword8.1111111100100100110110119.11089-115-50二、单选:DBCABBBCB第二章:一、填空1.PCPC2.反向器晶振两只电容短3.加电手动0000H07H第000H07H4.621125.DPTRDPHDPL6.64KB单选题DCCACAD第三章:一、填空题:1.10312.34H1113.略4.1100H5.26.30H71H0A5H0A5H75H0A7H0AAH01IFH110AAH0120H100D5H1149H00二、单选题CCBDCA三、其它类型题错错对错错错对错错错错对对对对错对对错对错错对(三)其它类型题3.编写程序将RAM20H-23H单元的高4位写1,低4位写0。分析:就是把这四个单元写入F0H。用一个DJNZ的循环。ORG0000HMOVR0,#1FH;R0指向20H单元MOVR5,#04H;四个数LOOP:INCR0MOV@R0,#0F0H;写入DJNZR5,LOOP;循环4次END4.把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。(设m=30H,高位在30H,低数在31H)ORG0000HMOVA,30HANLA,#0FH;把它的高四位清零SWAPAMOV30H,A;高低四位调一下,放回原处MOVA,31HANLA,#0FHORLA,30H;合并起来MOV30H,AEND5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。编写程序完成。(设data=30H,sun=50H)ORG0000HMOVR0,#2FH;指向前一个单元MOVR5,#0AH;循环10次CLRA;先加到A中LOOP:INCR0ADDA,@R0DJNZR5,LOOPMOV50H,AEND6.假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。ORG0000HMOVA,R0CPLA;按位取反ADDA,#01H;+1MOVR1,AEND第四章:一、填空题1.25H40H03H2.2.914ms3.略4.(A)=((30H)(A)(30H)(A)(30H)5.32.87ms编程题1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。试编程实现。ORG0030HMOVR0,#inbufMOVR1,#outbufMOVR4,#10HLOOP:MOVA,@R0;从内部RAM取数CJNEA,#0DH,LL;是否为回车符CRSJMPSTOP;是转停止传送LL:MOVX@R1,A;不是则传送到外部RAMINCR0INCR1DJNZR4,LL;沒传送完则循环STOP:SJMP$2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。编程实现在表中找出最小数。(3AH存放在运行程序时的最小的数)ORG0030HMOVR0,#listMOVA,@R0;取第一个正数LOOP:INCR0;指向下一个正数MOV3AH,@R0CJNEA,3AH,CHK;前一个数与后一个数比较CHK:JCLOOP1;前一个数小,则转MOVA,@R0;前一个数大,取后一个数LOOP1:XCHA,3AHCJNEA,#0FFH,LOOPXCHA,3AH;取最小数MOV3BH,ASJMP$3.内部RAM的X,Y单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。若X为正奇数,Z=X+Y;若X为正偶数,Z=X∨Y;若X为负奇数,Z=X∧Y;若X为负偶数,Z=X⊕Y。分析:负数:第7位为1,正数:第7位为0奇数:第0位为1,偶数:第0位为0ORG0000HMOVA,20HCLRCRLAJCFS;移到负数处处理RRARRA;第0位移到C再判定一下是不是1JCZJS;到正奇数处MOVA,20HORLA,21HMOV22H,ASJMPOKZJS:MOVA,20HADDA,21HMOV22H,ASJMPOKFS:MOVA,20HCLRCRRAJCFJS;第0位是1,移到正奇数处理MOVA,20HXRLA,21HMOV22H,ASJMPOKFJS:MOVA,20HANLA,21HMOV22H,AOK:END4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte单元中。变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。ORG0030HMOVR0,#byteMOVDPTR,#bufMOVR5,#08HMOVA,@R0LOOP:RLCAMOVR7,AJCLOOP1MOVA,#30HSJMPLOOP2LOOP1:MOVA,#31HLOOP2:MOVX@DPTR,AMOVA,R7INCDPTRDJNZR5,LOOP5.编程实现运算式c=a2+b2假定a、b、c3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。(内部RAM的DA、DB、DC单元设为20H21H22H)ORG0000HMOVA,20HPUSHACCAJMPSQRPOPACCMOV22H,AMOVA,21HPUSHACCAJMPSQRPOPACCADDA,22HMOV22H,AEND6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FF。ORG0030HMOVR0,#42HMOVR1,#52HMOVR7,41H;字符串长度LOOP:MOVA,@R0MOV30H,@R1CJNEA,30H,LKINCR0INCR1DJNZR7,LOOPMOV40H,#00HSJMPDDLK:MOV40H,#0FFHDD:SJMPDD7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。ORG0030HMOVDPTR,#tableMOVR6,#10LOOP:MOVXA,@DPTRSETBE7H;E7H就是累加器A的最高位(ACC.7),也可:SETBACC.7MOVX@DPTR,AINCDPTRDJNZR6,LOOP3.编写程序将RAM20H-23H单元的高4位写1,低4位写0。分析:就是把这四个单元写入F0H。用一个DJNZ的循环。ORG0000HMOVR0,#1FH;R0指向20H单元MOVR5,#04H;四个数LOOP:INCR0MOV@R0,#0F0H;写入DJNZR5,LOOP;循环4次END4.把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。(设m=30H,高位在30H,低数在31H)ORG0000HMOVA,30HANLA,#0FH;把它的高四位清零SWAPAMOV30H,A;高低四位调一下,放回原处MOVA,31HANLA,#0FHORLA,30H;合并起来MOV30H,AEND5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。编写程序完成。(设data=30H,sun=50H)ORG0000HMOVR0,#2FH;指向前一个单元MOVR5,#0AH;循环10次CLRA;先加到A中LOOP:INCR0ADDA,@R0DJNZR5,LOOPMOV50H,AEND6.假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。ORG0000HMOVA,R0CPLA;按位取反ADDA,#01H;+1MOVR1,AEND第四章:一、填空题1.25H40H03H2.2.914ms3.略4.(A)=((30H)(A)(30H)(A)(30H)5.32.87ms编程题1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。试编程实现。ORG0030HMOVR0,#inbufMOVR1,#outbufMOVR4,#10HLOOP:MOVA,@R0;从内部RAM取数CJNEA,#0DH,LL;是否为回车符CRSJMPSTOP;是转停止传送LL:MOVX@R1,A;不是则传送到外部RAMINCR0INCR1DJNZR4,LL;沒传送完则循环STOP:SJMP$2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。编程实现在表中找出最小数。(3AH存放在运行程序时的最小的数)ORG0030HMOVR0,#listMOVA,@R0;取第一个正数LOOP:INCR0;指向下一个正数MOV3AH,@R0CJNEA,3AH,CHK;前一个数与后一个数比较CHK:JCLOOP1;前一个数小,则转MOVA,@R0;前一个数大,取后一个数LOOP1:XCHA,3AHCJNEA,#0FFH,LOOPXCHA,3AH;取最小数MOV3BH,ASJMP$3.内部RAM的X,Y单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。若X为正奇数,Z=X+Y;若X为正偶数,Z=X∨Y;若X为负奇数,Z=X∧Y;若X为负偶数,Z=X⊕Y。分析:负数:第7位为1,正数:第7位为0奇数:第0位为1,偶数:第0位为0ORG0000HMOVA,20HCLRCRLAJCFS;移到负数处处理RRARRA;第0位移到C再判定一下是不是1JCZJS;到正奇数处MOVA,20HORLA,21HMOV22H,ASJMPOKZJS:MOVA,20HADDA,21HMOV22H,ASJMPOKFS:MOVA,20HCLRCRRAJCFJS;第0位是1,移到正奇数处理MOVA,20HXRLA,21HMOV22H,ASJMPOKFJS:MOVA,20HANLA,21HMOV22H,AOK:END4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte单元中。变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。ORG0030HMOVR0,#byteMOVDPTR,#bufMOVR5,#08HMOVA,@R0LOOP:RLCAMOVR7,AJCLOOP1MOVA,#30HSJMPLOOP2LOOP1:MOVA,#31HLOOP2:MOVX@DPTR,AMOVA,R7INCDPTRDJNZR5,LOOP5.编程实现运算式c=a2+b2假定a、b、c3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。(内部RAM的DA、DB、DC单元设为20H21H22H)ORG0000HMOVA,20HPUSHACCAJMPSQRPOPACCMOV22H,AMOVA,21HPUSHACCAJMPSQRPOPACCADDA,22HMOV22H,AEND6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FF。ORG0030HMOVR0,#42HMOVR1,#52HMOVR7,41H;字符串长度LOOP:MOVA,@R0MOV30H,@R1CJNEA,30H,LKINCR0INCR1DJNZR7,LOOPMOV40H,#00HSJMPDDLK:MOV40H,#0FFHDD:SJMPDD7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。ORG0030HMOVDPTR,#tableMOVR6,#10

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功