• 147.00 KB
  • 2022-04-22 11:19:47 发布

chapter 1-4《单片机基础》练习题及答案.doc

  • 0页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'单片机基础(第3版)第1章计算机基础知识(一)填空题1.十进制数14对应的二进制数表示为(1110B),十六进制数表示为(0EH)。十进制数-100的补码为(9CH),+100的补码为(64H)。2.在一个非零的无符号二进制整数的末尾加两个0后,形成一个新的无符号二进制整数,则新数是原数的(4)倍。3.8位无符号二进制数能表示的最大十进制数是(255)。带符号二进制数11001101转换成十进制数是(-51)。4.可以将各种不同类型数据转换为计算机能处理的形式并输送到计算机中去的设备统称为(输入设备)。5.已知字符D的ASCII码是十六进制数44,则字符T的ASCII码是十进制数(84)。6.若某存储器容量为640KB,则表示该存储器共有(655360)个存储单元。7.在计算机中,二进制数的单位从小到大依次为(位)、(字节)和(字),对应的英文名称分别是(bit)、(Byte)和(Word)。8.设二进制数A=10101101,B=01110110,则逻辑运算A∨B=(11111111),A∧B=(00100100),A⊕B=(11011011)。9.机器数01101110的真值是(110),机器数01011001的真值是(89),机器数10001101的真值是(141(无符号数)或-115(带符号数)),机器数11001110的真值是(206(无符号数)或-50(带符号数))。说明:机器数是指计算机中使用的二进制数,机器数的值称为真值。机器数可表示无符号数也可表示带符号数,其中计算机中的带符号数一般为补码形式。10001101若为无符号数,则其真值为+141;若为带符号数,由于最高位(符号位)为1,所以为负数(补码形式),则其真值为-115。(二)单项选择题1.用8位二进制补码数所能表示的十进制数范围是(D)(A)-127~+127(B)-128~+12818 (C)-127~+128(D)-128~+1272.下列等式中,正确的是(B)(A)1KB=1024×1024B(B)1MB=1024×1024B(C)1KB=1024MB(D)1MB=1024B3.程序与软件的区别是(C)(A)程序小而软件大(B)程序便宜而软件昂贵(C)软件包括程序(D)程序包括软件4.存储器中,每个存储单元都被赋予惟一的编号,这个编号称为(A)(A)地址(B)字节(C)列号(D)容量5.8位二进制数所能表示的最大无符号数是(B)(A)256(B)255(C)128(D)1276.下列4个无符号数中,最小的数是(B)(A)11011001(二进制)(B)37(八进制)(C)75(十进制)(D)24(十六进制)7.下列字符中,ASCII码最小的是(B)(A)a(B)A(C)x(D)X8.下列字符中,ASCII码最大的是(C)(A)a(B)A(C)x(D)X9.有一个数152,它与十六进制数6A相等,那么该数是(B)(A)二进制数(B)八进制数(C)十进制数(D)十六进制数第2章80C51单片机的硬件结构(一)填空题1.通过堆栈实现子程序调用,首先要把(PC)的内容入栈,以进行断点保护。调用返回时再进行出栈操作,把保护的断点送回(PC)。2.80C51单片机的时钟电路包括两部分内容,即芯片内的(高增益反相放大器反相器)和芯片外跨接的(石英晶体振荡器晶振)与(两个微调电容)。若调高单片机的晶振频率,则单片机的机器周期会变(短)。18 1.通常单片机有两种复位操作,即(上电复位)和(手动复位)。复位后,PC值为(0000H),SP值为(07H),通用寄存器的当前寄存器组为(第0)组,该组寄存器的地址范围是从(00H)到(07H)。2.80C51单片机中,一个机器周期包含(6)个状态周期,一个状态周期又可划分为(2)个拍节,一个拍节为(1)个振荡脉冲周期。因此,一个机器周期应包含(12)个振荡脉冲周期。3.80C51中惟一一个可供用户使用的16位寄存器是(DPTR),它可拆分为两个8位寄存器使用,名称分别为(DPH)和(DPL)。4.单片机程序存储器的寻址范围由PC的位数决定。80C51的PC为16位,因此程序存储器地址空间是(64KB)。(二)单项选择题1.下列概念叙述正确的是(D)(A)80C51中共有5个中断源,因此在芯片上相应地有5个中断请求输入引脚(2)(B)特殊的存取规则使得堆栈已不是数据存储区的一部分(C)可以把PC看成是数据存储空间的地址指针(D)CPU中反映程序运行状态和运算结果特征的寄存器是PSW2.取指操作后,PC的值是(C)(A)当前指令前一条指令的地址(B)当前正在执行指令的地址(C)下一条指令的地址(D)控制寄存器中指令寄存器的地址3.80C51单片机中,设置堆栈指针SP为37H后就发生子程序调用,这时SP的值变为(C)(A)37H(B)38H(C)39H(D)3AH4.设置堆栈指针SP=30H后,进行一系列的堆栈操作。当进栈数据全部弹出后,SP应指向(A)(A)30H单元(B)07H单元(C)31H单元(D)2FH单元5.下列关于堆栈的描述中,错误的是(C)(A)80C51的堆栈在内部RAM中开辟,所以SP只需8位就够了(B)堆栈指针SP的内容是堆栈栈顶单元的地址18 (C)在80C51中,堆栈操作过程与一般RAM单元的读/写操作没有区别(D)在中断响应时,断点地址自动进栈6.在单片机芯片内设置通用寄存器的好处不应该包括(A)(A)提高程序运行的可靠性(B)提高程序运行速度(C)为程序设计提供方便(D)减小程序长度7.下列叙述中正确的是(D)(A)SP内装的是堆栈栈顶单元的内容(地址)(B)在中断服务程序中没有PUSH和POP指令,说明此次中断操作与堆栈无关(有关)(C)在单片机中配合实现“程序存储自动执行”的寄存器是累加器(PC)(D)两数相加后,若A中数据为66H,则PSW中最低位的状态为0第3章80C51单片机指令系统(一)填空题1.假定累加器A中的内容为30H,执行指令“1000H:MOVCA,@A+PC”后,会把程序存储器(1031H)单元的内容送累加器A。说明:MOVCA,@A+PC是单字节指令,当前PC即为1001H,故题中指令的含义即为把A+PC=1031H单元的内容送入累加器A。2.假定(A)=85H,(R0)=20H,(20H)=0AFH,执行指令“ADDA,@R0”后,累加器A的内容为(34H),CY的内容为(1),AC的内容为(1),OV的内容为(1)。3.执行如下指令序列后,所实现的逻辑运算式为()MOVC,P1.0ANLC,P1.1ANLC,/P1.2MOVP3.0,C4.假定addr11=00100000000B,标号qaz的地址为1030H,执行指令“qaz:AJMPaddr11”后,程序转移到地址(1100H)去执行。5.18 累加器A中存放着一个其值小于或等于127的8位无符号数,CY清0后执行“RLCA”指令,则A中的数变为原来的(2)倍。1.已知A=7AH,R0=30H,(30H)=A5H,PSW=80H,请按要求填写各条指令的执行结果(每条指令均按已给定的原始数据进行操作)。XCHA,R0A=(30H),R0=(7AH)XCHA,30HA=(0A5H)XCHA,@R0A=(0A5H)XCHDA,@R0A=(75H)SWAPAA=(0A7H)ADDA,R0A=(0AAH),CY=(0),OV=(1)ADDA,30HA=(1FH),CY=(1),OV=(0)ADDA,#30HA=(0AAH),CY=(0),OV=(1)ADDCA,30HA=(20H),CY=(1),OV=(0)SUBBA,30HA=(0D4H),CY=(1),OV=(1)SUBBA,#30HA=(49H),CY=(0),OV=(0)(二)单项选择题1.下列指令或指令序列中,不能实现PSW内容送A的是(C)(A)MOVA,PSW(B)MOVA,0D0H(C)MOVR0,#0D0H(D)PUSHPSWMOVA,@R0POPACC说明:特殊功能寄存PSW只能采用直接寻址方式,不能用寄存器间接寻址方式,故C错误。2.在相对寻址方式中,“相对”两字是指相对于(C)(A)地址偏移量rel(B)当前指令的首地址(C)下一条指令的首地址(D)DPTR值3.下列指令或指令序列中,能将外部数据存储器3355H单元内容传送给A的是(B)(A)MOVXA,3355H(B)MOVDPTR,#3355HMOVXA,@DPTR(C)MOVP0,#33H(D)MOVP2,#33HMOVR0,#55HMOVR2,#55H18 MOVXA,@R0MOVXA,@R24.对程序存储器的读操作,只能使用(D)(A)MOV指令(B)PUSH指令(C)MOVX指令(D)MOVC指令5.执行返回指令后,返回的断点是(C)(A)调用指令的首地址(B)调用指令的末地址(C)调用指令的下一条指令的首地址(D)返回指令的末地址6.以下各项中不能用来对内部数据存储器进行访问的是(A)(A)数据指针DPTR(B)按存储单元地址或名称(C)堆栈指针SP(D)由R0或R1作间址寄存器说明:数据指针DPTR为16位寄存器,而内部RAM的地址是8位的,所以不能用来对内部RAM进行访问。(三)其他类型题1.判断下列指令的合法性(合法打“√”,非法打“×”)MOVA,@R2(×)MOVR0,R1(×)INCDPTR(√)MOVPC,#2222H(×)DECDPTR(×)RLCR0(×)MOV0E0H,@R0(√)CPLR5(×)CLRR0(×)CPLF0H(×)PUSHDPTR(×)POP30H(√)MOVXA,@R1(√)MOVA,1FH(√)MOVC,1FH(√)MOVF0,ACC.3(×)MOVF0,C(√)MOVP1,R3(√)MOVDPTR,#0FCH(√)CPL30H(√)PUSHR0(×)MOVC,#0FFH(×)MOVA,#0D0H(√)18 说明:MOVDPTR,#0FCH(√)该指令是将立即数00FCH送入16位数据指针DPTR。CPL30H(√)该指令中30H是指内部RAM位寻址区中的30H位,即26H.0位。PUSHR0(×)PUSH指令只能对直接寻址的地址单元内容进行压栈,不能对工作寄存器压栈。2.利用位操作指令序列实现下列逻辑运算。(1)ORLC,11HMOVF0,CMOVC,P1.0ORLC,/10HANLC,F0MOVD,C(2)MOVC,ACC.2ANLC,P2.7ORLC,ACC.1ANLC,P2.0MOVE,C3.编写程序将内部RAM20H~23H单元的高4位写1,低4位写0。分析:就是把内部RAM20H~23H这4个单元写入0F0H。用一个DJNZ的循环。ORG0030HMOVR0,#1FH;R0指向1FH单元MOVR1,#04H;4个单元LOOP:INCR0MOV@R0,#0F0H;写入DJNZR1,LOOP;循环4次18 END2.在m和m+1单元中存有两个BCD数,将他们合并到m单元中,编写程序完成。ORG0030HMOVR0,#mMOVA,@R0;将m单元中的BCD数送入累加器AANLA,#0FH;把m单元的高4位清0SWAPA;将m单元中的BCD数移入高4位MOV@R0,A;m单元高4位为BCD数,低4位为0INCR0;指向m+1单元MOVA,@R0;将m+1单元中的BCD数送入累加器AANLA,#0FH;把m+1单元的高4位清0DECR0;指向m单元ORLA,@R0;将和m+1单元和m单元内容合并MOV@R0,A;合并后结果送m单元END说明:此题的含义:假设m单元中存放的是00001001(十进制数9),m+1单元中存放的是00000101(十进制数5),则将m单元中的低4位和m+1单元中低4位合并到m单元中。有两种合并方法:①将m单元中的低4位移至m单元的高4位,将m+1单元中低4位移至m单元的低4位;②m单元中的低4位保持不变,将m+1单元中低4位移至m单元的高4位。上述程序是按方法①编写的。3.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元。假定相加结果小于255。编写程序完成。ORG0030HMOVR0,#10;给R0置计数器初值MOVR1,#data;数据块首址送R1CLRA;A清零LOOP:ADDA,@R1;加一个数INCR1;修改地址,指向下一个数DJNZR0,LOOP;R0减1,不为零循环MOVsum,A;存10个数相加和18 END2.假定8位二进制带符号数存于R0中,要求编写一个求补(取反)程序,所得补码放入R1中。说明:对存于R0中的二进制带符号数,如果是正数,则将其变成绝对值相等的负数(用补码表示);如果是负数(用补码表示),则将其变成绝对值相等的正数。例如,若R0中存放的是+5的补码,则将-5的补码存入R1,若R0中存放的是-5的补码,则将+5的补码存入R1。ORG0030HMOVA,R0;将带符号数送入ACPLAADDA,#01H;末位加1MOVR1,A;补码存入R1END另:由带符号数的原码求其对应的补码程序:ORG0030HMOVA,R0;将带符号数送入AANLA,#80HJZPOSITIVEMOVA,R0XRLA,#7FHADDA,#01HMOVR0,APOSITIVE:MOVA,R0MOVR1,AEND第4章单片机汇编语言程序设计(一)填空题1.假定A=40H,R1=23H,(40H)=05H。执行以下两条指令后,A=(25H18 ),R1=(40H),(40H)=(03H)。XCHA,R1;A=23H,R1=40HXCHDA,@R1;A=25H,(40H)=03H1.假定80C51的晶振频率为6MHz,执行下列程序后,在P1.1引脚产生的方波宽度为(5.828ms)START:SETBP1.1;P1.1置1(1周期)DL:MOV30H,#03H;30H置初值(2周期)DL0:MOV31H,#0F0H;31H置初值(2周期)DL1:DJNZ31H,DL1;31H减1,不为0重复执行(2周期)DJNZ30H,DL0;30H减1,不为0转DL0(2周期)CPLP1.1;P1.1取反(1周期)SJMPDL;转DL(2周期)说明:此题中在P1.1引脚产生的方波宽度为T={(2*15*16+2+2)*3+1+2+2}*2*2=5828ms2.下列程序中,X、Y和Z为输入的8位无符号二进制数,F为输出的逻辑运算结果。试画出该程序所模拟的组合逻辑电路。MOVA,XANLA,YMOVR1,AMOVA,YXRLA,ZCPLAORLA,R1MOVF,A18 1.分析下列跳转程序,程序中A与30H单元中的数都是符号数,说明当(A=(30H))时转向LOOP1,当(A>(30H))时转向LOOP2,当(A<(30H))时转向LOOP3。MOVR0,A;R0←AANLA,#80HJNZNEG;A<0,转NEGMOVA,30HANLA,#80HJNZLOOP2;A≥0,(30H)<0,转LOOP2SJMPCOMP;A≥0,(30H)≥0,转COMPNEG:MOVA,30HANLA,#80HJZLOOP3;A<0,(30H)≥0,转LOOP3COMP:MOVA,R0CJNEA,30H,NEXT;A≠(30H),转NEXTSJMPLOOP1;A=(30H),转LOOP1NEXT:JNCLOOP2;A>(30H),转LOOP2JCLOOP3;A<(30H),转LOOP3综上分析可知,当A=(30H)时转向LOOP1,A>(30H)时转向LOOP2,A<(30H)时转向LOOP3。2.假定80C51的晶振频率为6MHz,下列程序的执行时间为(30.696ms18 )。已知程序中前2条指令机器周期数为1,后4条指令机器周期数为2。MOVR3,#151周期DL1:MOVR4,#2551周期DL2:MOVP1,R32周期DJNZR4,DL22周期DJNZR3,DL12周期RET2周期执行时间:T={1+[1+(2+2)*255+2]*15+2}*2=30696ms(二)编程题1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位于外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕,试编程实现。ORG0030HMOVR0,#inbufMOVDPTR,#outbufMOVR1,#10HLOOP:MOVA,@R0;从内部RAM取数CJNEA,#0DH,LL;是否为回车符CRSJMPSTOP;是回车符,则转STOP,停止传送LL:MOVX@DPTR,A;不是回车符,则传送到外部RAMINCR0INCDPTRDJNZR1,LOOP;没传送完则循环STOP:END2.内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以﹣1作结束标志。编程实现找出表中最小数。18 分析:从list+1单元开始判断其中的数是否为-1,将比较得到的小数放入累加器AORG0030HMOVR0,#listMOV30H,@R0;取第一个正数LOOP1:INCR0;指向下一个正数MOVA,@R0CJNEA,#0FFH,LOOP2;判断后一个数是否为-1SJMPLLLOOP2:CJNEA,30H,CHKCHK:JNCLOOP1;后一个数大,则转LOOPXCHA,30H;后一个数小,则交换SJMPLOOP1LL:END1.内部RAM的X,Y单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。若X为正奇数,Z=X+Y;若X为正偶数,Z=X∨Y;若X为负奇数,Z=X∧Y;若X为负偶数,Z=X⊕Y。分析:正数:第7位为0,负数:第7位为1;奇数:第0位为1,偶数:第0位为0方法1:利用ANL指令判断正负、奇偶ORG0030HMOVA,XANLA,#80H;判断X正负JNZNEG;若X为负,转NEGMOVA,X;X为正ANLA,#01H;判断X奇偶18 JZEVEN1;若X为偶数,转EVEN1MOVA,XADDA,Y;若X为正奇数,Z=X+YSJMPRESULTEVEN1:MOVA,XORLA,Y;若X为正偶数,Z=X∨YSJMPRESULTNEG:MOVA,X;X为负ANLA,#01H;判断X奇偶JZEVEN2;若X为偶数,转EVEN2MOVA,XANLA,Y;若X为负奇数,Z=X∧YSJMPRESULTEVEN2:MOVA,X;若X为负偶数,Z=X⊕YXRLA,YRESULT:MOVZ,AEND方法2:RLC指令将符号位移入CY判断正负,RRC指令将最低位移入CY判断奇偶ORG0030HMOVA,XCLRCRLCAJCNEG;X为负,转至NEGRRCARRCAJNCEVEN1;X为偶数,转至EVEN1MOVA,XADDA,Y;X为正奇数,Z=X+YSJMPRETULT18 EVEN1:MOVA,XORLA,Y;X为正偶数,Z=X∨YSJMPRETULTNEG:RRCA,RRCAJNCEVEN2MOVA,XANLA,Y;X为负奇数,Z=X∧YSJMPRETULTEVEN2:MOVA,XXRLA,Y;X为负偶数,Z=X⊕YRETULT:MOVZ,AEND1.把一个8位二进制数的各位用ASCII码表示之(例如,为0的位用30H表示,为1的位用31H表示等)。该数存放在内部RAM的byte单元中。变换后得到的8个ASCII码存放在外部RAM以buf开始的存储单元中,试编程实现。ORG0030HMOVDPTR,#bufMOVR0,#byteMOVR7,#08HMOVA,@R0CLRCLOOP1:RRCAMOVR6,AJCONEMOVA,#30HSJMPLOOP2ONE:MOVA,#31H18 LOOP2:MOVX@DPTR,AINCDPTRMOVA,R6DJNZR7,LOOP1END1.编程实现运算式。假定a、b、c3个数分别存放于内部RAM的DA、DB、DC单元中,另有平方运算子程序SQR供调用。ORG0030HMOVSP,#38HMOVA,DAPUSHACCACALLSQRPOPACCMOVDC,AMOVA,DBPUSHACCACALLSQRPOPACCADDA,DCMOVDC,ASQR:POP30HPOP31HPOPACCMOVB,AMULABPUSHACCPUSH31HPUSH30HRETEND18 说明:此题中a、b均为单字节数,且假设a2、b2均为单字节数,平方和c(单字节数)存于DC单元中。1.试编程实现两个ASCII码字符串是否相等。字符串的长度在内部RAM41H单元中,第1个字符串的首地址为42H,第2个字符串的首地址为52H。如果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FFH。ORG0030HMOVR0,#42HMOVR1,#52HMOVR7,41HLOOP:MOVA,@R0MOV30H,@R1CJNEA,30H,LKINCR0INCR1DJNZR7,LOOPMOV40H,#00HSJMPDDLK:MOV40H,#0FFHDD:END2.在外部RAM首地址为table的数据表中,有10字节数据。试编程实现将每个字节的最高位无条件置1。ORG0030HMOVDPTR,#tableMOVR6,#10LOOP:MOVXA,@DPTRSETBACC.7MOVX@DPTR,A18 INCDPTRDJNZR6,LOOPEND18'