单片机原理与应用 王洪君 部分习题参考解答Word格式.docx

上传人:b****6 文档编号:19877725 上传时间:2023-01-11 格式:DOCX 页数:21 大小:230.87KB
下载 相关 举报
单片机原理与应用 王洪君 部分习题参考解答Word格式.docx_第1页
第1页 / 共21页
单片机原理与应用 王洪君 部分习题参考解答Word格式.docx_第2页
第2页 / 共21页
单片机原理与应用 王洪君 部分习题参考解答Word格式.docx_第3页
第3页 / 共21页
单片机原理与应用 王洪君 部分习题参考解答Word格式.docx_第4页
第4页 / 共21页
单片机原理与应用 王洪君 部分习题参考解答Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机原理与应用 王洪君 部分习题参考解答Word格式.docx

《单片机原理与应用 王洪君 部分习题参考解答Word格式.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用 王洪君 部分习题参考解答Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

单片机原理与应用 王洪君 部分习题参考解答Word格式.docx

D3

D2

D1

D0

Cy

AC

F0

RS1

RS0

OV

-

P

其中,各位的含义如下:

✧Cy:

高位进位标志位,当ALU的算术运算过程中有进位或借位时,Cy=1;

否如此,Cy=0。

同时,该位还可以用作位累加器,这时一般只用“C〞表示。

✧AC:

辅助进位标志,当ALU的算术运算过程中低4位向高4位有进位或借位时,AC=1;

否如此,AC=0。

该位常用于BCD码的调整。

✧F0:

用户标志位。

✧RS1、RS0:

选择工作存放器组位,用于选择内部数据存储器区内4组工作存放器中的某一组。

具体选择情况见存放器介绍局部。

✧OV:

溢出标志位,当ALU的算术运算过程中有溢出时,OV=1;

否如此,OV=0。

✧P:

奇偶校验标志位,根据累加器ACC中1的个数由硬件置位或去除,当累加器ACC中有奇数个1时P=1;

否如此,P=0。

✧PSW.1:

保存位,无定义。

11、在MCS-51单片机的工作时序中,一个机器周期包含几个状态周期、几个振荡周期?

一个机器周期包含6个状态周期、12个振荡周期。

12、单片机复位后,程序计数器PC指向哪个地址?

PC=0000H

第3章局部习题参考解答

1、写出MCS-51单片机汇编指令的指令格式,并简单举例。

MCS-51单片机的汇编指令格式如下:

[标号:

]操作码[目的操作数][,源操作数][;

注释]

操作码表示该指令所实现的操作功能,一般由2~5个英文字母表示。

例如ORL,ADD,LCALL等。

操作数表示参与操作的数据来源和目的单元。

操作数可以是一个立即数,也可以是一个内存单元或者是一个存放器单元。

操作码和第一个操作数之间一般用一个或几个空格隔开,而操作数与操作数之间用逗号隔开。

操作数可以有1个,2个,3个或没有。

如果需要对指令进展注释说明的话,在最后一个操作数后加一个分号,分号后面是注释。

如:

MOVA,60H;

(60H)→A

标号由1~8个字母或数字构成,以字母开头以“:

〞结尾,标号可有可无,它仅仅代表了该指令所在的地址,便于源程序编写过程中使用该地址。

2、指出下面程序每个语句的寻址方式。

目的操作数原操作数

MOVA,P1存放器寻址直接寻址

MOVA,#40H存放器寻址立即寻址

MOV80H,A直接寻址存放器寻址

MOVA,R5存放器寻址存放器寻址

MOVR0,A存放器间接寻址存放器寻址

MOVXA,DPTR存放器寻址存放器间接寻址

MOVCA,A+DPTR存放器寻址基址+变址寻址

MOV74H,#80H直接寻址立即寻址

3、写出下面程序被执行后,各数据存储器地址中的内容。

MOV40H,#33H

MOV41H,#44H

MOVA,40H

MOV50H,A

MOVA,41H

MOV51H,A

  〔40H〕=33H,〔41H〕=44H,〔50H〕=33H,〔51H〕=44H

4、设置堆栈指针SP中内容为60H,编写程序,将上题中数据存储器50H、51H的内容压栈后,分别将栈内数据弹出到DPTR存放器中。

MOVSP,#60H

PUSH50H

PUSH51H

POPDPL

POPDPH

5、访问片内、外数据存储器,都用什么指令?

访问片内数据存储器的数据传送指令用MOV,访问片外数据存储器的数据传送指令用MOVX。

6、下面的指令语句对吗?

为什么?

MOVR0,#0400H;

不对,R0是8位存放器源操作数超过了8位

MOV100H,A;

不对,片内数据存储器用8位地址访问,目的操作数的地址超过了8位。

MOVR2,A;

不对,能够用于间接寻址的只能是R0或R1

