单片机原理与运用第三章答案.docx

上传人:b****1 文档编号:13241632 上传时间:2023-06-12 格式:DOCX 页数:19 大小:20.71KB
下载 相关 举报
单片机原理与运用第三章答案.docx_第1页
第1页 / 共19页
单片机原理与运用第三章答案.docx_第2页
第2页 / 共19页
单片机原理与运用第三章答案.docx_第3页
第3页 / 共19页
单片机原理与运用第三章答案.docx_第4页
第4页 / 共19页
单片机原理与运用第三章答案.docx_第5页
第5页 / 共19页
单片机原理与运用第三章答案.docx_第6页
第6页 / 共19页
单片机原理与运用第三章答案.docx_第7页
第7页 / 共19页
单片机原理与运用第三章答案.docx_第8页
第8页 / 共19页
单片机原理与运用第三章答案.docx_第9页
第9页 / 共19页
单片机原理与运用第三章答案.docx_第10页
第10页 / 共19页
单片机原理与运用第三章答案.docx_第11页
第11页 / 共19页
单片机原理与运用第三章答案.docx_第12页
第12页 / 共19页
单片机原理与运用第三章答案.docx_第13页
第13页 / 共19页
单片机原理与运用第三章答案.docx_第14页
第14页 / 共19页
单片机原理与运用第三章答案.docx_第15页
第15页 / 共19页
单片机原理与运用第三章答案.docx_第16页
第16页 / 共19页
单片机原理与运用第三章答案.docx_第17页
第17页 / 共19页
单片机原理与运用第三章答案.docx_第18页
第18页 / 共19页
单片机原理与运用第三章答案.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机原理与运用第三章答案.docx

《单片机原理与运用第三章答案.docx》由会员分享,可在线阅读,更多相关《单片机原理与运用第三章答案.docx(19页珍藏版)》请在冰点文库上搜索。

单片机原理与运用第三章答案.docx

单片机原理与运用第三章答案

单片机原理与运用-第三章答案

第三章单片机的汇编语言与程序设计习题

1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?

MOVA,59H

MOVR0,A

MOVA,#00H

MOV@R0,A

MOVA,#25H

MOV51H,A

MOV52H,#70H

解:

MOVA,59H;A=50H

MOVR0,A;RO=50H

MOVA,#00H;A=00H

MOV@R0,A;50H=00H

MOVA,#25H;A=25H

MOV51H,A;51H=25H

MOV52H,#70H;52H=70H

所以:

A=25HR0=50H;50H=00H51H=25H

2.请选用合适的指令对P0口内容做修改(例如使P0.0~P0.3不变,P0.4~P0.7为0)。

解:

MOVA,P0

ANLA,0fh

MovP0,A

3.试问外部数据存储器和程序存储器可以用哪些指令来实现?

举例说明。

解:

访问外部数据存储器指令有:

MOVX@DPTR,AMOVXDPTR,#0100HMOV@DPTR,A

MOVXA,@DPTRMOVXDPTR,#0200HMOVA,@DPTR

MOVXA,@RiMOVXA,@R0

MOVX@Ri,AMOVX@RI,A

访问程序存储器指令有:

MOVXA,@A+PC

MOVXA,@A+DPTR

4.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?

PUSH30H

PUSH31H

POPDPL

POPDPH

MOV30H,#00H

MOV31H,#0FFH

解:

PUSH30H;61H=24H

PUSH31H;62=10HSP=62H

POPDPL;DPL=10H

POPDPH;DPH=24HSP=60H

MOV30H,#00H;30H=00H

MOV31H,#0FFH;31H=0FFH

5.设(A)=40H,(R1)=23H,(40H)=05H。

执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各位何值?

XCHA,R1

XCHDA,@R1

解:

XCHA,R1;A=23HR1=40H

XCHDA,@R1;A=25H40H=03H

6.两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(次序为千位、百位在低地址中),和数存在54H,55H和56H中(56H用来存放最高位的进位,试编写加法程序)

解:

ORG0000H

LJMPSTART

ORG0100H

START:

MOVA,53H

ADDA,51H

DAA

MOV55H,A

MOVA,52H

ADDCA,50H

DAA

MOV56H,C

SJMP$

END

7.设(A)=01010101B,(R5)=10101010B,分别写出执行ANLA,R5;ORLA,R5:

XRLA,R5指令后结果。

解:

ANLA,R5;00000000B

ORLA,R5;11111111B

XRLA,R5;11111111

