单片机部分答案第四版北航马忠梅.docx

上传人:b****1 文档编号:319562 上传时间:2022-10-08 格式:DOCX 页数:18 大小:95.16KB
下载 相关 举报
单片机部分答案第四版北航马忠梅.docx_第1页
第1页 / 共18页
单片机部分答案第四版北航马忠梅.docx_第2页
第2页 / 共18页
单片机部分答案第四版北航马忠梅.docx_第3页
第3页 / 共18页
单片机部分答案第四版北航马忠梅.docx_第4页
第4页 / 共18页
单片机部分答案第四版北航马忠梅.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机部分答案第四版北航马忠梅.docx

《单片机部分答案第四版北航马忠梅.docx》由会员分享,可在线阅读,更多相关《单片机部分答案第四版北航马忠梅.docx(18页珍藏版)》请在冰豆网上搜索。

单片机部分答案第四版北航马忠梅.docx

单片机部分答案第四版北航马忠梅

*1.22已知(A)=7AH,(R0)=30H,(30H)=A5H,PSW=80H。

问执行(单独执行)以下各指令的结果

XCHA,R0;A=30H,R0=7AH

XCHA,30H;A=A5H

XCHA,@R0;A=A5H

XCHDA,@R0;A=75H;二者低4位互换

SWAPA;A=A7H;A高低4位互换

ADDA,R0;A=AAH,Cy=0,OV=1(a6a7=1)

ADDA,30H;A=1FH,Cy=1,OV=0

ADDA,A,#30H;A=AAH,Cy=0,OV=1;

ADDCA,30H;A=20H,Cy=1,OV=0;因为PSW的Cy=1

SUBBA,30H;A=D4H,Cy=1,OV=1;因为PSW的Cy=1

SUBBA,#30H;A=49H,Cy=0,OV=0;因为PSW的Cy=1

*1.24已知(A)=83H,(R0)=17H,(17H)=34H。

执行以下指令后A=?

ANLA,#17H;逻辑与(A)=03H

ORL17H,A;逻辑或(17H)=37H

XRLA,@R0;异或(A)=34H

CPLA;取反(A)=CBH

*1.25将内部RAM20H、21H、22H,连续三个单元的内容以此放入

2FH、2DH、2EH单元

MOVR0,#20H

MOVR1,#2FH

LOOP:

MOVA,@R0

MOV@R1,A

INCR0

DECR1

CJNER0,#23H,LOOP

SJMP$

*1.34外部数据RAM在2000H~2100H区域有一个数据块,将他们移动到3000H~3100H区域

解一:

MOVDPTR,#2000H

MOVP2,#30H

MOVR1,#00H

LOOP:

MOVXA,@DPTR

MOVX@R1,A

INCDPTR

INCR1

CJNER1,#00H,LOOP

INCP2

MOVXA,@DPTR

MOVX@R1,A

解二:

MOVDPTR,#2000H

MOVP2,#30H

MOVR1,#00H

LOOP:

MOVXA,@DPTR

MOVX@R1,A

INCDPTR

INCR1

CJNER1,#00H,LOOP

INCP2

MOVA,DPH

CJNEA,#21H,NEXT

NEXT1:

MOVXA,@DPTR

MOVX@R1,A

SJMP$

NEXT:

INCDPTR

SJMPNEXT1

解三:

MOVDPTR,#2000H

MOVR5,#00H

MOVA,#00H

MOVR1,A

LOOP:

MOVA,R1

MOVXA,@A+DPTR

MOVX@R0,A

MOVDPTR,#3000H

MOVA,@R0

MOVX@A+DPTR,A

INCR1

DJNZR5,LOOP

MOVDPTR,#2100H

MOVXA,@DPTR

MOVDPTR,#3100H

MOVX@DPTR,A

*1.35外部数据RAM从2000H开始有100个数据块,将他们移动到2030开始的单元

解一:

MOVDPTR,#2000HMOVR4,#64H

MOVP2,#10HLOOP1:

MOVXA,@R1

MOVR1,#00HMOVX@DPTR,A

MOVR4,#64HINCR1

LOOP:

MOVXA,@DPTRINCDPTR

MOVX@R1,ADJNZR4,64H,LOOP1

INCDPTR

INCR1

DJNZR4,64H,LOOP

MOVDPTR,#2030H

MOVP2,#10H

MOVR1,#00H

解二:

MOVDPTR,#2000HMOVR3,#64H

MOVP2,#10HDJNZR3,LOOP

NEXT:

MOVR1,#00HSJMP$

MOVR4,#64H

LOOP:

MOVXA,@DPTR

MOVX@R1,A

INCDPTR

INCR1

NEXT1:

DJNZR4,LOOP

LOOP1:

MOVDPTR,#1000H

MOVP2,#20H

MOVR1,#30H

习题参考答案(P.79)

习题3.8051主要的存储空间是什么?

为什么两个RAM的空间不同?

答:

8051单片机的存储空间分为数据RAM和代码ROM,其中数据RAM又分为片内RAM和片外RAM。

