《51单片微型机原理和接口教程》周思跃习题解答.docx
- 文档编号:11452879
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:57
- 大小:90.25KB
《51单片微型机原理和接口教程》周思跃习题解答.docx
《《51单片微型机原理和接口教程》周思跃习题解答.docx》由会员分享,可在线阅读,更多相关《《51单片微型机原理和接口教程》周思跃习题解答.docx(57页珍藏版)》请在冰豆网上搜索。
《51单片微型机原理和接口教程》周思跃习题解答
《51单片微型机原理和接口教程》(周思跃)习题解答
《51单片微型机原理和接口教程》
(周思跃_著)
课后习题答案_化学工业出版社
第一章习题答案
1-1请说明CPU的功能以及CPU是如何执行指令和程序的。
答:
CPU的功能是执行程序和统筹处理计算机系统中各类事务。
CPU执行指令分为3步:
取指令、分析指令、执行指令;计算机程序是由一条条指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的过程,其方式分为串行作业方式和流水线作业方式。
1-2请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。
答:
CPU:
由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件的工作;运算器的作用是进行逻辑运算和算术运算。
存储器:
存储计算机工作时使用的信息,即指令代码和数据代码。
I/O接口电路:
具有数据缓冲、数据隔离及数据转换的功能。
1-3请问对于容量位8K的存储器芯片,它的地址线是多少根?
答:
8K=8192=213,故地址线为13根。
另附:
存储器的数据线由存储器的字长决定,例如一块32K×16(存储器容量显示格式:
存储单元数×存储单元的字长)的存储器,其地址线为15根,数据线为16根。
1-4将十进制数78,134,分别用二进制数、十六进制数和8421BCD吗表示。
答:
(78)D=(1001110)B=(4E)H=(01111000)8421BCD
(134)D=(10000110)B=(86)H=(000100110100)8421BCD
注:
8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省略0。
1-5将下列真值分别转化为用8位和16位二进制数表示的原码、补码和反码。
X=1000100;
[X]8位原=[X]8位反=[X]8位补=01000100;[X]16位原=[X]16位反=[X]16位补=0000000001000100
X=-1000100
[X]8位原=11000100,[X]8位反=10111011,[X]8位补=10111100;
[X]16位原=1000000001000100,[X]16位反=111111*********1,[X]16位补=111111*********0;
X=-0111111
[X]8位原=10111111,[X]8位反=11000000,[X]8位补=11000001;
[X]16位原=1000000000111111,[X]16位反=1111111111000000,[X]16位补=1111111111000001;
1-6将下列补码转化成二进制数的真值。
[X]补=00101100;
X=101100
[X]补=11111111;
X=-1
[X]补=10000000;
X=-10000000
1-7已知下列补码[X]补和[Y]补,分别求[X+Y]补、[X-Y]补。
并判断运算结果是否出现溢出。
[X]补=10011001,[Y]补=00101100;
[-Y]补=11010100,[X+Y]补=[X]补+[Y]补=11000101不溢出;[X-Y]补=[X]补+[-Y]补=[X]补-[Y]补=01101101溢出;
[X]补=11111111,[Y]补=10000000;
[-Y]9位补=010000000,[X+Y]补=[X]补+[Y]补=01111111溢出;[X-Y]补=[X]补+[-Y]补=[X]补-[Y]补=01111111不溢出;
[X]补=00110111,[Y]补=11100000;
[-Y]补=00100000,[X+Y]补=[X]补+[Y]补=00010111不溢出;[X-Y]补=[X]补+[-Y]
2-5特殊功能寄存器和工作寄存器在存放信息方面有和区别?
答:
特殊功能寄存器(SFR)中存放的是一些专用信息,这些信息与下列内容有关:
计算机指令的执行条件及状态标志,定时/计数器的使用控制、中断系统的使用、并行I/O及串行I/O接口的使用。
工作寄存器只是用于暂时存放指令执行过程中一般的被操作数据。
2-6特殊功能寄存器的地址空间如何?
答:
特殊功能寄存器(SFR)的地址为8为二进制编码,地址范围为80H~0FFH,但各特殊功能寄存器的地址并非连续分布的。
指令通过直接寻址的方式才能访问到。
2-751单片机中的位寻址区在哪里?
它们的地址空间如何?
答:
51单片机的位寻址区分布在两个地方。
一部分位于内部数据存储器中字节地址为20H~2FH的16个单元中,这部分包括128个位,位地址空间为00H~7FH;另一部分位于字节地址能被8整除的特殊功能寄存器中,位地址空间为80H~0FFH。
2-8请指出下列位地址所在的内部数据存储器单元的字节地址或SFR名称。
答:
00H内部RAM的20H单元;(20H).0
20H内部RAM的24H单元;(24H).0
0A0HP2;P2.0
0B0HP3;P3.0
64H内部RAM的2CH单元;(2CH).4
E6H累加器ACC;ACC.6。
提示:
1)内部数据存储器内的可寻址位,其位地址(00H~7FH)与所在单元的字节地址(20H~2FH)间的关系如下:
位地址=(字节地址-20H)×8+DX,DX-该位在字节单元中的位置(D0~D7)
位地址÷8,商+20H=字节地址,余数=DX
2)SFR中的可位寻址(位地址80H~0FFH)的寄存器,其最低位的位地址与其字节地址相同。
关系如下:
位地址÷8,商*8=SFR的字节地址,余数=DX,DX-该位在SFR中的位置(D0~D7)
2-9若某51单片机应用系统将F000H~FFFFH地址空间分配给它外部的I/O接口,那么该单片机应用系统最多给外部数据存储器分配多少单元?
地址空间如何?
答:
51单片机的外部I/O接口和外部数据存储器是统一编制的,占用同一个地址空间,地址空间的容量为64KB,地址范围为0000H~FFFFH。
据题意,系统已将F000H~FFFFH地址空间分配给它外部的I/O接口,则只剩下0000H~EFFFH可分配给外部数据存储器,容量为60KB。
2-10在图2-9中的电容C,如果它取值太小,对复位电路有何影响?
答:
51单片机上电复位,需要在RST引脚上保持10ms以上的高电平。
如果C太小,则其充电时间变短,上电后,RST引脚上高电平保持的时间太短,则单片机内部复位将不能完全完成,有些寄存器内容将变得不确定。
2-11上电复位和人工按钮复位后对内部数据存储器具有什么不同的影响?
答:
上电复位后,内部数据存储器中的内容为不确定的状态。
人工按钮复位后,内部数据存储器中的内容不变(因为没有断电)。
2-1251应用系统中,为何要对堆栈指针SP重新设置?
答:
复位后(SP)=07H,则堆栈是从08H开始存放数据的。
而内部数据存储器中00H~1FH单元为工作寄存器区,而20H~2FH单元为位寻址区,在实际的应用系统中,这些区域都可能使用到。
故一般将堆栈设置在地址30H以后的单元中,所以需要对堆栈指针SP重新设置。
2-1351单片机中的I/O接口中,那个接口在作为准双向口时需要外接电阻?
若对某一接口进行读引脚的操作,必须事先对该接口做什么操作?
答:
P0口需外接上拉电阻(因为P0是集电极开路结构)。
若需对某个接口读引脚(即读取外部输入信号的状态),需要对该接口的口锁存器写入1(例如:
若需要读取P1.0、P1.1、P1.2、P1.3的引脚状态时,需要先执行MOVP1,#0FH。
这也是为什么复位后(P0)=(P1)=(P2)=(P3)=0FFH的道理。
)
第三章习题答案
3-1指令的格式是由哪些部分组成的?
每部分的含义是什么?
答:
指令由操作码和操作数组成。
在形式上操作码和操作数都是二进制代码。
操作码用来表示指令的种类和功能,经由控制器中的指令译码器译码后产生控制信号。
操作数是指令的操作对象,表示被操作数据或数据所在的存储单元地址。
3-2什么是寻址方式?
51系列指令系统有哪些寻址方式?
答:
指令中给出操作数的方式叫做寻址方式。
51系列机给出的寻址方式一般有7中:
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址(直接寻址的一个特例――地址指向位单元)。
3-3对于内部数据存储器00H~1FH区域的访问有哪些寻址方式?
对于外部数据存储器的访问有哪些寻址方式?
对于特殊功能寄存器的访问有哪些寻址方式?
答:
对于内部数据存储器00H~1FH区域的访问有直接寻址、寄存器寻址、寄存器间接寻址三种方式。
对于外部数据存储器的访问只有寄存器间接寻址一种方式(以DPTR或R0、R1为指针)。
对于特殊功能寄存器的访问只有直接寻址一种方式。
同时对于内部数据存储器80H~0FFH的128个单元的访问只有寄存器间接寻址一种方式(以R0、R1或SP为指针);借助于两种不同的寻址方式,可以将在地址上重合(80H~0FFH)的SFR和内部RAM高128字节单元的两部分空间加以区分。
3-451系列单片机有哪些标志位?
这些标志位存放在哪里?
答:
51单片机在程序运行时通常需要一下标志位:
Cy,AC,OV,P,RS1,RS0,它们都存放在特殊功能寄存器PSW(程序状态字寄存器)中。
3-5分析下列各指令的操作数,指出它们的寻址方式。
MOVR4,38H;寄存器寻址,直接寻址
ADDA,@R1;寄存器寻址,寄存器间接寻址
MOVCA,@A+DPTR;寄存器寻址,变址寻址(又称基址寄存器加变址寄存器间接寻址)
MOVXA,@DPTR;寄存器寻址,寄存器间接寻址
DECB;直接寻址
SETB24H;位寻址(直接寻址的一种,只是给出的直接地址是位地址)
CJNEA,#100,NEXT;寄存器寻址,立即寻址,相对寻址
ANL30H,#00H;直接寻址,立即寻址
PUSHP1;寄存器间接寻址(指针为SP,只是在堆栈操作指令中省略了),直接寻址
堆栈操作除了用PUSH和POP指令,完全可以用其它指令来完成,举例如下:
PUSHP1
可用下列程序段完成
INCSP
MOVR0,SP
MOV@R0,P1
POPP1
可用下列程序段完成
MOVR0,SP
MOVP1,@R0
DECSP
提示:
上题答案中按操作数先后顺序给出其对应的寻址方式。
3-6下列各指令或指令组执行前有关寄存器和存储器的状态如下表,要求分析各指令或指令组执行后有关寄存器、存储器和标志位的状态。
内部数据存储器和特殊功能寄存器
外部数据存储器
程序存储器
寄存器名
内容
单元地址
内容
单元地址
内容
单元地址
内容
程序计数器内容
B
64H
73H
10H
900BH
12H
1206H
35H
(PC)=1200H
ACC
03H
72H
11H
900AH
83H
1205H
34H
PSW
80H
71H
00H
9009H
D1H
1204H
33H
标号及标号值
DPL
05H
70H
80H
9008H
79H
1203H
32H
NEXT1=0800H
DPH
90H
9007H
0CH
1201H
31H
NEXT2=0900H
SP
71H
36H
F8H
9006H
23H
1200H
30H
NEXT3=1280H
R0
00H
35H
2BH
9005H
13H
LOOP=1148H
R1
36H
34H
36H
9004H
4DH
R2
35H
33H
74H
9003H
2EH
R3
B7H
32H
59H
9002H
7FH
R4
03H
9001H
54H
R5
F6H
26H
66H
9000H
38H
R6
E4H
25H
55H
R7
21H
24H
44H
P0
7CH
P2
90H
提示:
在上表中需注意几点:
(PSW)=80H,即Cy=1,AC=0,RS1=RS0=0(故当前工作寄存器区为0区)。
工作寄存器区为0区时,R0~R7指向内部数据存储器的00H~07H,所以当指令中出现直接地址00H~07H中的某个时,其初始条件即为R0~R7中某个对应的寄存器的值。
另,因为(DPH)=90H,(DPL)=05H,所以(DPTR)=9005H。
标号值实质上是代表标号所在处的指令在程序存储器中的地址,标号往往出现在程序转移指令中,指出转移指令的目标地址。
•MOVR0,#32;(R0)=32=20H
•MOV25H,@R1;(25H)=0F8H
•MOVXA,@DPTR;(A)=13HP=1
•MOVXA,@R0;(A)=38HP=1
•MOVCA,@A+PC;(A)=33HP=0
•MOVA,04H;(A)=03HP=0
•XCHA,34H;(A)=36H(34H)=03H
•XCHDA,@R1;(A)=08H(36H)=0F3H
•PUSHDPL;(SP)=72H(72H)=05H
•POPDPH;(DPH)=00H(SP)=70H
•SUBBA,R1;(A)=0CCHCy=1P=0AC=1OV=0
•ADDA,R6;(A)=0E7HCy=0P=0AC=0OV=0
•ADDCA,36H;(A)=0FCHCy=0P=0AC=0OV=0
•MULAB;(A)=2CH(B)=01H
•INCR0;(R0)=01H
•DECA;(A)=02HP=1
•ADDA,#49H;
DAA;(A)=52HCy=0P=1
•ANLA,R1;(A)=02H(R1)=36HP=1
•ORLA,32H;(A)=5BHP=1
•ORL26H,#35H;(26H)=77HP=0
•XRLA,@R0;(A)=03HP=0
•XRLA,ACC;(A)=0P=0
•XRLA,#0FFH;(A)=0FCHP=0
•CPLA;(A)=0FCHP=0
•RLA;(A)=06HCy=1
•RRCA;(A)=81HCy=1
•MOVC,(25H).2;Cy=1
•MOVF0,C;(PSW)=0A0H
•SETBRS0;(PSW)=88H
•CLRC;(PSW)=0
•ANLC,(24H).0Cy=0
•JZNEXT1;(PC)=1202H
•JCNEXT2;(PC)=0900H
•CJNEA,25H,NEXT3;(PC)=1280HCy=1
•DJNZR7,LOOP;(PC)=1148H(R7)=20H
•LCALL1800H;(PC)=1800H(SP)=73H(72H)=03H(73H)=12H
•RET;(PC)=0080H(SP)=6FH
•ANLC,/32H;Cy=0(32H)=1,提示此处32H为位存储器
•STOP:
JBCP0.3,STOP;(PC)=1200H(P0)=74H
•JNBP0.4,NEXT1;(PC)=1203H
•分析下列程序段的功能。
•MOVA,R3
MOVR4,A
功能:
将R3中的内容送入R4,即(R3)→R4
•MOVA,R5
CPLA
MOVR5,A
功能:
R5中的数据按位取反后送回R5
•MOVA,R4
MOVB,R5
DIVAB
MOVR4,B
MOVR5,A
功能:
R4中的数除以R5中的数,结果商送入R5,余数送入R4
•MOVC,P1.1
ANLC,P1.2
ANLC,/P1.3
MOVP1.6,C
功能:
P1.1P1.2→P1.6
•MOVC,0
ORLC,1
MOVF0,C
MOVC,2
ORLC,3
ANLC,F0
MOVP1.7,C
功能:
((20H).0∨(20H).1)∧((20H).2∨(20H).3)→P1.7
•CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
功能:
R3、R4中的内容左移一位,R4最低位移入0,R4最高位移入R3最低位,R3最高位移出至Cy。
•CLRC
MOVA,R5
RLCA
ADDA,R5
MOVR5,A
功能:
•CLRA
MOVR0,A
MOVR7,A
LOOP:
MOV@R0,A
INCR0
DJNZR7,LOOP
STOP:
SJMPSTOP
功能:
将内部数据存储器00H~0FFH256个单元全部清零。
•PUSHACC
PUSHB
POPACC
POPB
功能:
利用堆栈将ACC与B中的内容互换,即(ACC)(B)
•MOVR0,#30H
XCHDA,@R0
SWAPA
INCR0
XCHDA,@R0
SWAPA
MOV40H,A
功能:
将ACC的低四位送入30H单元低四位,ACC的高四位送入31H的低四位,而原先30H单元的低四位送入40H单元的低四位,原31H单元的低四位送入40H单元的高四位。
举例说明如下,设程序段运行前有(ACC)=12H,(30H)=34H,(31H)=56H;
则程序段运行后有(30H)=32H,(31H)=51H,(ACC)=(40H)=64H;该程序段可用来将单字节BCD转压缩BCD.
3-8指出下列指令中哪些是合法指令,哪些是非法指令。
MOVP1,R4;合法
MOVR2,R4;非法
CLRR3;非法
RLCR5;非法
MOV30H,31H;合法
MOV00H,P;非法
ORL40H,R7;非法
PUSHR6;非法
POPR0;非法
INCDPTR;合法
注:
常见的错误还有类似:
MOVR0,C;ADD30H,31H;MOVA,@R5;DECDPTR等,编程时切记勿错!
3-9按要求编制下列各程序段。
将内部数据存储器30H和31H单元的内容互换。
法一:
MOVA,30H
XCHA,31H
MOV30H,A
法二:
XCHA,30H
XCHA,31H
XCHA,30H
比较法一、法二的优缺点,你认为哪个方法更好?
将寄存器R7的内容向右循环移位一次。
XCHA,R7
RRA
XCHA,R7
将寄存器R3的内容乘以4(结果不超出8为二进制数的范围)。
法一:
MOVA,R3
MOVB,#4
MULAB
MOVR3,A
法二:
XCHA,R3
RLA
RLA
XCHA,R3
将寄存器DPTR的内容减1。
法一:
判断DPL=0否?
如是,DPL减1后,DPH也减1;否则,DPH不变。
XCHA,DPL
JNZNOB
DECDPH
NBO:
XCHA,DPL
DECDPL
法二:
(DPH)(DPL)-1→DPH,DPL(即DPTR)
CLRC
XCHA,DPL
SUBBA,#1
XCHA,DPL
XCHA,DPH
SUBBA,#0
XCHA,DPH
法三:
(DPH)(DPL)+0FFFFH→DPTR
XCHA,DPL
ADDA,#0FFH
XCHA,DPL
XCHA,DPH
ADDCA,#0FFH
XCHA,DPH
比较以上各方法,其中法三利用了-1的补码是0FFFFH的原理,将减法改为了加法。
将寄存器R6的内容压入堆栈(设寄存器工作在3区)
PUSH1EH
将R4,R5寄存器连接起来循环右移一位。
(设R4为高8位,R5为低8位;执行完后R4R5中的内容右移一位,R4的最低位移入R5的最高位,同时R5的最低位移入R4的最高位)
XCHA,R4;将R4中的内容送入ACC,同时将ACC的内容放入R4中暂存。
RRCA;ACC中原先R4的内容右移一位,同时Cy移入最高位,而原先R4的最低位移入Cy位
XCHA,R5;R5中的内容送入ACC,上一步中产生的ACC的内容送入R5暂存
RRCA;ACC中原先R5的内容右移一位,Cy(即原R4的最低位)移入最高位,而原R5的最低位移入Cy位
XCHA,R5;将结果送入R5(R5移位已完成),同时将第三步暂存在R5中的内容取出。
MOVACC.7,C;将Cy位中存放的原R5的最低位送入ACC的最高位(即送入R4的最高位)
XCHA,R4;将结果送入R4,同时取出ACC原来的值
第四章习题答案
4-1用伪指令将下列常数依次定义在1600H为首地址的程序存储器中。
0,1,4,9,16,25,36,49,64,81
答:
ORG1600H
DB0,1,4,9,16,25,36,49,64,81
4-2用伪指令将下列常数依次定义在1700H为首地址的程序存储器中,要求数据类型一致。
0,1,8,27,64,125,216,343,512,729
答:
提示:
因为343,512,729为双字节数据(>255),所以所有数据均应以双字节存入。
ORG1700H
DW0,1,8,27,64,125,216,343,512,729
4-3用伪指令将字节型变量X1、X2定义在内部数据存储器30H、31H单元中,将字节型变量Y1、Y2定义在外部数据存储器2000H、2001H单元中。
答:
X1DATA30H
X2DATA31H
Y1XDATA2000H
Y2XDATA2001H
4-4用伪指令将ASCII码字符串“Beijing,tjjtds!
”定义在1200H为首地址的程序存储器中。
答:
ORG1200H
DB‘Beijing,tjjtds!
’
4-5用伪指令将逻辑变量A1、A2定义在00H、01H位单元中
答:
A1BIT00H
A2BIT01H
4-6编一程序段,将1400H为首地址的外部数据存储器中200个单字节数据转移至1500H为首地址的外部数据存储器中。
MOVDPTR,#1400H;用DRTR指向源数据块单元地址
MOVP2,#
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51单片微型机原理和接口教程 51 单片 微型机 原理 接口 教程 周思跃 习题 解答