8.设指令SJMPrel=7EH,并假设该指令存放在2114H和2115H单元中。

当该指令执行后,程序将跳转到何地址?

解:

2116H+60H=2176H

9.简述转移指令AJMPaddr11,SJMPrel,LJMPaddr16及JMP@A+DRTR的应用场合。

解:

AJMPaddr11为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。

SJMPrel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量加到PC上,并计算出转向目标地址。

转向的目标地址可以在这条指令前128字节到后127字节之间

LJMPaddr16执行这条指令时把指令的第二字节和第三字节分别装入PC的高位和地位字节中无条件地转向指定地址。

转移目标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。

JMP@A+DRTR指令的功能是把累加器中8位无符号数与数据指针DRTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转。

10.试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?

P1口的8条I/O线为何状态?

CLRC

MOVA,#66H

JCLOOP1

CPLC

SETB01H

LOOP:

ORLC,ACC.0

JBACC.2,LOOP2

CLR00H

LOOP2:

MOVP1,A

解:

CLRC;CY=0

MOVA,#66H;A=66H

JCLOOP1

CPLC;CY=1

SETB01H;20H.1=1

LOOP:

ORLC,ACC.0;CY=1

JBACC.2,LOOP2;

CLR00H

LOOP2:

MOVP1,A;P1=01100110B

SJMP$

20H.0=020H.1=1P1=66H

 

11.的特查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序点。

MOV78H,80H

MOV78H,#80H

解:

直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数传送到直接地址单元是第一个操作数在前,次序正好相反。

12.手工汇编下列程序段

ORG873BH

AAAEQU851AH

QQQMOVA,35H

CLRC

SUBBA,#0AH

JCQQ16

MOVA,36H

SUBBA,#0AH

JCQQ15

AJMPAAA

QQ15:

MOV35H,#00H

QQ16:

JNB02H,QQ17

MOVR6,39H

DECR6

SJMPQQ18

QQ17:

MOVR6,39H

INC39H

QQ18:

CLR05H

LJMP8500H

END

13.若有两个无符号数x,y分别存放于内部存储器50H,51H单元中,试编写一个程序实现x*10+y,结果存入52H,53H两个单元中。

解:

ORG0000H

SJMPSTART

ORG0030H

START:

MOVA,50H

MOVB,#10

MULAB;(50H)×10积的高、低字节分别在B、A中ADDA,51H

MOV53H,A;积的低字节加(51H)其和存放在53H中MOVA,#00H

ADDCA,B

MOV52H,A;积的高字节加进位位存放在52H中。

SJMP$

END

14从内部存储器20H单元开始,有30个数据。

试编一个程序,把其中的正数,负数分别送51H和71H开始的存储单元,并分别记下正数负数的个数送50H和70H单元。

解:

ORG0000H

SJMPSTART

ORG0030H

START:

MOV1EH,#51H;正数存放首地址51H存于1EH单元

MOV1FH,#71H;负数存放首地址71H存于1EH单元

MOVR0,#20H;建立取数(源操作数)的地址指针

MOVR2,#30;预置数据长度

MOV50H,#00H;正数个数统计单元清零

MOV70H,#00H;负数个数统计单元清零

LOOP:

MOVA,@R0;取数

JBACC.7,NEG;是负数转NEG处理

POST:

MOVR1,1EH;是正数,将暂存的地址送R1(间址寄存器)

MOV@R1,A;将正数入存

INC50H;正数个数加1

INC1EH;正数暂存地址加1修正

LOOP1:

INCR0;取数地址加1修正

DJNZR2,LOOP;计数长度减1,不等于零,继续循环统计

SJMP$;结束

NEG:

MOVR1,1FH;是负数,将暂存的地址送R1(间址寄存器)

MOV@R1,A;将正数入存

INC70H;负数个数加1

INC1FH;负数暂存地址加1修正

SJMPLOOP1;转取数地址修正

15内部存储单元40H中有一个ASCII码字符,试编一程序,给该数的最高位加上奇检验。

解:

ORG0000H

SJMPSTART

ORG0030H

START:

MOVA,40H;取数给A

CLRACC.7;A最高位(奇偶校验位)清零

JBP,LOOP;40H中的ASCII码原来就是奇数个1(最高位给零)

SETBACC.7;40H中的ACSII码原来是偶数个1,最高位置1

LOOP:

MOV40H,A;入存

SJMP$;结束

END

16.编写一段程序,将存放在自DATA单元开始的一个四字节数(高位在前)取补后送回原单元。

解:

