chapter 14《单片机基础》练习题及答案Word格式.docx
- 文档编号:16341092
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:15
- 大小:24.06KB
chapter 14《单片机基础》练习题及答案Word格式.docx
《chapter 14《单片机基础》练习题及答案Word格式.docx》由会员分享,可在线阅读,更多相关《chapter 14《单片机基础》练习题及答案Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
调用返回时再进行出栈操作,把保护的断点送回(PC)。
80C51单片机的时钟电路包括两部分内容,即芯片内的(高增益反相放大器反相器)和芯片外跨接的(石英晶体振荡器晶振)与(两个微调电容)。
若调高单片机的晶振频率,则单片机的机器周期会变(短)。
通常单片机有两种复位操作,即(上电复位)和(手动复位)。
复位后,PC值为(0000H),SP值为(07H),通用寄存器的当前寄存器组为(第0)组,该组寄存器的地址范围是从(00H)到(07H)。
80C51单片机中,一个机器周期包含(6)个状态周期,一个状态周期又可划分为
(2)个拍节,一个拍节为
(1)个振荡脉冲周期。
因此,一个机器周期应包含(12)个振荡脉冲周期。
80C51中惟一一个可供用户使用的16位寄存器是(DPTR),它可拆分为两个8位寄存器使用,名称分别为(DPH)和(DPL)。
单片机程序存储器的寻址范围由PC的位数决定。
80C51的PC为16位,因此程序存储器地址空间是(64KB)。
1.下列概念叙述正确的是(D)
(A)80C51中共有5个中断源,因此在芯片上相应地有5个中断请求输入引脚
(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)在单片机中配合实现“程序存储自动执行”的寄存器是累加器
(D)两数相加后,若A中数据为66H,则PSW中最低位的状态为0
第3章80C51单片机指令系统
假定累加器A中的内容为30H,执行指令“1000H:
MOVCA,@A+PC”后,会把程序存储器(1031H)单元的内容送累加器A。
MOVCA,@A+PC是单字节指令,当前PC即为1001H,故题中指令的含义即为把A+PC=1031H单元的内容送入累加器A。
假定(A)=85H,(R0)=20H,(20H)=0AFH,执行指令“ADDA,@R0”后,累加器A的内容为(34H),CY的内容为
(1),AC的内容为
(1),OV的内容为
(1)。
执行如下指令序列后,所实现的逻辑运算式为()
MOVC,P1.0
ANLC,P1.1
ANLC,/P1.2
MOVP3.0,C
假定addr11=00100000000B,标号qaz的地址为1030H,执行指令“qaz:
AJMPaddr11”后,程序转移到地址(1100H)去执行。
累加器A中存放着一个其值小于或等于127的8位无符号数,CY清0后执行“RLCA”指令,则A中的数变为原来的
(2)倍。
已知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指令只能对直接寻址的地址单元内容进行压栈,不能对工作寄存器压栈。
利用位操作指令序列实现下列逻辑运算。
(1)
ORLC,11H
MOVF0,C
ORLC,/10H
ANLC,F0
MOVD,C
(2)
MOVC,ACC.2
ANLC,P2.7
ORLC,ACC.1
ANLC,P2.0
MOVE,C
编写程序将内部RAM20H~23H单元的高4位写1,低4位写0。
分析:
就是把内部RAM20H~23H这4个单元写入0F0H。
用一个DJNZ的循环。
ORG0000H
MOVR0,#20H;
R0指向20H单元
MOVR1,#04H;
4个单元
LOOP:
MOV@R0,#0F0H;
写入
INCR0
DJNZR1,LOOP;
循环4次
END
在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单元
将m+1单元中的BCD数送入累加器A
ANLA,#0FH;
把m+1单元的高4位清0
DECR0;
指向m单元
ORLA,@R0;
将和m+1单元和m单元内容合并
合并后结果送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位。
上述程序是按方法①编写的。
将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元。
假定相加结果小于255。
编写程序完成。
MOVR0,#10;
给R0置计数器初值
MOVR1,#data;
数据块首址送R1
CLRA;
A清零
ADDA,@R1;
加一个数
INCR1;
修改地址,指向下一个数
DJNZR0,LOOP;
R0减1,不为零循环
MOVsum,A;
存10个数相加和
假定8位二进制带符号数存于R0中,要求编写一个求补(取反)程序,所得补码放入R1中。
MOVA,R0;
将带符号数送入A
CPLA
ADDA,#01H;
末位加1
MOVR1,A;
补码存入R1
对存于R0中的二进制带符号数,如果是正数,则将其变成绝对值相等的负数(用补码表示);
如果是负数(用补码表示),则将其变成绝对值相等的正数。
例如,若R0中存放的是+5的补码,则将-5的补码存入R1,若R0中存放的是-5的补码,则将+5的补码存入R1。
第4章单片机汇编语言程序设计
假定A=40H,R1=23H,(40H)=05H。
执行以下两条指令后,A=(25H),R1=(40H),(40H)=(03H)。
XCHA,R1;
A=23H,R1=40H
XCHDA,@R1;
A=20H,(40H)=03H
假定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+(2+2*15*16+2)*3+1+2}*2*2=5828?
s
下列程序中,X、Y和Z为输入的8位无符号二进制数,F为输出的逻辑运算结果。
试画出该程序所模拟的组合逻辑电路。
MOVA,X
ANLA,Y
MOVR1,A
MOVA,Y
XRLA,Z
ORLA,R1
MOVF,A
分析下列跳转程序,程序中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
JZLOOP3;
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。
假定80C51的晶振频率为6MHz,下列程序的执行时间为(30.696ms)。
已知程序中前2条指令机器周期数为1,后4条指令机器周期数为2。
MOVR3,#151周期
MOVR4,#2551周期
DL2:
MOVP1,R32周期
DJNZR4,DL22周期
DJNZR3,DL12周期
RET2周期
执行时间:
T={1+[1+(2+2)*255+2]*15+2}*2=30696?
(二)编程题
把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位于外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕,试编程实现。
MOVR0,#inbuf
MOVDPTR,#outbuf
MOVR4,#10H
MOVA,@R0;
从内部RAM取数
CJNEA,#0DH,LL;
是否为回车符CR
SJMPSTOP;
是回车符,则转STOP,停止传送
LL:
MOVX@DPTR,A;
不是回车符,则传送到外部RAM
INCR0
INCDPTR
DJNZR4,LOOP;
沒传送完则循环
STOP:
SJMP$
内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以﹣1作结束标志。
编程实现找出表中最小数。
从list+1单元开始判断其中的数是否为-1,将比较得到的小数放入累加器A
MOVR0,#list
MOV30H,@R0;
取第一个正数
INCR0;
指向下一个正数
MOVA,@R0
CJNEA,#0FFH,LOOP2;
判断后一个数是否为-1
SJMP$
LOOP2:
CJNEA,30H,CHK;
后一个数与前一个数比较
CHK:
JCLOOP;
后一个数小,则转LOOP
XCHA,30H;
后一个数大,取前一个数
SJMPLOOP
内部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指令判断正负、奇偶
ANLA,#80H;
判断X正负
JNZNEG;
若X为负,转NEG
MOVA,X;
X为正
ANLA,#01H;
判断X奇偶
JZEVEN1;
若X为偶数,转EVEN1
ADDA,Y;
若X为正奇数,Z=X+Y
SJMPRESULT
EVEN1:
MOVA,X
ORLA,Y;
若X为正偶数,Z=X∨Y
NEG:
MOVA,X;
X为负
ANLA,#01H;
JZEVEN2;
若X为偶数,转EVEN2
MOVA,X
ANLA,Y;
若X为负奇数,Z=X∧Y
EVEN2:
若X为负偶数,Z=X⊕Y
XRLA,Y
RESULT:
MOVZ,A
方法2:
RLC指令将符号位移入CY判断正负,RRC指令将最低位移入CY判断奇偶
MOVA,X
CLRC
RLCA
JCNEG;
X为负,转至NEG
RRCA
RRCA
JNCEVEN1;
X为偶数,转至EVEN1
ADDA,Y;
X为正奇数,Z=X+Y
SJMPRETULT
MOVA,X
ORLA,Y;
X为正偶数,Z=X∨Y
RRCA,
JNCEVEN2
ANLA,Y;
X为负奇数,Z=X∧Y
XRLA,Y;
X为负偶数,Z=X⊕Y
RETULT:
MOVZ,A
END
把一个8位二进制数的各位用ASCII码表示之(例如,为0的位用30H表示,为1的位用31H表示等)。
该数存放在内部RAM的byte单元中。
变换后得到的8个ASCII码存放在外部RAM以buf开始的存储单元中,试编程实现。
MOVDPTR,#buf
MOVR0,#byte
MOVR7,#08H
MOVA,@R0
LOOP1:
RRCA
MOVR6,A
JCONE
MOVA,#30H
SJMPLOOP2
ONE:
MOVA,#31H
LOOP2:
MOVX@DPTR,A
INCDPTR
MOVA,R6
DJNZR7,LOOP1
编程实现运算式。
假定a、b、c3个数分别存放于内部RAM的DA、DB、DC单元中,另有平方运算子程序SQR供调用。
MOVSP,38H
MOVA,DA
PUSHACC
ACALLSQR
POPACC
MOVD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机基础 chapter 14单片机基础练习题及答案 14 单片机 基础 练习题 答案