MOVXR1,A;

对,R1做为间址存放器来提供寻址存储器的低8位,高8位由P2提供

7、查表指令MOVCA,A+DPTR所查的表数据是在程序存储区还是数据存储区?

程序存储区。

9、使用位操作指令完成如下操作。

⑴将P1.1置“1”。

⑵将ACC.7置“1”。

 

10、编写程序,将40H为首的8个单元内容,依次反序送入到60H为首的8个单元中去。

MOVR0,#47H;

40H开始的8字节数据中最后一个单元的地址

MOVR1,#60H

MOVR2,#8

LOOP:

MOVA,R0

MOVR1,A

DECR0

INCR1

DJNZR2,LOOP

SJMP$

11、两个四位压缩类型BCD码数,被加数放在30H和31H内存单元中,加数放在32H和33H内存单元中,所求的和放在34H和35H中。

位数排列按高位在低地址,低位在高地址的顺序,编写此加法程序。

MOVPSW,#00H;

取0组工作存放器

MOVR0,#31H

MOVR1,#33H

SETBRS0;

取1组工作存放器

MOVR0,#35H

CLRRS0

MOVR2,#02H

CLRC;

去除进位标志,准备进展带进位加

MOVA,R0

ADDCA,R1

DAA

MOVR0,A

DECR0

CLRRS0;

恢复0组工作存放器

DECR1

DJNZR2,LOOP

SJMP$

13、写出ACALL和LCALL两个调用指令的调用X围,试写出这两条指令执行时,CPU的操作过程。

ACALL的调用X围是包括调用指令下一条指令的第一个字节所在的2KBX围的程序存储器空间。

ACALL调用指令的执行过程是:

PC加2〔本指令代码为两个字节〕获得下一条指令的地址,并把该断点地址〔当前的PC值〕入栈,然后将断点地址的高五位与11位目标地址〔指令代码第一字节的高3位,以与第二字节的八位〕连接构成16位的子程序入口地址,使程序转向子程序。

调用子程序的入口地址和ACALL指令的下一条指令的地址,其高五位必须一样。

因此子程序的入口地址和ACALL指令下一条指令的第一个字节必须在同一个2KBX围的程序存储器空间内。

LCALL调用指令的目标地址以16位给出,允许子程序放在64KB空间的任何地方。

指令的执行过程是把PC加上本指令代码数〔三个字节〕获得下一条指令的地址,并把该断点地址入栈〔断点地址保护〕,接着将被调子程序的入口地址〔16位目标地址〕装入PC,然后从该入口地址开始执行子程序。

14、分析如下程序,说出此程序完成什么样的功能。

MOVP1,#0FFH

MOVR7,#03H;

该指令1个机器周期 1

LOOP1:

MOVR6,#0FFH;

该指令1个机器周期 2

DJNZR6,$;

该指令2个机器周期 3

DJNZR7,LOOP1;

该指令2个机器周期 4

CPLP1.0;

该指令1个机器周期 5

JMPLOOP;

该指令2个机器周期 6

END

该程序的功能是从P1.0引脚输出连续方波,方波的周期为〔11+〔12+23×

255+24〕×

3+15+26〕×

2个机器周期

15、试编写程序,完成对十个数从大到小的排序〔建议用气泡排序法〕。

十个源字节数据放在30H为首的内存区域,排序后的目标数据放在50H为首的区域。

如果不破坏30H开始存放的源字节数据,可以把从30H开始的数据先传送到50H开始的数据区,然后对50H开始的数据进展排序。

如果不需考虑30H开始存放的数据使用后的顺序,如此可先对30H开始存放的数据进展排序,然后再传送到50H开始的数据区中。

现根据第1种情况进展编程。

MOVR0,#30H

MOVR1,#50H

MOVR2,#10

LOP1:

MOVR1,A

INCR0

INCR1

DJNZR2,LOP1

MOVR2,#9

LOP4:

MOVR0,#50H

MOVR1,#51H

MOVA,R2

MOVR3,A

LOP3:

CLRC

SUBBA,R1

LOP2:

JCNEXT

MOVA,R0

XCHA,R1

MOVR0,A

NEXT:

INCR0

DJNZR3,LOP3

DJNZR2,LOP4

第4章局部习题参考解答

1、MCS-51单片机中,有几个16位定时/计数器?

其实际用途?

MCS-51单片机中,有2个16位定时/计数器。

可以用定时器在规定的时间对温度、湿度、流量、转速等参数进展检测采样,用于环境检测、工业控制;

或者利用定时器按一定的周期产生方波信号进展输出;

还可以通过计数器对脉冲进展计数,用于信息的采集处理领域等。

2、通过对定时/计数器中的哪个特殊存放器进展工作模式设置?

试表示几种工作模式功能。

通过特殊存放器TMOD对定时/计数器进展工作模式设置。