若DATA在内部数据存储器中(假如存放在30H起始的4个单元中);采用求反加1的算法;

ORG000H

SJMPSTART

ORG0030H

START:

SETBC;置进位位为1

MOVR2,#04H;预置计数长度

MOVR0,#DATA1+3;取数指针指向低字节的地址

LOOP:

MOVA,@R0;取数

CPLA;求反

ADDCA,#00H;加进位

MOV@R0,A;入存

DECR0;地址指针修正

DJNZR2,LOOP;4字节未处理完,继续循环处理

SJMP$;结束

DATA1EQU30H;

END

17.以BUF1为起始地址的外存储区中,存放有16个单字节无符号二进制数,是编一程序,求其平均值并送BUF2单元。

解:

设R2、R3存放和,将其除以16(R2、R3联合左移4位)即为平均置值(单字节存放)

ORG0000H

SJMPSTART

ORG0030H

START:

MOVR2,#00H;和高字节清零

MOVR3,#00H;和低字节清零

MOVDPTR,#DATA1;建立外部数据存储器的地址指针

MOVR4,#10H;预置计数长度

LOOP:

MOVXA,@DPTR;从外部数据存储器取数

ADDA,R3

MOVR3,A

MOVA,R2;

ADDCA,#00H;

MOVR2,A;累加

INCDPTR;地址指针修正

DJNZR4,LOOP;16字节未累加完,继续循环累加

MOVR4,#04H;R2、R3联合移位4次(除以16)

LOOP1:

CLRC

MOVA,R2

RRCA

MOVR3,A

DJNZR4,LOOP1;平均值存放于R3中

SJMP$;结束

DATA1EQU1000H;

END

18.在DATA1单元中有一个带符号8位二位进制数x。

编一程序,按以下关系计算y值,送DATA2单元。

y=x+5,x>0

y=x,x=0

y=x-5,x<0

解:

设DATA1、DATA2为内部数据存储器的二个单元(假设为30H、31H)且y的值单字节不会产生溢除出

ORG000H

SJMPSTART

ORG0030H

START:

MOVA,30H;取数X给A

JZZERO;若X=0,则Y=0,转入存

JBACC.7,NEG;若X<0,则转X-5

POZI:

ADDA,#05H;若X>0,则X=5,入存

SJMPZERO;

NEG:

CLRC;

SUBBA,#05H;

ZERO:

MOV31H,A;结果入存

SJMP$

END

19.设内部RAM中30H和31H单元中有两个带符号数,求出其中的大数存放在32H单元中。

解:

若两数同号,则值大的数大;两数异号,正数值大

ORG000H

SJMPSTART

ORG0030H

START:

MOVA,30H

XRLA,31H;两数异或

JBACC.7,YIHAO;两数异号

TONGHAO:

CLRC;两数同号

MOVA,30H

SUBBA,31H

JCLOOP1-2

LOOP0:

MOVA,30H;同号被减数大,值大

LOOED:

MOV32H,A

SJMP$

LOOP1:

MOVA,31H;异号被减数大,值小

SJMPED;

YIHAO:

MOVA,30H;异号,哪个正,其值大

JNBACC.7,LOOP0

SJMPLOOP1

END

20.利用逻辑控制的方法,设计一个主程序,在第1,3,5,6次调出SB1子程序,第2,4,7,8次调用SB2程序。

解:

ORG000H

SJMPTEST

ORG0030H

TEST:

MOVR2,#08H

MOVA,#10101100B

LOOP:

RLCA

JCLOOP1

LCALLSB1

SJMPRELT

LOOP1:

LCALLSB2

RELT:

DJNZR2,LOOP

SJMP$

PRGO:

RET

PRG1:

RET

END

21.将DATA单元存放的以ASCII码表示的16进制数转换成十进制数存放于DATA+1单元。

解:

先将DATA的ASCII码转换成十六进制的数,再转换成十进制数。

数字的ASCII码转成十六进制数(即为十进制数)采用减30H

字母的ASCII码转成十六进制数采用减37H,十六进制再转十进制可采用先减0AH,再加10H;这样-37H-0AH+10H=-31H,可采用直接减31H。

数字与字母的ASCII的区别,可采用对D6的检测D6=1为字母的ASCII码,反之为数字的ASCII码。

ORG000H

SJMPTEST

ORG0030H

TEST:

MOVR0,#DATA1

MOVA,@R0;将DATA1的数给A

CLRC;

LOOP:

JBACC.6,LOOP1;是字母,转LOOP1

