《单片机原理及接口技术》第二版余锡存著 课后习题答案.docx
《《单片机原理及接口技术》第二版余锡存著 课后习题答案.docx》由会员分享,可在线阅读,更多相关《《单片机原理及接口技术》第二版余锡存著 课后习题答案.docx(44页珍藏版)》请在冰豆网上搜索。
![《单片机原理及接口技术》第二版余锡存著 课后习题答案.docx](https://file1.bdocx.com/fileroot1/2023-4/16/97cb6f99-39b8-4fbd-81e8-495e3acfa439/97cb6f99-39b8-4fbd-81e8-495e3acfa4391.gif)
《单片机原理及接口技术》第二版余锡存著课后习题答案
第二章
1.89C51、87C51、80C51和80C31单片机的主要区别在那里?
答:
相同之处是:
制造工艺都为CHMOS,都有128字节片内RAM、两个定时/计数器、4个8位I/O并行口,一个串行口和5个中断源。
主要区别:
①89C51片内4K字节FLASHROM;
②87C51片内4K字节EPROM;
③80C51片内4K字节掩膜ROM;
④80C31片内无程序存储器。
2.MCS-51单片机引脚有多少I/O线?
它们和单片机对外的地址总线和数据总线有何关系?
答:
4个8位I/O并行口,一个串行口;
其中P0口为外接程存和数存的地址低8位和数据总线的时分复用接口;
其中P2口为外接程存和数存的地址高8位总线接口;
其中P1口为真正的用户口线;
其中P3口有第2功能;
以上4个口线在没有专用功能时,也可以做通用I/O口线用。
3.简述8031片内RAM区地址空间的分配特点。
答:
MCS-51单片机片内RAM为256字节,地址范围为00H~FFH,分为两大部分:
低128字节(00H~7FH)为真正的RAM区;高128字节(80H~FFH)为特殊功能寄存器区SFR。
在低128字节RAM中,00H~1FH共32单元是4个通用工作寄存器区。
每一个区有8个通用寄存器R0~R7。
4.MCS-51单片机由哪几个部分组成。
答:
①一个8位CPU;
②4KBROMorEPROM(8031无ROM);
③128字节RAM数据存储器;
④21个特殊功能寄存器SFR;
⑤4个8位并行I/O口,其中P0、P2为地址/数据线,可寻址64KB程序存储器和64KB数据存储器;
⑥一个可编程全双工串行口;
⑦具有5个中断源,两个优先级,嵌套中断结构;
⑧两个16位定时器/计数器;
⑨一个片内振荡器及时钟电路。
7.
8.
4.
5.
6.
5.MCS-51单片机的
信号各自的功能是什么?
答:
都是控制总线
①
:
访问内部程序存储器的控制信号/编程电压输入端。
时,CPU从片内读取指令,
CPU从片外读取指令。
②
:
地址锁存允许/编程信号线。
③
:
外部程序存储器读选通信号。
④
:
复位输入信号/掉电保护后备电源引脚。
6.MCS-51单片机如何实现工作寄存器组的选择?
RS1(PSW.4)、RS0(PSW.3)为工作寄存器组的选择位;
①取值为00时选择第0组工作寄存器,片内RAM地址是00H~07H,名称为R0~R7;
②取值为01时选择第1组工作寄存器,片内RAM地址是08H~0FH,名称为R0~R7;
③取值为10时选择第2组工作寄存器,片内RAM地址是10H~17H,名称为R0~R7;
④取值为11时选择第3组工作寄存器,片内RAM地址是18H~1FH,名称为R0~R7。
7.什么是时钟周期、机器周期、指令周期?
当单片机的时钟频率为12MHz时,一个机器周期是多少?
ALE引脚的输出频率是多少?
(1)振荡周期:
也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期。
(2)状态周期:
每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。
(3)机器周期:
一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。
在一个机器周期内,CPU可以完成一个独立的操作。
(4)指令周期:
它是指CPU完成一条操作所需的全部时间。
每条指令执行时间都是有一个或几个机器周期组成。
MCS-51系统中,有单周期指令、双周期指令和四周期指令。
当单片机的时钟频率为12MHz时,一个机器周期是多少1μs(微秒);ALE引脚的输出频率是多少2μs(微秒)。
第三章
1.MCS-51指令系统按功能分为几类?
具有几种寻址方式?
他们的寻址范围如何?
答:
①按功能分为5类,分别是:
数据传送类、算术操作类、逻辑操作类、控制转移类和位操作类;
②具有7种寻址方式;
③立即寻址,寻址范围是程序存储器;
直接寻址,寻址范围是内部RAM低128字节和高128字节;
寄存器寻址,寻址范围是四组工作寄存器R0~R7;
寄存器间接寻址,寻址范围是内部RAM的低128和外部RAM低64K可寻址空间;
基址寄存器加变址寄存器间接寻址,寻址范围是程序存储器;
相对寻址,寻址范围是以下一条指令为相对地址的-128~+127字节范围内;
位寻址,寻址范围是可位寻址空间,包括内部RAM的可寻址位,特殊功能寄存器中的可寻址位。
2.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0,和内部RAM中50H、51H单元的内容为和值?
答:
MOVA,59H;(A)=(59H)=50H
MOVR0,A;(R0)=50H
MOVA,#00;(A)=00
MOV@R0,A;((R0))=(50H)=00
MOVA,#25H;(A)=25H
MOV51H,A;(51H)=25H
MOV52H,#70H;(52H)=70H
执行下列程序段后:
(A)=25H,(R0)=50H,(50H)=00、(51H)=25H
3.PSW中Cy与OV有何不同?
下列程序段执行后(Cy)=?
(OV)=?
。
MOVA,#56H
ADDA,#74H
答:
Cy—进位、借位标志位;
OV—溢出标志位。
MOVA,#56H;(A)=56H=01010110B
ADDA,#74H;(A)=56H+74H=0CAH=11001010B,
程序执行后:
(Cy)=0(OV)=1
4.MOVCA,@A+DPTR与MOVXA,@DPTR指令有何不同?
答:
①MOVCA,@A+DPTR;寻找的操作数在程序存储器中,地址是:
(A)+(DPTR);
②MOVXA,@DPTR;寻找的操作数在外部数据存储器中,地址是:
(DPTR)。
5.AJMP、LJMP、SJMP指令功能上有何不同?
答:
相同之处,都是无条件转移指令。
①AJMPaddr11;下调指令为基准的2KB范围内的跳转指令。
②LJMPaddr16;转移的目标地址可以在64KB程序存储器的任何地方。
③SJMPrel;下调指令为基准的-128B~+127B范围内的短跳转指令。
6.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?
PUSH30H
PUSH31H
POPDPL
POPDPH
MOV30H,#00H
MOV31H,#0FFH
答:
PUSH30H;(61H)=(30H)=24H
PUSH31H;(62H)=(31H)=10H
POPDPL;(DPL)=(62H)=10H
POPDPH;(DPH)=(61H)=24H
MOV30H,#00H;(30H)=00H
MOV31H,#0FFH;(31H)=0FFH
程序执行后:
(61H)=24H,(62H)=10H,(30H)=00H,(31H)=0FFH,(DPTR)=2410H
7.试分析下列程序段,当程序执行后,位地址00H和01H中的内容将为何值?
P1口的8条I/O线为何状态?
CLRC
MOVA,#66H
JCLOOP1
CPLC
SETB01H
LOOP1:
ORLC,ACC.0
JBACC.2,LOOP2
LOOP2:
MOVP1,A
答:
CLRC;(Cy)=0
MOVA,#66H;(A)=66H=01100110B
JCLOOP1;因此时(Cy)=0,所以不跳转
CPLC;(Cy)=1
SETB01H;(01H)=1
LOOP1:
ORLC,ACC.0;(Cy)=(Cy)∨(ACC.0)=1
JBACC.2,LOOP2;因(ACC.2)=1
LOOP2:
MOVP1,A;(P1)=01100110B
8.要完成以下的数据传送,应如何用MCS-51指令实现?
⑴R1的内容传送到R0;
⑵片外RAM20H单元的内容送R0;
⑶片外RAM20H单元的内容送片内RAM20H单元;
⑷片外RAM1000H单元的内容送片内RAM20H单元;
⑸ROM2000H单元的内容送R0;
⑹ROM2000H单元的内容送片内RAM20H单元;
⑺ROM2000H单元的内容送片外RAM20H单元。
答:
⑴R1的内容传送到R0;
MOVA,R1
MOVR0,A
⑵片外RAM20H单元的内容送R0;
MOVR1,#20H
MOVXA,@R1
MOVR0,A
⑶片外RAM20H单元的内容送片内RAM20H单元;
MOVR1,#20H
MOVXA,@R1
MOV20H,A
⑷片外RAM1000H单元的内容送片内RAM20H单元;
MOVDPTR,#20H
MOVXA,@DPTR
MOV20H,A
⑸ROM2000H单元的内容送R0;
MOVDPTR,#2000H
CLRA
MOVCA,@A+DPTR
MOVR0,A
⑹ROM2000H单元的内容送片内RAM20H单元;
MOVDPTR,#2000H
CLRA
MOVCA,@A+DPTR
MOV20H,A
⑺ROM2000H单元的内容送片外RAM20H单元。
MOVDPTR,#2000H
CLRA
MOVCA,@A+DPTR
MOVR0,#20H
MOVX@R0,A
9.分析以下程序每条指令执行的结果:
MOVA,#25H;(A)=25H
MOVR1,#33H;(R1)=33H
MOV40H,#1AH;(40H)=1AH
MOVR0,40H;(R0)=1AH
ADDA,R1;(A)=25H+33H=58H
ADDCA,@R0;(A)=58H+(1AH)+(Cy)=58H
ADDCA,40H;(A)=58H+1AH+(Cy)=72H
10.设A=83H,R0=17H,(17H)=34H,执行下列程序后,(A)=?
ANLA,#17H;(A)=10000011B∧00010111B=00000011B
ORL17H,A;(17H)=00110100B∨00000011B=00110111B
XRLA,@R0;(A)=00000011B⊕00110111=00110100B
CPLA;(A)=11001011B
11.两个4位BCD码数相加,被加数和加数分别存于30H、31H和40H、41H单元中(次序为千位、百位在低地址中,十位、个位在高地址中),和数放在50H、51H、52H中(52H用于存放最高位的进位),试编写加法程序。
解:
ORG00H
MOV30H,#12H;
MOV31H,#34H;
MOV40H,#56H;
MOV41H,#78H;
MOVA,31H;取被加数十个位
ADDA,41H;相加,(A)=(31H)+(41H)
DAA;十进制调整
MOV51H,A;存十位个位运算结果
MOVA,30H;取被加数千百位
ADDCA,40H;相加,(A)=(30H)+(40H)
DAA;十进制调整
MOV50H,A;存千位百位运算结果
CLRA;清A
ADDCA,#0;将进位加到A中
MOV52H,A;存进位
SJMP$
12.试编写一程序,查找内部RAM单元的20H~50H中是否有0AAH这一数据,若有,则将51H单元置为01H,若没有,则使51H单元置0。
解:
ORG00H
MOV30H,#0AAH;
MOVR1,#31H;
MOVR0,#20H;
BIJIAO:
MOVA,@R0
CJNEA,#0AAH,LOOP;
MOV51H,#01H
SJMPJIESHU
LOOP:
INCR0
DJNZR1,BIJIAO
MOV51H,#00H
JIESHU:
SJMP$
第四章
1、若有两个符号数X,Y分别存放在内部存储器50H、51H单元中,试编写一个程序实现X*10+Y,结果存入52H、53H中。
1ORG00H
000078502MOVR0,#50H
0002E63MOVA,@R0
000375F00A4MOVB,#0AH
0006A45MULAB
0007086INCR0
0008267ADDA,@R0
0009088INCR0
000AA6F09MOV@R0,B
000C0810INCR0
000DF611MOV@R0,A
12END
2、在以3000H为首地址的外部RAM中,存放了14个以ASCII码表示的0~9的数,试编写程序将它们转换成BCD码,并以压缩BCD形式存放在以2000H为首地址的外部RAM中。
1ORG00H
00009030002MOVDPTR,#3000H;原始数据首地址
000378073MOVR0,#07;循环次数
000579304MOVR1,#30H;转换结果暂存区指针
0007E05CH1:
MOVXA,@DPTR
0008550F6ANLA,#00001111B
000AC47SWAPA
000BF5F08MOVB,A
000DA39INCDPTR
000EE010MOVXA,@DPTR
000F550F11ANLA,#00001111B
001145F012ORLA,B
0013F713MOV@R1,A
00140914INCR1
0015A315INCDPTR
0016D8EF16DJNZR0,CH1
001890200017MOVDPTR,#2000H;转换结果存储区
001B7A0718MOVR2,#07H;结果个数
001D793019MOVR1,#30H
001FE720CH2:
MOVA,@R1;
3、采样的5个值分别存放在R0、R1、R2、R3、R4中,求出它们的中间值,并存放在R2中。
1ORG00H
>000078052MOVR0,#5
000279063MOVR1,#6
00047A074MOVR2,#7
00067B085MOVR3,#8
00087C096MOVR4,#9
000AE47CLRA;
000BC38CLRC;
000CE89MOVA,R0;
000D2910ADDA,R1;
000E2A11ADDA,R2;
000F2B12ADDA,R3
00102C13ADDA,R4
001175F00514MOVB,#5
00148415DIVAB
0015FA16MOVR2,A
001617END
18END
4、以BUF1为起始地址的外部数据存储区中存放着16个单字节的无符号数,求其平均值并送入R2中。
1ORG00H
2BUF1EQU#1000H
00009010003MOVDPTRBUF1
0003AA004MOVR2,0
000578165MOVR0,#16H
0007E06SUM:
MOVXA,@DPTR
00082A7ADDA,R2
0009FA8MOVR2,A
000AA39INCDPTR
000BD8FA10DJNZR0,SUM
000D75F01011MOVB,#10H
00108412DIVAB
0011FA13MOVR2,A
14END
5、试编写程序,将内部RAM单元中DATA1开始的20个单字节数依次与DATA2单元为起始地址的20个单字节数据进行交换。
>1DATA1EQU#30H
2DATA2EQU#50H
3LENEQU#16
4ORG0H
000078305MOVR0,DATA1
000279506MOVR1,DATA2
00047A107MOVR2,LEN
0006E68EXC:
MOVA,@R0
0007C79XCHA,@R1
0008F610MOV@R0,A
00090811INCR0
000A0912INCR1
000BDAF913DJNZR2,EXC
14END
6、某场歌手赛,共有10个评委,试编写一程序,输入10个评分,去掉最高分和最低分,求平均分(均为BCD码)。
ORG0H
NEQU#5
BLOCKEQU#30H
ISELSORT:
MOVR7,N
DECR7
MOVR1,BLOCK
ISST1:
MOVR0,BLOCK
MOVA,R7
MOVR6,A
MOVA,@R0
MOVB,A
ISST2:
INCR1
MOVA,@R1
CLRC
SUBBA,B
JCISST3
MOVA,@R1
MOVR2,A
MOVB,@R1
ISST3:
DJNZR6,ISST2
MOVA,B
XCHA,@R1
MOVB,R2
MOV@R1,B
MOV@R1,A
DJNZR7,ISST1
MOVR0,BLOCK
MOV@R0,#0;去掉最低分
MOVA,BLOCK
ADDA,#9
MOVR0,A
MOV@R0,#0;去掉最高分
AD:
MOVR0,BLOCK
INCRO
MOVR1,#8
CLRA
CLRC
MOVB,#0
ADL:
ADDA,@R0
DAA
MOVR2,A
ADDCA,#0
MOVB,A
MOVA,R2
DJNZR1,ADL
MOVR5,0
MOVR4,B
MOVR3,A
MOVR2,#0
MOVR1,#8
R5R4R3/R2R1=R4R3
MOVR1,#00H
MOVR2,#0FH
MOVR3,#04H
MOVR4,#05H
MOVR5,#06H
LCALL_DIV
AJMP$
_DIV:
;{
CLRC
MOV30H,#0
MOV31H,#0
MOV32H,#0
_DIV_LOOP:
CLRC
MOVA,R3
SUBBA,R1
MOVR3,A
MOVA,R4
SUBBA,R2
MOVR4,A
MOVA,R5
SUBBA,#0
MOVR5,A
JC_DIV_END
_INC_SHANG:
CLRC
MOVA,30H
ADDCA,#1
MOV30H,A
MOVA,31H
ADDCA,#0
MOV31H,A
MOVA,32H
ADDCA,#0
MOV32H,A
LJMP_DIV_LOOP
_DIV_END:
CLRC
MOVA,R1
ADDCA,R3
MOVA,R2
ADDCA,R4
MOVR3,30H
MOVR4,31H
END
7、编写将一个十六进制数转换为十进制数的子程序。
>000078FE2MOVR0,#FEH
000279303MOVR1,#30H
0004E84HEXBCD:
MOVA,R0
000575F0645MOVB,#100
0008846DIVAB
0009F77MOV@R1,A
000A740A8MOVA,#10
000CC5F09XCHA,B
000E8410DIVAB
000F0911INCR1
0010F712MOV@R1,A
00110913INCR1
0012A7F014MOV@R1,B
15RET
8、在内部RAM的BLOCK开始的单元中有一无符号数据块,数据长度为LEN。
试编程求其中最大的数并存入MAX中。
MCS51
1ORG0H
2LENEQU#10;数据块长度
3MAXEQU#40H
000078304MOVR0,#30H;BLOCK首地址
0002790A5MOVR1,LEN
0004196DECR1;循环次数
0005C37CLRC
0006E68LOOP:
MOVA,@R0
0007089INCR0
00089610SUBBA,@R0
0009400211JCEXCHANG
000B800212SJMPNEXT
000D86F013EXCHANG:
MOVB,@R0
000FC314NEXT:
CLRC
0010D9F415DJNZR1,LOOP
001285F04016MOV40H,B;MAX单元17END
9、试编程将内部RAM中41H~43H单元中的数左移4位,移