工作方式0,为13位的定时/计数器。

工作方式1,为16位定时器/计数器。

工作方式2,为8位自动重装定时器/计数器。

工作方式3,只有定时器/计数器T0具有此工作方式,为两个8位定时器/计数器。

3、门控制信号GATE为1时,外部中断引脚INTx在什么状态下启动计数?

GATE为1时,在外部中断引脚INTx=1、TRx=1时启动定时器/计数器。

5、定时/计数器作为计数器时,对外界技术频率有什么要求〔假定时钟频率为12MHz〕?

当定时/计数器设置为计数工作方式时,计数器对来自输入引脚T0和T1的外部脉冲信号计数,在每个机器周期的S5P2期间采样外部脉冲,假如前一个机器周期采样到高电平,后一个机器周期采样到低电平,如此将触发计数器加1,更新的计数值将在下一个机器周期的S3P1期间装入计数器。

因此,单片机检测一个从高电平到低电平的下降沿需要2个机器周期,要使下降沿能被检测到,需要保证被采样高、低电平至少维持一个机器周期的时间,即外部输入信号的频率不超过晶振频率的1/24。

当晶振频率为12MHz时,最高计数频率不超过0.5MHz,即计数脉冲的周期要大于2微秒。

6、定时/计数器在何种设置下可提供3个8位定时器?

当T0运行在模式3下,TH0作为定时器使用时,其启动和关闭受谁的控制?

定时器/计数器T0工作在方式3下,定时器/计数器T1工作在方式2下,可提供3个8位定时器。

当T0运行在方式3下,TH0作为定时器使用时,其启动和关闭受TR1的控制。

7、当定时/计数器T0被设置为模式3时,怎样使T1启动运行?

又怎样使其停止运行?

当定时/计数器T0被设置为模式3时,定时/计数器T1只要设置好工作方式、时间常数初值,然后用控制位C/T切换其为定时或计数功能就可以使T1运行,假如想停止它的运行,只要把它的工作方式设置为方式3即可,因为定时器T1没有方式3,将它设置为方式3就使它停止工作。

8、时钟频率为12MHz。

要求定时值分别为:

0.1ms、1ms、10ms;

定时/计数器T0分别工作在模式0、模式1、模式2,其定时初值各为多少?

  方式0时,0.1ms定时的计数值为100,时间常数初值为:

TH0=0FCH,TL0=1CH

方式0时,1ms定时的计数值为1000,时间常数初值为:

TH0=0E0H,TL0=18H

  方式1时,0.1ms定时的计数值为100,时间常数初值为:

TH0=0FFH,TL0=9CH

  方式1时,1ms定时的计数值为1000,时间常数初值为:

TH0=0FCH,TL0=18H

  方式1时,10ms定时的计数值为10000,时间常数初值为:

TH0=0D8H,TL0=0F0H

  方式2时,0.1ms定时的计数值为100,时间常数初值为:

TH0=9CH,TL0=9CH

9、时钟频率为12MHz。

编写程序完成从P1.0输出占空比为1:

4,频率为1000Hz的脉冲波型。

1000Hz周期为1ms,如此高电平持续时间为1ms/4=0.25ms=250us。

用T0实现250um定时,采用工作方式2,定时时间常数为256-250=6。

从P1.0输出占空比为1:

4,频率为1000Hz的脉冲波型,既P1.0持续250us的高电平,250us×

3的低电平。

采用查询方式实现:

MOVTMOD,#02H

MOVTH0,#06H

MOVTL0,#06H

SETBTR0

JNBTF0,$

CLRTF0

MOVR0,#03H

CLRTF0

DJNZR0,LOP1

JMPLOP2

采用中断方式实现:

ORG0000H

LJMPMAIN

ORG000BH

LJMPT0S

ORG0030H

MAIN:

MOVSP,#60H

MOVTMOD,#02H

MOVIE,#82H

T0S:

JNBP1.0,T01

SJMPEXIT

T01:

DJNZR0,EXIT

EXIT:

RETI

10、编写程序。

时钟频率为12MHz,使用T1,由P1.0、P1.1分别输出周期为500μs和2ms的方波。

用T1实现250um定时,采用工作方式2,定时时间常数为256-250=6。

P1.0每250us改变状态一次,P1.1每250us×

4改变状态一次。

ORG001BH

LJMPT1S

MOVTMOD,#20H

MOVIE,#88H

MOVR0,#04H

MOVTH1,#06H

MOVTL1,#06H

SETBTR1

SJMP$

DJNZR0,EXIT

MOVR0,#04H

15、半双工通信和全双工通信的区别?

半双工是指数据传输可以沿两个方向,但需要分时进展。

全双工是指数据可以同时进展双向传输。

16、使用哪个特殊功能存放器来确定串行口的工作方式?

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

