单片机原理及接口技术第二版余锡存著课后习题答案Word文件下载.docx
《单片机原理及接口技术第二版余锡存著课后习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术第二版余锡存著课后习题答案Word文件下载.docx(43页珍藏版)》请在冰豆网上搜索。
(1)振荡周期:
也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期。
(2)状态周期:
每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。
(3)机器周期:
一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期在一个机器周期内,CPU可以完成一个独立的操作
(4)指令周期:
它是指CPU完成一条操作所需的全部时间。
每条指令执行时间都是有一个或几个机器周期组成。
MCS-51系统中,有单周期指令、双周期指令和四周期指令。
当单片机的时钟频率为12MHz时,一个机器周期是多少1蚁微秒);
ALE引脚的输出频率是多少2g(微秒)。
第三章
1.MCS-51指令系统按功能分为几类?
具有几种寻址方式?
他们的寻址范围如何?
1按功能分为5类,分别是:
数据传送类、算术操作类、逻辑操作类、控制转移类和位操作类;
2具有7种寻址方式;
3立即寻址,寻址范围是程序存储器;
直接寻址,寻址范围是内部RAM低128字节和高128字节;
寄存器寻址,寻址范围是四组工作寄存器R0〜R7;
寄存器间接寻址,寻址范围是内部RAM的低128和外部RAM低64K可寻址空间;
基址寄存器加变址寄存器间接寻址,寻址范围是程序存储器;
相对寻址,寻址范围是以下一条指令为相对地址的-128〜+127字节范围内;
位寻址,寻址范围是可位寻址空间,包括内部RAM的可寻址位,特殊功能
寄存器中的可寻址位
2.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器
A,R0,和内部RAM中50H、51H单元的内容为和值?
MOV
A,59H
;
(A)=(59H)=50H
R0,A;
(R0)=50H
A,#00;
(A)=00
@R0,A
((R0))=(50H)=00
A,#25H
(A)=25H
51H,A
(51H)=25H
52H,#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指令有何不同?
1MOVCA,@A+DPTR;
寻找的操作数在程序存储器中,地址是:
(A)
+(DPTR);
2MOVXA,@DPTR;
寻找的操作数在外部数据存储器中,地址是:
(DPTR)。
5.AJMP、LJMP、SJMP指令功能上有何不同?
相同之处,都是无条件转移指令。
①AJMPaddr11;
下调指令为基准的2KB范围内的跳转指令。
②LJMPaddr16;
转移的目标地址可以在64KB程序存储器的任何地方。
3SJMPrel;
下调指令为基准的-128B〜+127B范围内的短跳转指令。
6.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别
为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?
PUSH
30H
31H
POP
DPL
DPH
30H,#00H
MOV31H,#0FFH
(61H)
=(30H)=24H
(62H)=
(31H)=10H
(DPL)=
(62H)=10H
(DPH)=
(61H)=24H
(30H)
=00H
31H,#0FFH
(31H)
=0FFH
=00H,(31H)=
中的内容将为何值?
(61H)=24H,(62H)=10H,(30H)
0FFH,(DPTR)=2410H
7.试分析下列程序段,当程序执行后,位地址00H和01H
P1口的8条I/O线为何状态?
CLRC
MOVA,#66H
JCLOOP1
CPLC
SETB01H
LOOP1:
ORLC,ACC.0
JBACC.2,LOOP2
(Cy)=0
A,#66H
(A)=66H=01100110B
JC
LOOP1
因此时(Cy)=0,所以不跳转
CPL
C;
(Cy)=1
SETB
01H;
(01H)=1
ORL
C,ACC.0;
(Cy)=(Cy)V(ACC.O)=1
JBACC.2,LOOP2;
因(ACC.2)=1
LOOP2:
MOVP1,A;
(P1)=01100110B
8.要完成以下的数据传送,应如何用MCS-51指令实现?
⑴R1的内容传送到R0;
⑵片外RAM20H单元的内容送R0;
⑶片外RAM20H单元的内容送片内RAM20H单元;
⑷片外RAM1000H单元的内容送片内RAM20H单元;
⑸
ROM2OOOH
单元的内容送RO;
⑹
单元的内容送片内RAM2OH
单元;
⑺
单元的内容送片外RAM2OH
单元。
⑴R1
的内容传送到
RO;
MOVA,R1
MOVR0,A
MOVXA,@R1
MOVR1,#20H
MOV20H,A
MOVDPTR,#20H
MOVXA,@DPTR
⑸ROM2000H单元的内容送R0;
MOVDPTR,#2000H
CLRA
MOVCA,@A+DPTR
⑹ROM2000H单元的内容送片内RAM20H单元;
⑺ROM2000H单元的内容送片外RAM20H单元。
MOVR0,#20H
MOVX@R0,A
9.分析以下程序每条指令执行的结果:
A,#25H
(A)=25H
R1,#33H
(R1)=33H
40H,#1AH
(40H)=1AH
R0,40H
(R0)=1AH
ADD
A,R1
(A)=25H+33H=58H
ADDC
A,@R0
(A)=58H+(1AH)+(Cy)=58H
A,40H
(A)=58H+1AH+(Cy)=72H
10.设A=83H,R0=17H
,(17H)=34H,执行下列程序后,(A)=?
ANL
A,#17H
(A)=10000011BA00010111B=0000
0011B
ORL
17H,A
(17H)=00110100BV00000011B=0011
0111B
XRL
(A)=00000011B©
00110111=00110100B
A
(A)=11001011B
11.两个4位BCD码数相加,被加数和加数分别存于30H、31H和40H、
41H单元中(次序为千位、百位在低地址中,十位、个位在高地址中),和数放
在50H、51H
、52H中(52H用于存放最高位的进位),试编写加法程序。
解:
ORG00H
30H,#12H;
31H,#34H
J
40H,#56H
41H,#78H
A,31H;
取被加数十个位
A,41H;
相加,(A)=(31H)+(41H)
DA
十进制调整
存十位个位运算结果
A,30H
取被加数千百位
A,40H
相加,(A)=(30H)+(40H)
A;
十进制调整
50H,A
存千位百位运算结果
CLR
清A
A,#0
将进位加到A中
52H,A;
存进位
SJMP
$
12.试编写一程序,查找内部RAM单元的20H〜50H中是否有OAAH这一数据,若有,则将51H单元置为01H,若没有,则使51H单元置0。
ORG00H
MOV30H,#0AAH;
MOVR0,#20H
BIJIAO:
MOVA,@R0
CJNEA,#0AAH,LOOP;
51H,#01H
JIESHU
LOOP:
INC
R0
DJNZ
R1,BIJIAO
51H,#00H
JIESHU:
第四章
个程序实现X*10+Y
1、若有两个符号数X,丫分别存放在内部存储器50H、51H单元中,试编写一
1
ORG
00H
0000
7850
2
MOVR0,#50H
0002
E6
3
0003
75F00A
4
MOVB,#0AH
0006
A4
5
MUL
AB
0007
08
6
INC
0008
26
7
0009
8
000A
A6F0
9
@R0,B
000C
10
000D
F6
11
,结果存入52H、53H中
的数,试编写程序将它们转换成BCD码,并以压缩BCD形式存放在以2000H
为首地址的外部RAM
中。
903000
MOVDPTR,#3000H
原始数据首地址
7807
R0,#07;
循环次数
0005
7930
R1,#30H;
转换结果暂存区指
针
E0
CH1:
550F
A,#00001111B
C4
SWAPA
000B
F5F0
B,A
A3
DPTR
000E
2、在以3000H为首地址的外部
RAM中,存放了14个以ASCII码表示的0~9
000F550F
0011
45F0
12
ORLA,B
0013
F7
13
@R1,A
0014
09
14
R1
0015
15
0016
D8EF
16
R0,CH1
0018
902000
17
DPTR,#2000H;
转换结果存储
11ANLA,#00001111B
001B
7A07
18
R2,#07H
001D
19
R1,#30H
001F
E7
20CH2:
MOVA,@R1
3、采样的5个值分别存放在
R0、R1、
R2、R3、
并存放在
R2中。
区
R4
结果个数
,求出它们的中间值,
>
0000
7805
MOVR0,#5
7906
MOVR1,#6
0004
MOVR2,#7
7B08
MOVR3,#8
7C09
MOVR4,#9
E4
CLRA;
C3
CLRC;
E8
MOVA,R0;
29
ADDA,R1
2A
ADDA,R2;
000F
2B
ADDA,R3
0010
2C
ADDA,R4
75F005
MOVB,#5
84
DIVA
FA
MOVR2,A
18END
4、以BUF1为起始地址的外部数据存储区中存放着16个单字节的无符号数,求其平均值并送入R2中。
BUF1
EQU#1000H
901000
DPTRBUF1
AA00
R2,0
7816
MOVR0,#16H
SUM:
MOVXA,@DPTR
A,R2
R2,A
D8FA
R0,SUM
75F010
B,#10H
DIV
14END
5、试编写程序,将内部RAM单元中DATA1开始的20个单字节数依次与
DATA2单元为起始地址的20个单字节数据进行交换。
1DATA1EQU#30H
DATA2EQU#50H
3LENEQU#164ORG0H
00007830
5MOVR0,DATA1
7A10
R2,LEN
EXC:
MOVA,@R0
C7
XCH
A,@R1
DAF9
R2,EXC
END
00027950
6MOVR1,DATA2
6、某场歌手赛,共有
10个评委,试编写一程序,输入
10个评分,去掉最高分
和最低分,求平均分(均为BCD码)
ORG0H
NEQU#5
BLOCKEQU#30H
ISELSORT:
MOVR7,N
DECR7
MOVR1,BLOCK
ISST1:
MOVR0,BLOCK
MOVA,R7
R6,A
ISST2:
INCR1
C
SUBB
A,B
JCISST3
B,@R1
ISST3:
DJNZR6,ISST2
B,R2
@R1,B
R7,ISST1
R0,BLOCK
@R0,#0;
去掉最低分
A,BLOCK
A,#9
MOV@R0,#0;
去掉最高分
AD:
INCRO
MOVR1,#8
MOVB,#0
ADL:
ADDA,@R0
DAA
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:
;
{
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:
A,30H
A,#1
30H,A
A,31H
31H,A
A,32H
32H,A
LJMP
_DIV_LOOP
DIV_END:
A,R3
A,R4
R3,30H
R4,31H
7、编写将一个十六进制数转换为十进制数的子程序
000078FE2MOVR0,#FEH
HEXBCD:
75F064
B,#100
740A
A,#10
C5F0
XCHA,B
0012
A7F0
15RET
8、在内部RAM的BLOCK开始的单元中有一无符号数据块,数据长度为LEN试编程求其中最大的数并存入