chapter单片机基础练习题及答案.docx
《chapter单片机基础练习题及答案.docx》由会员分享,可在线阅读,更多相关《chapter单片机基础练习题及答案.docx(20页珍藏版)》请在冰豆网上搜索。
chapter单片机基础练习题及答案
单片机根底〔第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~+128
〔C〕-127~+128〔D〕-128~+127
2.以下等式中,正确的选项是〔B〕
〔A〕1KB=1024×1024B〔B〕1MB=1024×1024B
〔C〕1KB=1024MB〔D〕1MB=1024B
3.程序与软件的区别是〔C〕
〔A〕程序小而软件大〔B〕程序廉价而软件昂贵
〔C〕软件包括程序〔D〕程序包括软件
4.存储器中,每个存储单元都被赋予惟一的编号,这个编号称为〔A〕
〔A〕地址〔B〕字节〔C〕列号〔D〕容量
5.8位二进制数所能表示的最大无符号数是〔B〕
〔A〕256〔B〕255〔C〕128〔D〕127
6.以下4个无符号数中,最小的数是〔B〕
〔A〕11011001〔二进制〕〔B〕37〔八进制〕
〔C〕75〔十进制〕〔D〕24〔十六进制〕
7.以下字符中,ASCII码最小的是〔B〕
〔A〕a〔B〕A〔C〕x〔D〕X
8.以下字符中,ASCII码最大的是〔C〕
〔A〕a〔B〕A〔C〕x〔D〕X
9.有一个数152,它与十六进制数6A相等,那么该数是〔B〕
〔A〕二进制数〔B〕八进制数〔C〕十进制数〔D〕十六进制数
第2章80C51单片机的硬件构造
〔一〕填空题
1.通过堆栈实现子程序调用,首先要把〔PC〕的内容入栈,以进展断点保护。
调用返回时再进展出栈操作,把保护的断点送回〔PC〕。
2.80C51单片机的时钟电路包括两部分内容,即芯片内的〔高增益反相放大器反相器〕和芯片外跨接的〔石英晶体振荡器晶振〕与〔两个微调电容〕。
假设调高单片机的晶振频率,那么单片机的机器周期会变〔短〕。
3.通常单片机有两种复位操作,即〔上电复位〕和〔手动复位〕。
复位后,PC值为〔0000H〕,SP值为〔07H〕,通用存放器的当前存放器组为〔第0〕组,该组存放器的地址范围是从〔00H〕到〔07H〕。
4.80C51单片机中,一个机器周期包含〔6〕个状态周期,一个状态周期又可划分为〔2〕个拍节,一个拍节为〔1〕个振荡脉冲周期。
因此,一个机器周期应包含〔12〕个振荡脉冲周期。
5.80C51中惟一一个可供用户使用的16位存放器是〔DPTR〕,它可拆分为两个8位存放器使用,名称分别为〔DPH〕和〔DPL〕。
6.单片机程序存储器的寻址范围由PC的位数决定。
80C51的PC为16位,因此程序存储器地址空间是〔64KB〕。
〔二〕单项选择题
1.以下概念表达正确的选项是〔D〕
〔A〕80C51中共有5个中断源,因此在芯片上相应地有5个中断恳求输入引脚
(2)
〔B〕特殊的存取规那么使得堆栈已不是数据存储区的一部分
〔C〕可以把PC看成是数据存储空间的地址指针
〔D〕CPU中反映程序运行状态和运算结果特征的存放器是PSW
2.取指操作后,PC的值是〔C〕
〔A〕当前指令前一条指令的地址〔B〕当前正在执行指令的地址
〔C〕下一条指令的地址〔D〕控制存放器中指令存放器的地址
3.80C51单片机中,设置堆栈指针SP为37H后就发生子程序调用,这时SP的值变为〔C〕
〔A〕37H〔B〕38H〔C〕39H〔D〕3AH
4.设置堆栈指针SP=30H后,进展一系列的堆栈操作。
当进栈数据全部弹出后,SP应指向〔A〕
〔A〕30H单元〔B〕07H单元〔C〕31H单元〔D〕2FH单元
5.以下关于堆栈的描绘中,错误的选项是〔C〕
〔A〕80C51的堆栈在内部RAM中开拓,所以SP只需8位就够了
〔B〕堆栈指针SP的内容是堆栈栈顶单元的地址
〔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.执行如下指令序列后,所实现的逻辑运算式为〔
〕
MOVP3.0,C
4.假定addr11=00100000000B,标号qaz的地址为1030H,执行指令“qaz:
AJMPaddr11”后,程序转移到地址〔1100H〕去执行。
5.累加器A中存放着一个其值小于或等于127的8位无符号数,CY清0后执行“RLCA〞指令,那么A中的数变为原来的〔2〕倍。
6.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〕PUSHPSW
MOVA,@R0POPACC
说明:
特殊功能存放PSW只能采用直接寻址方式,不能用存放器间接寻址方式,故C错误。
2.在相对寻址方式中,“相对〞两字是指相对于〔C〕
〔A〕地址偏移量rel〔B〕当前指令的首地址
〔C〕下一条指令的首地址〔D〕DPTR值
3.以下指令或指令序列中,能将外部数据存储器3355H单元内容传送给A的是〔B〕
〔A〕MOVXA,3355H〔B〕MOVDPTR,#3355H
MOVXA,@DPTR
〔C〕MOVP0,#33H〔D〕MOVP2,#33H
MOVR0,#55HMOVR2,#55H
MOVXA,@R0MOVXA,@R2
4.对程序存储器的读操作,只能使用〔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〔√〕
说明:
MOVDPTR,#0FCH〔√〕
该指令是将立即数00FCH送入16位数据指针DPTR。
CPL30H〔√〕
该指令中30H是指内部RAM位寻址区中的30H位,即26H.0位。
PUSHR0〔×〕
PUSH指令只能对直接寻址的地址单元内容进展压栈,不能对工作存放器压栈。
2.利用位操作指令序列实现以下逻辑运算。
〔1〕
ORLC,11H
MOVF0,C
ORLC,/10H
ANLC,F0
MOVD,C
〔2〕
OR
MOVE,C
3.编写程序将内部RAM20H~23H单元的高4位写1,低4位写0。
分析:
就是把内部RAM20H~23H这4个单元写入0F0H。
用一个DJNZ的循环。
ORG0030H
MOVR0,#1FH;R0指向1FH单元
MOVR1,#04H;4个单元
LOOP:
INCR0
MOV@R0,#0F0H;写入
DJNZR1,LOOP;循环4次
END
4.在m和m+1单元中存有两个BCD数,将他们合并到m单元中,编写程序完成。
ORG0030H
MOVR0,#m
MOVA,@R0;将m单元中的BCD数送入累加器A
ANLA,#0FH;把m单元的高4位清0
SWAPA;将m单元中的BCD数移入高4位
MOV@R0,A;m单元高4位为BCD数,低4位为0
INCR0;指向m+1单元
MOVA,@R0;将m+1单元中的BCD数送入累加器A
ANLA,#0FH;把m+1单元的高4位清0
DECR0;指向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位。
上述程序是按方法①编写的。
5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元。
假定相加结果小于255。
编写程序完成。
ORG0030H
MOVR0,#10;给R0置计数器初值
MOVR1,#data;数据块首址送R1
CLRA;A清零
LOOP:
ADDA,@R1;加一个数
INCR1;修改地址,指向下一个数
DJNZR0,LOOP;R0减1,不为零循环
MOVsum,A;存10个数相加和
END
6.假定8位二进制带符号数存于R0中,要求编写一个求补〔取反〕程序,所得补码放入R1中。
说明:
对存于R0中的二进制带符号数,假设是正数,那么将其变成绝对值相等的负数〔用补码表示〕;假设是负数〔用补码表示〕,那么将其变成绝对值相等的正数。
例如,假设R0中存放的是+5的补码,那么将-5的补码存入R1,假设R0中存放的是-5的补码,那么将+5的补码存入R1。
ORG0030H
MOVA,R0;将带符号数送入A
CPLA
ADDA,#01H;末位加1
MOVR1,A;补码存入R1
END
另:
由带符号数的原码求其对应的补码程序:
ORG0030H
MOVA,R0;将带符号数送入A
ANLA,#80H
JZPOSITIVE
MOVA,R0
XRLA,#7FH
ADDA,#01H
MOVR0,A
POSITIVE:
MOVA,R0
MOVR1,A
END
第4章单片机汇编语言程序设计
〔一〕填空题
1.假定A=40H,R1=23H,〔40H〕=05H。
执行以下两条指令后,A=〔25H〕,R1=〔40H〕,〔40H〕=〔03H〕。
XCHA,R1;A=23H,R1=40H
XCHDA,@R1;A=25H,〔40H〕=03H
2.假定80C51的晶振频率为6MHz,执行以下程序后,在P1.1引脚产生的方波宽度为〔ms〕
START:
SETBP1.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取反〔1周期〕
SJMPDL;转DL〔2周期〕
T={(2*15*16+2+2)*3+1+2+2}*2*2=5828μs
3.以下程序中,X、Y和Z为输入的8位无符号二进制数,F为输出的逻辑运算结果。
试画出该程序所模拟的组合逻辑电路。
MOVA,X
ANLA,Y
MOVR1,A
MOVA,Y
XRLA,Z
CPLA
ORLA,R1
MOVF,A
4.分析以下跳转程序,程序中A与30H单元中的数都是符号数,说明当〔A=〔30H〕〕时转向LOOP1,当〔A>〔30H〕〕时转向LOOP2,当〔A<〔30H〕〕时转向LOOP3。
MOVR0,A;R0←A
ANLA,#80H
JNZNEG;A<0,转NEG
MOVA,30H
ANLA,#80H
JNZLOOP2;A≥0,(30H)<0,转LOOP2
SJMPCOMP;A≥0,(30H)≥0,转COMP
NEG:
MOVA,30H
ANLA,#80H
JZLOOP3;A<0,(30H)≥0,转LOOP3
COMP:
MOVA,R0
CJNEA,30H,NEXT;A≠(30H),转NEXT
SJMPLOOP1;A=(30H),转LOOP1
NEXT:
JNCLOOP2;A>(30H),转LOOP2
JCLOOP3;A<(30H),转LOOP3
综上分析可知,当A=〔30H〕时转向LOOP1,A>〔30H〕时转向LOOP2,A<〔30H〕时转向LOOP3。
5.假定80C51的晶振频率为6MHz,以下程序的执行时间为〔ms〕。
程序中前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=30696μs
〔二〕编程题
1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位于外部RAM的输出缓冲区outbuf传送,一直进展到遇见回车或整个字符串传送完毕,试编程实现。
ORG0030H
MOVR0,#inbuf
MOVDPTR,#outbuf
MOVR1,#10H
LOOP:
MOVA,@R0;从内部RAM取数
CJNEA,#0DH,LL;是否为回车符CR
SJMPSTOP;是回车符,那么转STOP,停顿传送
LL:
MOVX@DPTR,A;不是回车符,那么传送到外部RAM
INCR0
INCDPTR
DJNZR1,LOOP;没传送完那么循环
STOP:
END
2.内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以﹣1作完毕标志。
编程实现找出表中最小数。
分析:
从list+1单元开始判断其中的数是否为-1,将比较得到的小数放入累加器A
ORG0030H
MOVR0,#list
MOV30H,@R0;取第一个正数
LOOP1:
INCR0;指向下一个正数
MOVA,@R0
CJNEA,#0FFH,LOOP2;判断后一个数是否为-1
SJMPLL
LOOP2:
CJNEA,30H,CHK
CHK:
JNCLOOP1;后一个数大,那么转LOOP
XCHA,30H;后一个数小,那么交换
SJMPLOOP1
LL:
END
3.内部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指令判断正负、奇偶
ORG0030H
MOVA,X
ANLA,#80H;判断X正负
JNZNEG;假设X为负,转NEG
MOVA,X;X为正
ANLA,#01H;判断X奇偶
JZEVEN1;假设X为偶数,转EVEN1
MOVA,X
ADDA,Y;假设X为正奇数,Z=X+Y
SJMPRESULT
EVEN1:
MOVA,X
ORLA,Y;假设X为正偶数,Z=X∨Y
SJMPRESULT
NEG:
MOVA,X;X为负
ANLA,#01H;判断X奇偶
JZEVEN2;假设X为偶数,转EVEN2
MOVA,X
ANLA,Y;假设X为负奇数,Z=X∧Y
SJMPRESULT
EVEN2:
MOVA,X;假设X为负偶数,Z=X⊕Y
XRLA,Y
RESULT:
MOVZ,A
END
方法2:
RLC指令将符号位移入CY判断正负,RRC指令将最低位移入CY判断奇偶
ORG0030H
MOVA,X
CLRC
RLCA
JCNEG;X为负,转至NEG
RRCA
RRCA
JNCEVEN1;X为偶数,转至EVEN1
MOVA,X
ADDA,Y;X为正奇数,Z=X+Y
SJMPRETULT
EVEN1:
MOVA,X
ORLA,Y;X为正偶数,Z=X∨Y
SJMPRETULT
NEG:
RRCA,
RRCA
JNCEVEN2
MOVA,X
ANLA,Y;X为负奇数,Z=X∧Y
SJMPRETULT
EVEN2:
MOVA,X
XRLA,Y;X为负偶数,Z=X⊕Y
RETULT:
MOVZ,A
END
4.把一个8位二进制数的各位用ASCII码表示之〔例如,为0的位用30H表示,为1的位用31H表示等〕。
该数存放在内部RAM的byte单元中。
变换后得到的8个ASCII码存放在外部RAM以buf开始的存储单元中,试编程实现。
ORG0030H
MOVDPTR,#buf
MOVR0,#byte
MOVR7,#08H
MOVA,@R0
CLRC
LOOP1:
RRCA
MOVR6,A
JCONE
MOVA,#30H
SJMP