各工作方式的波特率如何确定?

SCON用来设定串行口的工作方式、接收/发送控制以与设置状态标志;

MCS-51单片机串行口有4种工作方式。

方式0的波特率由振荡器的频率所确定,波特率为fosc/12;

方式2时的波特率由振荡器的频率〔fosc〕和SMOD位所确定,即:

方式1和3时的波特率由定时器T1和T2的溢出率和SMOD所确定。

17、晶振为11.059MHz,工作于方式1,波特率为1200b/s,用定时器/计数器T1作为波特率发生器,写出其方式字和计数初值。

T1工作在方式2下,其方式字为20H

由串行口方式1的

,取SMOD=0,可计算出T1的溢出率=38400。

如此T1的计数值为11.0592/〔38400×

12〕=24,T1的初值为232或0E8H。

18、串行口按工作方式1进展串行数据通信。

晶振为11.059MHz,波特率为4800b/s,请编写具有收发功能的串口通信程序〔两种接收方式〕:

a、以查询方式接收数据。

b、以中断方式接收数据。

将接收数据放到30H为首的片内存储区中。

设T1工作在方式2下,其方式字为20H

,取SMOD=0,可计算出T1的溢出率=153600。

如此T1的计数值为11.0592/〔153600×

12〕=6,T1的初值为250或0FAH。

二者之间的通信约定如下:

(1)当1号机发送时,先发送一个0E1H联络信号,2号机收到后回答一个0E2H应答信号,表示同意接收。

(2)当1号机收到应答信号0E2H后,开始发送数据,每发送一个数据字节都计算校验和,假定数据块长度为16个字节,一个数据块发送完毕后立即发送校验和。

(3)2号机接收数据并转存到数据缓冲区,每接收到一个数据字节便计算一次校验和,当收到一个数据块后,再接收1号机发来的校验和,并将它与2号机求出的校验和进展比拟。

假如两者相等,说明接收正确,2号机回答00H;

假如两者不相等,说明接收不正确,2号机回答0FFH,请求重发。

(4)1号机接到00H后完毕发送。

假如收到的答复非零,如此重新发送数据一次。

1号机程序清单如下:

ASTART:

MOVTMOD,#20H;

定时器1置为方式2

MOVTH1,#0FAH;

装载定时器初值,波特率4800

MOVTL1,#0FAH

MOVPCON,#00H

SETBTR1;

启动定时器

MOVSCON,#50H;

设定串口方式1,且准备接收应答信号

ALOOP1:

MOVSBUF,#0E1H;

发联络信号

JNBTI,$;

等待一帧发送完毕

CLRTI;

允许再发送

JNBRI,$;

等待2号机的应答信号

CLRRI;

允许再接收

MOVA,SBUF;

2号机应答后,读至A

XRLA,#0E2H;

判断2号机是否准备完毕

JNZALOOP1;

2号机未准备好,继续联络

ALOOP2:

MOVR0,#30H;

2号机准备好,设定数据块地址指针初值

MOVR7,#10H;

设定数据块长度初值

MOVR6,#00H;

清校验和单元

ALOOP3:

MOVSBUF,R0;

发送一个数据字节

MOVA,R6

ADDA,R0;

求校验和

MOVR6,A;

保存校验和

INCR0

JNBTI,$

CLRTI

DJNZR7,ALOOP3;

整个数据块是否发送完毕

MOVSBUF,R6;

发送校验和

CLRRI

MOVA,SBUF;

2号机应答,读至A

JNZALOOP2;

2号机应答“错误〞,转重新发送

RET;

2号机应答“正确〞,返回

2号机接收程序清单如下:

BSTART:

MOVTMOD,#20H

MOVTH1,#0FAH

SETBTR1

设定串口方式1,且准备接收

BLOOP2:

JNBRI,$;

等待1号机的联络信号

MOVA,SBUF;

收到1号机信号

XRLA,#0E1H;

判是否为1号机联络信号

JZBLOOP1;

是1号机联络信号,准备接收数据

MOVSBUF,#0FFH;

不是1号机联络信号,回送错误标志

SJMPBLOOP2

BLOOP1:

MOVSBUF,#0E2H;

是1号机联络信号,发应答信号

MOVR0,#30H;

设定数据块地址指针初值

MOVR7,#10H;

MOVR6,#00H;

BLOOP3:

JNBRI,$

MOVA,SBUF

MOVR0,A;

接收数据转储

ADDA,R6;

MOVR6,A

DJNZR7,BLOOP3;

判数据块是否接收完毕

完毕,接收1号机发来的校验和

XRLA,R6;

比拟校验和

JNZERROR;

校验和不相等,跳至发错误标志

MOVSBUF,#00H;

校验和相等,发正确标志

SJMPEND1

ERROR:

M

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

当前位置:首页 > 总结汇报

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

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