单片机原理与应用及C51程序设计杨加国主编完整版答案.docx

上传人:b****6 文档编号:4989458 上传时间:2022-12-12 格式:DOCX 页数:25 大小:447.78KB
下载 相关 举报
单片机原理与应用及C51程序设计杨加国主编完整版答案.docx_第1页
第1页 / 共25页
单片机原理与应用及C51程序设计杨加国主编完整版答案.docx_第2页
第2页 / 共25页
单片机原理与应用及C51程序设计杨加国主编完整版答案.docx_第3页
第3页 / 共25页
单片机原理与应用及C51程序设计杨加国主编完整版答案.docx_第4页
第4页 / 共25页
单片机原理与应用及C51程序设计杨加国主编完整版答案.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

单片机原理与应用及C51程序设计杨加国主编完整版答案.docx

《单片机原理与应用及C51程序设计杨加国主编完整版答案.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用及C51程序设计杨加国主编完整版答案.docx(25页珍藏版)》请在冰豆网上搜索。

单片机原理与应用及C51程序设计杨加国主编完整版答案.docx

单片机原理与应用及C51程序设计杨加国主编完整版答案

单片机原理与应用及C51程序设计--杨加国主编-完整版答案

单片机原理与应用及C51程序设计

第一章

第二章

第三章

1.在MCS-51单片机中,寻址方式有几种?

其中对片内RAM可以用哪几种寻址方式?

对片外RAM可以用哪几种寻址方式?

答:

寻址方式可分为数的寻址和指令寻址,数的寻址有:

常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。

片内RAM寻址有:

寄存器寻址、直接寻址方式和寄存器间接寻址方式。

片外RAM寻址有:

寄存器间接寻址方式。

2.在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?

答:

片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPTR作指针间接访问可访问整个64K字节。

3.在位处理中,位地址的表示方式有哪几种?

答:

1.直接位地址(00H~0FFH)。

例如:

20H

2.字节地址带位号。

例如:

20H.3表示20H单元的3位。

3.特殊功能寄存器名带位号。

例如:

P0.1表示P0口的1位。

4.位符号地址。

例如:

TR0是定时/计数器T0的启动位。

4.写出完成下列操作的指令。

(1)R0的内容送到R1中。

MOVA,R0

MOVR1,A

(2)片内RAM的20H单元内容送到片内RAM的40H单元中。

MOV40H,20H

(3)片内RAM的30H单元内容送到片外RAM的50H单元中。

MOVA,30H

MOVR0,#50H

MOVX@R0,A

(4)片内RAM的50H单元内容送到片外RAM的3000H单元中。

MOVA,50H

MOVDPTR,#3000H

MOVX@DPTR,A

(5)片外RAM的2000H单元内容送到片内RAM的20H单元中。

MOVDPTR,#2000H

MOVXA,@DPTR

MOV20H,A