SUBBA,#30H;是数字减30H

ED:

MOVDATA+1,A;入存

SJMP$;结束

LOOP1:

SUBBA,#31H;是字母减31H

SJMPED;

DATA1EQU30H

END

22.编一个将十六进制数转换成十进制数的子程序。

解:

一个单字节的十六进制数转成十进制数一般考虑用二字节BCD码来存放。

设转换后的数存放在R3(高)、R4(低)中。

ORG000H

SJMPTEST

ORG0030H

TEST:

MOVDPTR,#TAB;建立表头地址

MOVA,30H

ANLA,#0F0H

SWAPA;高半字节分离

ADDA,0E0H;高半字节数乘2

MOVB,A;暂存

MOVCA,@A+DPTR;

MOVR3,A;取转换后的高半字节存R3

INCDPTR;

MOVA,B;

MOVCA,@A+DPTR;

MOVR4,A;取转换后的低半字节存R4

MOVA,30H;

ANLA,#0FH;

ADDA,R4;

DAA;

MOVR4,A;加原数的低半字节(DAA)

MOVA,R3;

ADDCA,#00H;

DAA;

MOVR3,A;

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个单字节数据进行交换。

解:

设DATA1、DATA2分别为内部RAM30H和50H单元。

ORG0000H

SJMPSTART

ORG0030H

START:

MOVR0,#30H;建立源地址指针

MOVR1,#50H;建立目标地址指针

MOVR6,#20;置计数长度

LOOP:

MOVA,@R0;取源地址数据

XCHA,@R1

MOV@R0,A;源地址数据与目标地址数据交换

INCR0;源地址指针修正

INCR1;目标地址指针修正

DJNZR6,LOOP;计数长度减1,不等于0继续循环

RET

END

24试编写一程序,将存储区DATA1单元开始的50个单字节逐一移至DATA2单元开始的存储区中。

解:

START:

MOVR0,#DATA1;建立源操作数地址指针

MOVR1,#DATA2;建立目标操作数地址指针

MOVR6,#50;置计数长度

LOOP:

MOVA,@R0

MOV@R0,A

INCR0

INCR1

DJNZR6,LOOP

RET

END

25试编写一采用查表法求1~20的平方数子程序(要求:

x在累加器A中,1≤x≤20,平方数高位存放在R6,低位在R7)

解:

为了方便起见,每一数的平方在表中统一用双字节来存放,这样只要把数乘以2加表头地址,就可以找到平方数的高字节存放的地址,连续取两个字节即可

ORG0000H

SJMPSTART

ORG0030H

START:

MOVDPTR,#TAB;建立源地址指针

DECA

MOVB,A

ADDA,B

MOVB,A

LOOP:

MOVCA,@A+DPTR

MOVR5,A

INCDPTR

MOVA,B

MOVCA,@A+DPTR

MOVR6,A

RET

TAB:

DB00H,00H,00H,01H,00H,04H,00H,09H,00H,16H;平方数用BCD表示(也可用DB00H,25H,00H,36H,00H,49H,00H,64H,00H,81H;十六进制表示)

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试编写一个三字节无符号数乘法程序。

解:

OGR0000H

MOVR0,#5CH

MUL1:

MOVA,5AH

MOVB58H

MULAB

MOV@R0,A

MOVR3,B

MOVA,5BH

MOVB,5BH

MULAB

ADDA,R3

MOVR3,A

MOVA,B

ADDA,R2

MOVR2,A

MOVR1,#A

JNCLAST

INCR1

LAST:

MOVA,5BH

MOVB,29H

MULAB

ADDA,R2

INCR0

MOV@R0,A

MOVA,B

ADDCA,RI

INCR0

MOV@R0,A

MOVR5,#04H

MOVR1,#10H

LOOP:

MOVA,@R0

MOV@R1,A

INCR0

INCR1

BINBCD:

MOVR1,#48H

MOVR2,#04H

INCR2

CLRA

BB0:

MOV@R1,A

INCR1

DJNZR2,BB0

MOVA,#04H

MOVB,#8

MULAB

MOVR3,A

BB3:

MOVR0,#10H

MOVR2,#04H

CLRC

BB1:

MOVA,@R0

RLCA

MOV@R0,A

INCR0

DJNZR2,BB1

MOVR2,#04H

INCR2

MOVR1,#48H

BB2:

MOVA,@R1

ADDCA,@R1

DAA

MOV@R1,A

INCR1

DJZNR2,BB2

DJZNR3,BB3

SJMP$

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2