片内RAM的地址为8位,由单片机指令直接在单片机内部寻址访问,而片外RAM的地址为16位,只能由单片机的MOVX指令通过外部总线访问。

习题4.编一段程序,把8位口新的输入值和前一次的输入值进行比较,然后产生一个8位数。

这个数中的位为“1”的条件是:

仅当新输入的位为“0”,而前一次输入的位为“1”。

答:

设该8位口为P1,新产生的8位数为x:

unsignedcharx;

x=P1;

x&=~P1;

习题6.按给定的存储类型和数据类型,写出下列变量的说明形式:

up,down整数,使用堆栈存储;

first,last浮点数,使用外部数据存储器存储;

cc,ch字符,使用内部数据存储器存储。

答:

堆栈只能存储内部RAM字节内容,必须在idata区:

(复位后SP=07H,但是07H中存放堆栈地址,上电复位后典型寄存器的值?

intidataup,down;

floatxdatafirst,last;

charidatacc,ch;或chardatacc,ch;

习题7.

判断下列关系表达式或逻辑表达式的运算结果(1或0)

1、10==9+1;→1

2、0&&0;→0

3、10&&8;→1

4、8||0;→1

5、!

(3+2);→0

6、设x=10,y=9;x>=8&&y<=x;→1

习题8.

设x=4,y=8,说明下列各题运算后,x,y和z的值分别是多少?

1、z=(x++)*(--y);→x=5,y=7,z=28

2、z=(++x)-(y--);→x=5,y=7,z=-3

3、z=(++x)*(--y);→x=5,y=7,z=35

4、z=(x++)+(y--);→x=5,y=7,z=12

习题9.分析下列运算表达运算顺序。

1、c=a||(b);→(b)是为0或1(逻辑值),若a=0则a||(b),结果赋给c

2、x+=y-z;→y-z,x+(y-z),结果赋给x

3、-b>>2;→-b,结果右移2位。

注:

-b不是取反也不能确定为负数;取反一般是变成2进制然后按位取反。

如b=-3,即0FDH,则-b=3,而不是0FD按位取反

4、c=++a%b--;→a=a+1,a%b,b=b-1,%结果赋给c

5、!

m&n;→!

m,若结果为1再和n相与。

X(不是&&)

!

m,再和n相与

6、a

习题参考答案(P.93)

习题6.用选择分支编写程序,把输入的一个数字按下列对应关系显示。

当输入Z时,程序结束。

#include

#include

main()

{

unsignedchark;

do

{

scanf(“%c”,&k);

switch(k)

{

case‘1’:

printf(“A”);break;

case‘2’:

printf(“B”);break;

case‘3’:

printf(“C”);break;

case‘4’:

printf(“D”);break;

default:

printf(“?

”);break;

}

}while(k!

=‘Z’);

while

(1);

}

习题7.若在C中的switch操作漏掉break,会发生什么?

答:

若在case语句中漏掉break,则程序执行case选择部分程序后不会按照要求退出switch语句,而是继续执行下一个case语句选择的内容。

习题8.编写程序,输出x3数值表,x为0—10。

main()

{

unsignedcharx;

unsignedinty;

for(x=0;x<11;x++)

{

y=(unsignedint)x*x*x;

printf(“%c,%d\n”,x,y);

}

while

(1);

}

习题9.用三种循环方式分别编写程序,显示1—100的平方。

答:

三种流程图如下:

#defineuintunsignedint

main()

{

unsignedinty;

unsignedcharx;

for(x=0;x<101;x++)

{

y=(unsignedint)x*x;

printf(“%c,%d\n”,x,y);

}

while

(1);

}

main()

{

unsignedinty;

unsignedcharx=1;

while(x<101)

{

y=(unsignedint)x*x;

printf(“%c,%d\n”,x,y);

x++;

}

while

(1);

}

main()

{

unsignedinty;

unsignedcharx=1;

do

{

y=(unsignedint)x*x;

printf(“%c,%d\n”,x,y);

x++;

}while(x<101);

while

(1);

}

习题9.写出下列数组使用*运算的替换形式。

1.data[2];2.num[i+1];3.man[5][3]。

1、*(data+2)p107

2、*(num+i+1)

3、*(*(man+5)+3)

习题10.设下列运算表达式中p是指针,试分析各表达式的运算顺序。

1.b=*p--;2.x=*p++;

3.a[++i]=*p++;4.y=*--*++p-6。

答:

1、先取*p给b,再使p减1单元(注意不是*p减1单元);

2、先取*p给x,再使p加1单元(注意不是*p加1单元);

3、先使i加1,再取*p给a[i],再使p加1单元;

4、这里p是指针的指针,先使p加1单元,再使*p减1单元,再使*(*p)减6后赋给y;

习题12.结构的定义和说明在程序中的作用是什么?

在对结构初始化时应该注意些什么问题。

答:

结构的定义和说明在程序中可以把一组关系密切的变量存放在一个连续的存储空间中,便于对这些变量的访问。

同一个结构中不能存在同名变量名称。

可以把具有相同结构的已知结构直接用“=”对结构进行赋值,或者通过其成员的逐个引用

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

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1