(6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。

MOVDPTR,#1000H

MOVXA,@DPTR

MOVDPTR,#4000H

MOV@DPTR,A

(7)ROM的1000H单元内容送到片内RAM的50H单元中。

MOVA,#0

MOVDPTR,#1000H

MOVCA,@A+DPTR

MOV50H,A

(8)ROM的1000H单元内容送到片外RAM的1000H单元中。

MOVA,#0

MOVDPTR,#1000H

MOVCA,@A+DPTR

MOVX@DPTR,A

5.区分下列指令有什么不同?

(1)MOVA,20H和MOVA,#20H

答:

前者源操作数是直接寻址,后者源操作数立即寻址。

(2)MOVA,@R1和MOVXA,@R1

答:

前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。

(3)MOVA,R1和MOVA,@R1

答:

前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。

(4)MOVXA,@R1和MOVXA,@DPTR

答:

前者源操作数是访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。

(5)MOVXA,@DPTR和MOVCA,@A+DPTR

答:

前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。

6.设片内RAM的(20H)=40H,(40H)=10H,(10H)=50H,(P1)=0CAH。

分析下列指令执行后片内RAM的20H、40H、10H单元以及P1、P2中的内容。

MOVR0,#20H;R0=20H

MOVA,@R0;A=40H

MOVR1,A;R1=40H

MOVA,@R1;A=10H

MOV@R0,P1;(40H)=0CAH

MOVP2,P1;P2=0CAH

MOV10H,A;(10H)=10H

MOV20H,10H;(20H)=10H

结果:

(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH

7.已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。

(1)MOVA,@R1结果:

累加器A等于70H

(2)MOVX@DPTR,A结果:

片外RAM(2FFCH)单元等于02H

(3)MOVCA,@A+DPTR结果:

累加器A等于64H

(4)XCHDA,@R1结果:

累加器A等于00H,片内RAM(7FH)单元等于72H

8.已知:

(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。

(1)ADDA,@R1;累加器A等于55H,CY等于1

(2)SUBBA,#77H;累加器A等于00H,CY等于0

(3)MULAB;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等于0

(4)DIVAB;累加器A等于1EH,B寄存器等于00H,CY、OV等于0

(5)ANL78H,#78H;片内RAM(78H)单元等于58H

(6)ORLA,#0FH;累加器A等于7FH

(7)XRL80H,A;片内RAM(80H)等于14H

9.设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。

ANLA,#17H;A=03H

ORL17H,A;(17H)=37H

XRLA,@R0;A=34H

CPLA;A=CBH

结果:

A=CBH,(R0)=17H,(17H)=37H

10.写出完成下列要求的指令。

(1)累加器A的低2位清零,其余位不变。

ANLA,#11111100B

(2)累加器A的高2位置“1”,其余位不变。

ORLA,#11000000B

(3)累加器的高4位取反,其余位不变。

XRLA,#11110000B

(4)累加器第0位、2位、4位、6位取反,其余位不变。

XRLA,#01010101B

11.说明LJMP指令与AJMP指令的区别?

答:

LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:

执行时间长,字节数多。

AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。

12.设当前指令CJNEA,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?

若累加器A的值为12H呢?

答:

指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。

13.用位处理指令实现P1.4=P1.0∧(P1.1∨P1.2)∨/P1.3的逻辑功能。

程序:

MOVC,P1.1

ORLC,P1.2

ANLC,P1.0

ORLC,/P1.3

MOVP1.4,C

14.下列程序段汇编后,从1000H单元开始的单元内容是什么?

ORG1000H

TAB:

DB12H,34H

DS3

DW5567H,87H

答:

(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H

15.试编一段程序,将片内RAM的20H、21H、22H单元的内容依次存入片外RAM的20H、21H、22H中。

程序:

MOVR0,#20H

MOVR2,#03H

LOOP:

MOVA,@R0

MOVX@R0,A

INCR0

DJNZR2,LOOP

SJMP$

16.编程实现将片外RAM的2000H~2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。

程序:

MOVR0,#20H

MOVDPTR,#2000H

MOVR2,#31H

LOOP:

MOVXA,@DPTR

MOV@R0,A

MOVA,#00

MOVX@DPTR,A

INCDPTR

INCR0

DJNZR2,LOOP

SJMP$

17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。

程序:

MOVDPTR,#1000H

MOVR2,#100

MOVR7,#00

MOVR6,#00

LOOP:

MOVXA,@DPTR

ADDA,R6

MOVR6,A

MOVA,R7

ADDCA,#0

MOVR7,A

INCDPTR

DJNZR2,LOOP

SJMP$

18.编程实现R4R3⨯R2,结果放于R7R6R5中。

程序:

ORG0100H

MUL1:

MOVA,R2

MOVB,R3

MULAB;R2⨯R3,结果的低字节直接存入积的R5

MOVR5,A;结果的高字节存入R6中暂存起来

MOVR6,B

MUL2:

MOVA,R2

MOVB,R4

MULAB;R2⨯R4,结果的低字节与R6相加后,再存入R6中

ADDA,R6

MOVR6,A

MOVA,B;结果的高字节加上进位位后存入R7中

ADDCA,#00

MOVR7,A

SJMP$

19.编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。

程序:

MOVC,20H.0

MOVA.0,C

MOVC,20H.1

MOVA.1,C

MOVC,21H.2

MOVA.2,C

MOVC,21H.3

MOVA.3,C

MOVC,22H.4

MOVA.4,C

MOVC,22H.5

MOVA.5,C

MOVC,23H.6

MOVA.6,C

MOVC,23H.7

MOVA.7,C

MOVR2,A

20.用查表的方法实现一位十六进制数转换成ASCII。

程序:

(设一位十六进制数放在R2中,轮换的ASCII也放于R2中)

C16STASC:

MOVDPTR,#TAB

MOVA,R2

MOVCA,@A+DPTR

MOVR2,A

RET

TAB:

DB30H,31H,32H,33H,34H,35H,36H,37H

DB38H,391H,41H,42H,43H,44H,45H,46H

21.编程统计从片外RAM2000H开始的100个单元中“0”的个数放于R2中。

程序:

MOVDPTR,#2000H

MOVR3,#100

MOVR2,#00

LOOP:

MOVXA,@DPTR

JNZNEXT

INCR2

NEXT:

INCDPTR

DJNZR3,LOOP

SJMP$

 

第四章

4-2有哪里些数据类型是MCS-51系列单片机直接支持的?

答:

见P89,基本类型:

字符型,整型,长整型,浮点型,特殊功能寄存器;

构造类型:

数组类型,结构体类型,共用体,枚举

指针类型

空类型

4-3C51特有的数据结构类型有哪些?

答:

特殊功能寄存器,位类型

4-4C51的存储类型有几种?

它们分别表示的存储器区域是什么?

答:

见P94页:

存储器类型有:

data,bdata,idata,pdata,xdata

4-5C51中bit位与sbit位有什么区别?

答:

bit是定义一个一般的位变量;而使用sbit定义可位寻址字节或是特殊功能寄存器的的位,定义时必指定其位地址,其存储空间为内部RAM中的位寻址区20H-2FH(位地址为:

00H~7FH),

4-6在C51通过绝对地址来访问的存储器有几种方式?

答:

使用C51运行库中预定义宏,通过指针访问,使用C51扩展关键字_at_

4-7在C51中,中断函数与一般函数有什么不同?

答:

见P112页:

7点

4-8按指定存储器类型和数据类型,写出下列变量的说明形式

答:

(1)在data定义字符变量var11:

chardatavar11

(2)在idata定义整型变量var12:

charidatavar12

(3)在xdata定义无符号字符数组var11[4]:

unsignedcharxdatavar13[4]

(4)在xdata定义一个指向无符号字符的指针px:

unsignedcharxdata*px

(5)定义可寻址位变量flag:

bitflag;

(6)定义特殊功能寄存器变量p3:

sfrp3=0xb0

(7)定义特殊功能寄存器变量SCON:

sfrSCON=0x98

(8)定义16位特殊功能寄存器变量T0:

sfr16T0=0x8a(无法真正与实际相匹配)

4-9设a=3,b=4,c=5,写出下列关系表达式或逻辑表达式的结果

答:

(1)a+b>c&&b==c(False)

(2)a||b+c&&b-c(True)

(3)!

(a>b)&&!

c||1(True)

(4)!

(a+b)+c-1&&b+c/2(True)

4-10break与continue语句的区别是什么?

答:

见P110;使用break语句可以跳出switch和循环体,提前结束循环而接着执行循环结构下面的语句

continue语句使用在循环体结构中,用于结束本次循环,跳过该语句下面尚未执行的语句,直接进行下一否执行循环的判断。

4-11用分支结构编程实现,输入”1”时显示“A”,输入”2”时显示“B”,输入”3”时显示“C”,输入”4”时显示“D”,输入”5”时结束。

答:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharI;

voidmain()

{

scanf(“%d”,&i);

swtch(i)

{

case1:

printf(“A”),break;

case2:

printf(“B”),break;

case3:

printf(“C”),break;

case4:

printf(“D”),break;

case5:

break;

default:

printf(“Error!

”);

}

While

(1);

}

4-12输入3无符号数据,要求按由大到小的顺序输出。

解:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uinta,b,c;

voidmain()

{

 uintmax,min,med;

 scanf("%d%d%d",&a,&b,&c);

 if(a>b&&b>c)

 { max=a;med=b;min=c;}

 elseif(a>b&&bc)

 {max=a;med=c;min=b;}

 elseif(a>b&&b

 {max=c;med=a;min=b;}

  elseif(b>a&&b

 {max=c;med=b;min=a;}

 else if(b>a&&b>c&&a>c)

 {max=b;med=a;min=c;}

 else

 {max=b;med=c;min=a;}

 printf("%d>%d>%d\n",max,med,min);

}

4-13用3种循环结构编写程序实现输出1-10的平方和

解:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uintsum=0;

voidmain

{

uchari,Square;

for(i=1;i<=10;i++)

{

sum=sum+i*i;

}

printf(”sum=%d,”sum);

i=1;

while(i<=10)

{

sum=sum+i*i;

i++;

}

printf(”sum=%d,”sum);

i=1;

do

{

sum=sum+i*i;

i++;

printf(”i%d^2=%d,”i,Square);

}while(i>10)

printf(”sum=%d,”sum);

}

4-14对一个5个元素的无符号字符数组按由大到小的顺序输出

解:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

 uinti,n=5,j,m;

 uinta[]={210,108,65,49,72};

voidmain()

{

 for(i=1;i

 {

  for(j=0;j

  {

   if(a[j]

   {

    m=a[j];

    a[j]=a[j+1];

    a[j+1]=m;

   }

  }

 }

 printf("\nThesortedintegers:

\n\n");

 for(i=0;i

 {

  printf("%6d",a[i]);

 }

}

4-15用指针实现输入设备个无符号字符数据按由大到小的顺序输出。

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uinti,n=5,j,m;

uinta[]={210,108,65,49,72};

uint*p;

voidmain()

{

p=a;

for(i=1;i

{

for(j=0;j

{

if(*(p+j)<*(p+j+1))

{

m=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=m;

}

}

}

printf("\nThesortedintegers:

\n\n");

for(i=0;i

{

printf("%6d",a[i]);

}

}

第六章

1.何为“准双向I/O接口”?

在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?

答:

准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。

MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。

2.80C51单片机内部有几个定时/计数器?

它们由哪些功能寄存器组成?

怎样实现定时功能和计数功能?

答:

80C51单片机内部有两个16位的可编程定时/计数器,由TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。

通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。

3.定时/计数器T0有几种工作方式?

各自的特点是什么?

答:

有四种工作方式,特点见下表:

M1

M0

工作方式

方式说明

0

0

0

13位定时/计数器

0

1

1

16位定时/计数器

1

0

2

8位自动重置定时/计数器

1

1

3

两个8位定时/计数器(只有T0有)

4.定时/计数器的四种工作方式各自的计数范围是多少?

如果要计10个单位,不同的方式初值应为多少?

答:

有四种方式。

方式0计数范围:

1~8192;方式1计数范围:

1~65536;方式2计数范围:

1~256;方式3计数范围:

1~256。

如果计10个单位,方式0初值为:

8192-10=8182;方式1初值为:

65536-10=65526;方式2初值为:

256-10=246;方式2初值为:

256-10=246。

5.设振荡频率为12MHz,如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方式,其初值分别设为多少?

答:

只能选择方式1,初值为65536-50000=15536。

6.何为同步通信?

何为异步通信?

各自的特点是什么?

答:

异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。

特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。

同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符。

特点是对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。

7.单工、半双工和全双工有什么区别?

答:

单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。

8.设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少?

答:

10000波特

9.串行口数据寄存器SBUF有什么特点?

答:

发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOVSBUF,A发送时为发送数据寄存器,执行MOVA,SBUF接收时为接收数据寄存器。

10.MCS-51单片机串行口有几种工作方式?

各自特点是什么?

答:

有四种工作方式,分别是方式0、方式1、方式2和方式3。

其中:

方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。

方式1,称为8位的异步通信方式,通常用于双机通信。

方式2和方式3,称为9位的异步通信方式,通常用于多机通信。

11.说明SM2在方式2和方式3对数据接收有何影响。

答:

通过SM2对方式2和方式3数据接收进行控制,SM2=1,那么只有接收的第9位为“1”才接收有效。

如SM2=0,接收的第9位无论为1还是0都接收有效。

12.怎样来实现利用串行口扩展并行输入/输出口?

答:

利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并

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

当前位置:首页 > 高等教育 > 军事

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

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