单片机原理与运用 第三章答案.docx
- 文档编号:4139217
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:21
- 大小:111.95KB
单片机原理与运用 第三章答案.docx
《单片机原理与运用 第三章答案.docx》由会员分享,可在线阅读,更多相关《单片机原理与运用 第三章答案.docx(21页珍藏版)》请在冰豆网上搜索。
单片机原理与运用第三章答案
50H=00H51H=25H
1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?
MOV
A,59H
MOV
R0,A
MOV
A,#00H
MOV
@R0,A
MOV
A,#25H
MOV
51H,A
MOV
52H,#70H
MOV
A,59H
;A=50H
MOV
R0,A
;RO=50H
MOV
A,#00H
;A=00H
MOV
@R0,A
;50H=00H
MOV
A,#25H
;A=25H
MOV
51H,A
;51H=25H
MOV
52H,#70H
;52H=70H
解:
所以:
A=25HR0=50H
2.请选用合适的指令对P0口内容做修改(例如使P0.0~P0.3不变,P0.4~P0.7为
0)。
MOV
A,P0
ANL
A,0fh
Mov
P0,A
解:
3.
试问外部数据存储器和程序存储器可以用哪些指令来实现?
举例说明。
@DPTR,A
MOVX
DPTR,#0100H
MOV
@DPTR,A
A,@DPTR
MOVX
DPTR,#0200H
MOV
A,@DPTR
A,@Ri
MOVX
A,@R0
@Ri,A
MOVX
@RI,A
解:
访问外部数据存储器指令有:
MOVX
MOVX
MOVX
MOVX
访问程序存储器指令有:
MOVXA,@A+PC
MOVXA,@A+DPTR
4.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为
24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?
PUSH
30H
PUSH
31H
POP
DPL
POP
DPH
MOV
30H,
#00H
MOV
31H,
#0FFH
解:
PUSH
30H
;61H=24H
PUSH
31H
;62=10H
POP
DPL
;DPL=10H
POP
DPH
;DPH=24H
MOV
30H,
#00H
;30H=00H
MOV
31H,
#0FFH
;31H=0FFH
SP=62H
SP=60H
5.设(A)=40H,
(R1)=23H(40H)=05H执行下列两条指令后,累加器A和R1以
XCH
A,
R1
XCHD
A,
@R1
XCH
A,
R1
;A=23H
R1=40H
XCHD
A,
@R1
;A=25H
40H=03H
及内部RAM中40H单元的内容各位何值?
解:
6.两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(次序为千位、百位在低地址中),和数存在54H,55H和56H中(56H用来
存放最高位的进位,
试编写加法程序)
解:
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
A,53H
ADD
A,51H
DA
A
MOV
55H,A
MOV
A,52H
ADDC
A,50H
DA
A
MOV
56H,C
SJMP
$
END
7.设(A)=01010101B,(R5)=10101010B,分别写出执行ANLA,R5;ORLA,R5:
XRLA,R5指令后结果。
8.设指令SJMPrel=7EI并假设该指令存放在2114H和2115H单元中。
当该指令执
行后,程序将跳转到何地址?
解:
2116H+60H=2176H
9.简述转移指令AJMPaddril,SJMPrel,LJMPaddr16及JMP@A+DRTF的应用场合。
解:
AJMPaddr11为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。
SJMPrel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量加到PC上,并计算出转向目标地址。
转向的目标地址可以在这条指令前128字节到后127字节之间
LJMPaddr16执行这条指令时把指令的第二字节和第三字节分别装入PC的高位和地位字节中无条件地转向指定地址。
转移目标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。
JMP@A+DRT脂令的功能是把累加器中8位无符号数与数据指针DRTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转。
10.试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?
P1口的8条I/O线为何状态?
CLR
C
MOV
A,#66H
JC
LOOP1
CPL
C
SETB
01H
LOOP:
ORL
C,ACC.0
JB
ACC.2,LOOP2
CLR
00H
LOOP2:
MOV
P1,A
解:
CLR
C
;CY=0
MOV
A,#66H
;A=66H
JC
LOOP1
CPL
C
;CY=1
SETB
01H
;20H.1=1
LOOP:
ORL
C,ACC.0
;CY=1
JB
ACC.2,LOOP2;
CLR
00H
LOOP2:
MOV
P1,A;
P1=01100
SJMP
$
20H.0=0
20H.1=1P1=66H
11.的特查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序点。
MOV78H,80H
MOV78H,#80H
解:
直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数
传送到直接地址单元是第一个操作数在前,次序正好相反。
12.手工汇编下列程序段
AAA
EQU
851AH
QQQ
MOV
A,35H
CLR
C
SUBB
A,#0AH
JC
QQ16
MOV
A,36H
SUBB
A,#0AH
JC
QQ15
AJMP
AAA
QQ15:
MOV
35H,#00H
QQ16:
JNB
02H,QQ17
MOV
R6,39H
DEC
R6
SJMP
QQ18
QQ17:
MOV
R6,39H
INC
39H
QQ18:
CLR
05H
LJMP
8500H
END
13.若有两个无符号数
序实现x*10+y,
x,y分别存放于内部存储器50H,51H单元中,试编写一个程结果存入52H,53H两个单元中。
解:
ORG
SJMP
ORG
0000H
START
0030H
START:
MOV
1EH,#51H
;正数存放首地址51H存于1EH单元
MOV
1FH,#71H
;负数存放首地址71H存于1EH单元
MOV
R0,#20H
;建立取数(源操作数)的地址指针
MOV
R2,#30
;预置数据长度
MOV
50H,#00H
;正数个数统计单元清零
MOV
70H,#00H
;负数个数统计单元清零
LOOP:
MOV
A,@R0
;取数
JB
ACC.7,NEG
;是负数转NEG处理
POST:
MOV
R1,1EH
;是正数,将暂存的地址送R1(间址寄存器)
MOV
@R1,A
;将正数入存
INC
50H
;正数个数加1
20H单元开始,有30个数据。
试编一个程序,把其中的正数,
50H和
14从内部存储器
负数分别送51H和71H开始的存储单元,并分别记下正数负数的个数送70H单元。
INC
1EH
;正数暂存地址加1修正
LOOP1:
INC
R0
;取数地址加1修正
DJNZ
R2,LOOP
;计数长度减1,不等于零,继续循环统计
SJMP
$
;结束
NEG:
MOV
R1,1FH
;是负数,将暂存的地址送R1(间址寄存器)
MOV
@R1,A
;将正数入存
INC
70H
;负数个数加1
INC
1FH
;负数暂存地址加1修正
SJMP
LOOP1
;转取数地址修正
15内部存储单元奇检验。
40H中有一个ASCI码字符,试编一程序,给该数的最高位加上
解:
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
A,40H
;取数给A
CLR
ACC.7
;A最高位(奇偶校验位)清零
JB
P,LOOP
;40H中的ASCII码原来就是奇数个1(最高位给零)
SETB
ACC.7
;40H中的ACSI码原来是偶数个1,最高位置1
LOOP:
MOV
40H,A
;入存
SJMP
$
;结束
END
16.编写一段程序,后送回原单元。
将存放在自DATA单元开始的一个四字节数(高位在前)取补
解:
若DATA在内部数据存储器中(假如存放在30H起始的4个单元中);采用
求反加1的算法;
ORG
000H
SJMP
START
ORG
0030H
START:
SETB
C
;置进位位为1
MOV
R2,#04H
;预置计数长度
MOV
R0,#DATA1+3
;取数指针指向低字节的地址
LOOP:
MOV
A,@R0
;取数
CPL
A
;求反
ADDC
A,#00H
;加进位
MOV
@R0,A
;入存
DEC
R0
;地址指针修正
DJNZ
R2,LOOP
;4字节未处理完,继续循环
SJMP
$
;结束
DATA1
EQU30H;
END
17.以BUF1为起始地址的外存储区中,存放有16个单字节无符号二进制数,是编一程序,求其平均值并送BUF2单元。
解:
设R2、R3存放和,将其除以16(R2、R3联合左移4位)即为平均置值(单字节存放)
MOV
R4,#10H
;预置计数长度
LOOP:
MOVX
A,@DPTR
;从外部数据存储器取数
ADD
A,R3
MOV
R3,A
MOV
A,R2;
ADDC
A,#00H;
MOV
R2,A
;累加
INC
DPTR
;地址指针修正
DJNZ
R4,LOOP
;16字节未累加完,继续循环累加
MOV
R4,#04H
;R2、R3联合移位4次(除以16)
LOOP1:
CLR
C
MOV
A,R2
RRC
A
MOV
R3,A
DJNZ
R4,LOOP1
;平均值存放于R3中
SJMP
$
;结束
DATA1
EQU1000H;
END
18.在DATA1单元中有一个带符号8位二位进制数X。
编一程序,按以下关系计算y值,送DATA2单元。
y=x+5,x>0
y=x,x=0
y=x-5,x<0
解:
设DATA1DATA2为内部数据存储器的二个单元(假设为30H、31H)且y
的值单字节不会产生溢除出
ORG
000H
SJMP
START
ORG
0030H
START:
MOV
A,30H
;取数X给A
JZ
ZERO
;若x=0,则丫=0,转入存
JB
ACC.7,NEG
;若XV0,则转X-5
POZI:
ADD
A,#05H
;若X>0,则X=5,入存
SJMP
ZERO;
NEG:
CLR
C;
SUBB
A,#05H;
ZERO:
MOV
31H,A
;结果入存
SJMP
$
END
19.设内部RAM中30H和31H单元中有两个带符号数,求出其中的大数存放在32H单元中。
解:
若两数同号,则值大的数大;两数异号,正数值大
ORG
000H
SJMP
START
ORG
0030H
START:
MOV
A,30H
XRL
A,31H
;两数异或
JB
ACC.7,YIHAO
;两数异号
TONGHAO:
CLR
C
;两数同号
MOV
A,30H
SUBB
A,31H
JC
LOOP1-2
LOOP0:
MOV
A,30H
;同号被减数大,
值大
LOOED:
MOV
32H,A
SJMP
$
LOOP1:
MOV
A,31H
;异号被减数大,
值小
SJMP
ED;
YIHAO:
MOV
A,30H
;异号,哪个正,
其值大
JNB
ACC.7,LOOP0
SJMP
LOOP1
END
20利用逻辑控制的方法,设计一个主程序,在第1,3,5,6次调出SB1子程序,第2,4,7,8次调用SB2程序。
解:
ORG
000H
SJMP
TEST
ORG
0030H
TEST:
MOV
R2,#08H
MOV
A,#1010
LOOP:
RLC
A
JC
LOOP1
LCALL
SB1
SJMP
RELT
LOOP1:
LCALL
SB2
SJMP
END
21将DATA单元存放的以ASCI码表示的16进制数转换成十进制数存放于DATA+1单元。
解:
先将DATA的ASCI码转换成十六进制的数,再转换成十进制数。
数字的ASCII码转成十六进制数(即为十进制数)采用减30H
可采用对D6的检测D6=1为字母的ASCI码,
字母的ASCII码转成十六进制数采用减37H,十六进制再转十进制可采用先减0AH,再加10H;这样-37H-0AH+10H=-31H可采用直接减31H。
反之为数字的ASCII码。
ORG
000H
SJMP
TEST
ORG
0030H
TEST:
MOV
R0,#DATA1
MOV
A,@R0
;将DATA1的数给A
CLR
C;
LOOP:
JB
ACC.6,LOOP1
;是字母,转LOOP1
SUBB
A,#30H
;是数字减30H
ED:
MOV
DATA+1,A
;入存
SJMP
$
;结束
LOOP1:
SUBB
A,#31H
;是字母减31H
SJMP
ED;
数字与字母的ASCII的区别,
DATA1EQU30H
END
22.编一个将十六进制数转换成十进制数的子程序。
ORG
000H
SJMP
TEST
ORG
0030H
TEST:
MOV
DPTR,#TAB;建立表头地址
MOV
A,30H
ANL
A,#0F0H
SWAP
A
;高半字节分离
ADD
A,0E0H
;高半字节数乘2
MOV
B,A
;暂存
MOVC
Kn/^\/
A,@A+DPTR;
怖匚砧甘aUr'=t±r左
MOV
R3,A
;取转换后的高半字节存
INC
DPTR;
MOV
A,B;
MOVC
A,@A+DPTR;
MOV
R4,A
;取转换后的低半字节存
MOV
A,30H;
ANL
A,#0FH;
ADD
A,R4;
DA
A;
设转换后的数存放在R3(高)、
R3
R4
解:
一个单字节的十六进制数转成十进制数一般考虑用二字节BCD码来存放。
R4(低)中。
RET;
TAB:
DB00H,00H,00H,16H,00H,32H,00H,48H,00H,64H
DB00H,80H,00H,96H,01H,12H,01H,28H,01H,44H
DB01H,60H,01H,76H,01H,92H,02H,08H,02H,24H
DB02H,40H,02H,40H,02H,56H
END
23.编一程序,将存储区DATA1单元开始的20个单字节数据依次与DATA2单元为起始地址的20个单字节数据进行交换。
解:
设DATA1DATA2分别为内部RAM30H和50H单元。
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
R0,#30H
;建立源地址指针
MOV
R1,#50H
;建立目标地址指针
MOV
R6,#20
;置计数长度
LOOP:
MOV
A,@R0
;取源地址数据
XCH
A,@R1
MOV
@R0,A
;源地址数据与目标
INC
R0
;源地址指针修正
DJNZR6,LOOP;计数长度减1,不等于0继续循环
RET
END
24试编写一程序,开始的存储区中。
将存储区DATA1单元开始的50个单字节逐一移至
解:
START:
MOV
R0,#DATA1
;建立源操作数地址指针
MOV
R1,#DATA2
;建立目标操作数地址指针
MOV
R6,#50
;置计数长度
LOOP:
MOV
A,@R0
MOV
@R0,A
INC
R0
INC
R1
DJNZ
R6,LOOP
RET
END
DATA2单元
25试编写一采用查表法求
<20,平方数高位存放在
1~20的平方数子程序(要求:
x在累加器A中,1Wx
R6,低位在R7)
这样只要把数乘就可以找到平方数的高字节存放的地址,连续取两个字节即可
解:
为了方便起见,每一数的平方在表中统一用双字节来存放,以2加表头地址,
DEC
RET
TAB:
DB00H,00H,00H,01H,00H,04H,00H,09H,00H,16平方数用BCD表示
(也可用DB00H,25H,00H,36H,00H,49H,00H,64H,00H,81十六进制表示)
DB01H,00H,01H,21H,01H,44H,01H,69H,01H,96H
DB02H,25H,02H,56H,02H,89H,03H,24H,03H,61H,04H,00H
END
若平方表从0的平方存放,把程序中红色的DECA指令去掉,若表从1的平方存放,则将DECA指令加上。
26试编写一个三字节无符号
解:
OGR
0000H
MOV
R0,#5CH
MUL1:
MOV
A,5AH
MOV
B58H
MUL
AB
MOV
@R0,A
数乘法程序。
MOV
R3,B
MOV
A,5BH
MOV
B,5BH
MUL
AB
ADD
A,R3
MOV
R3,A
MOV
A,B
ADD
A,R2
MOV
R2,A
MOV
R1,#A
JNC
LAST
INC
R1
A,5BH
MUL
AB
ADD
A,R2
INC
R0
MOV
@R0,A
MOV
A,B
ADDC
A,RI
INC
R0
MOV
@R0,A
MOV
R5,#04H
MOV
R1,#10H
LOOP:
MOV
A,@R0
MOV
@R1,A
MOV
B,29H
LAST:
MOV
INC
R0
INC
R1
BINBCD:
MOV
R1,#48H
MOV
R2,#04H
INC
R2
CLR
A
BB0:
MOV
@R1,A
INC
R1
DJNZ
R2,BB0
MOV
A,#04H
MOV
B,#8
MUL
AB
MOV
R3,A
BB3:
MOV
R0,#10H
MOV
R2,#04H
CLR
C
BB1:
MOV
A,@R0
RLC
A
MOV
@R0,A
INC
R0
DJNZ
R2,BB1
MOV
R2,#04H
INC
R2
MOV
R1,#48H
BB2:
MOV
A,@R1
ADDC
A,@R1
DA
A
MOV
@R1,A
INCR1
DJZNR2,BB2
DJZNR3,BB3
SJMP$
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机原理与运用 第三章答案 单片机 原理 运用 第三 答案