单片机567章作业DOC.docx
《单片机567章作业DOC.docx》由会员分享,可在线阅读,更多相关《单片机567章作业DOC.docx(26页珍藏版)》请在冰豆网上搜索。
![单片机567章作业DOC.docx](https://file1.bdocx.com/fileroot1/2023-2/3/dfa36271-2278-43d2-8c5b-c4214a4ff22c/dfa36271-2278-43d2-8c5b-c4214a4ff22c1.gif)
单片机567章作业DOC
第5、6、7、8章习题
一、问答题
1.说明51单片机读端口锁存器的必要性,为什么?
答:
读锁存器是为了避免直接读端口引脚时,收到外部电路的干扰,而产生的误读现象。
2.请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常工作电流为8~mA,导通压降为0.6V),为什么?
答:
因为LED导通时,电压降是固定的(0.6V)。
为了使LED既能正常工作(电流为10mA),又不至于被过大的电流损坏,所以必须加一个限流电阻。
3.简述在使用普通按键的时候,为什么要进行去抖动处理,如何处理。
答:
延时处理即可,按键抖动会影响到是否真实按键。
4.简述LED数码管动态扫描的原理及其实现方式。
答:
LED分为共阴和共阳,他们由二极管组成,只有满足压差的时候,相应的二极管便会亮,利用不同的组合,从而实现对相应数字的输出。
5.为什么51单片机在读口的引脚状态时,许先向端口写“1”,请用图5-1P1结构图加以说明。
答:
只有先向端口写1,那么输出Q非端输出为0,场效应管V1断开这时P1.x输出为1,读引脚才有效,否则P1.x输处为0,无法实现对高电平的读取。
5.简述89c51各IO口的驱动能力。
答:
P0口能驱动8个LSTTL负载,P1、P2、P3都能驱动四个LSTTL负载。
6.什么是中断?
中断与子程序最本质的区别?
答:
中断是指计算机在执行程序的过程中,当出现异常情况或者特殊情况时,计算机停止现行程序的运行,自动转向对这些异常情况或者特殊请求的处理,处理结果后再返回现行程序的间断处,执行原程序。
中断是是随机的,而子程序是预先设定好的。
7.编制中断服务程序时,为什么在主程序的初始化程序中,必须设置EA=1这条指令(或达到同样功能的对IE赋值的指令),以及在中断服务程序中为什么通常需要保护现场和恢复现场?
答:
只有当总中断允许控制位为1时,EI中的某项中为1时对应的中断才会被允许。
8.单片机89C51有哪些中断源,CPU对其中断如何请求?
答:
单片机89C51的5个中断源分别为INT0、INT1、T0、
T1以及TXD/RXD。
9.简述单片机89C51中断的自然优先级顺序,如何提高某一中断源的优先级别。
答:
中断源(控制位)自然优先级
外部中断0最高
定时器/计数器0溢出中断
外部中断1
定时器/计数器1溢出中断
串行口中断最低
若某几个控制位为1,则相应的中断源就规定为高级中断;反之,若某几个控制位为0,则相应的中断源就规定为低级中断。
当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部硬件查询顺序(即自然优先级)。
10.简述51系列单片机中断响应的条件。
答:
有中断源发出中断请求;
中断总允许位EA=1,即CPU开中断;
申请中断的中断源的中断允许位为1,即中断没有屏蔽;
无同级或更高级中断正在被服务;
当前的指令周期已经结束;
若现在指令为RETI或者是访问IE或IP指令,则该指令以及紧接着的另一条指令已执行完。
11.用汇编语言编程时,在51系列单片机执行中断服务程序的指令较多时,为什么一般都要在入口地址(又称中断矢量地址)开始的地方放一条跳转指令?
答:
中断服务程序较长,可以在此处安排一条跳转指令跳刀另一个地址位置编写中断服务程序。
12.为什么一般都把主程序的起始地址放在0030H之后?
答:
:
因为中断服务的地址一般处在的范围时0003H~0023H,所以在编写程序的时候要避免主程序与中断服务程序地址混淆,主程序习惯上从0030H开始。
13.中断服务子程序返回指令RETI和普通子程序返回指令RET的区别?
答:
RETI是中断服务程序结束标记,CPU在执行完这条指令后,把响应中断时所在位置的优先级状态触发器清零,然后从堆栈中弹出顶上的两个字节送到程序寄存器PC,CPU从原来中断处执行被中断的程序,RET虽然也能控制PC返回原来的中断地址,但是RET没有清零优先级状态触发器,中断系统会认为中断仍在进行,其结果是此同级的中断请求将不会被响应。
14.简述51单片机定时/计数器4种工作模式的特点。
答:
方式0为13位定时/计数器,THx(x为0或者1)全部8位和TLx低5位(TLx的高3位无效)组成13位加1计数器。
方式1为16位定时/计数器。
方式2为8位自动重装定时/计数器,在程序初始化时,TLx和THx由软件赋予相同的初值,一旦TLx计数溢出,TFx将被置位,同时THx的计数初值自动装入TLx,从而进入新一轮计数,如此循环。
方式3为T0分为两个独立的8位C/–T;T1停用,TH0作为另一个定时/计数器,占用原定时/计数器T1的控制位TF1和TR1,同时占用了T1的中断资源,其启动和关闭受TR1置1或清零控制。
TH0只能对机器周期进行计数,因此,TH0只能用作简单的内部定时,不能对外部脉冲进行计数。
TH0是定时器T0附加的8为定时器。
因为定时/计数器T1的控制位被占用,为避免冲突,当T0工作在方式3时,T1一定不要用在有中断的场合,但能以8位的方式工作在方式0、1、2。
15.定时/计数器用作定时器时,其计数脉冲由谁提供?
定时时间与哪些因素有关?
答:
定时/计数器作为计数器时,计数脉冲来自外部输入引脚T0或者T1,每次下降沿来临计数一次。
定时时间与单片机采用的晶振有关。
16.画出51单片机计数/定时器方式1的逻辑结构框图,说明它们的工作原理,如何使用门控和非门控启动计数的方法。
答:
C/`T=0时,计数器对机器周期计数,为定时器,当它为1时,多路开关盒Tx联通,计数器对外部脉冲计数,下降沿来临计数1,此时为计数器。
GATE为门控制,当它为1时,TRx=1时,控制权由INTx决定,它为1时计数启动。
当GATE=0;此时控制权由TRx决定,当TRx=1时计数启动。
定时器从初值看是计数直到溢出,溢出时,16位加计数器为0,TFx置位,并申请中断。
17.在使用8051的定时器/计数器前,应对它进行初始化,其步骤是什么?
答:
(1)确定T/C的工作方式即对编程TMOD寄存器;
(2)计算T/C中的计数初值,并装载到TH和TL;
(3)T/C在中断方式工作时,须开CPU中断源中断即编程IE寄存器;
(4)启动定时器/计数器——编程TCON中TR1或TR0位。
18.在有串行通信时,定时器/计数器1的作用是什么,怎样确定串行口的波特率?
答:
在有串行通信时,定时器/计数器1的作用是串行口发生器。
串行口的波特率根据串行口的工作方式具有不同的计算方式:
方式0的波特率固定为晶体振荡器的十二分之一;
方式1的波特率=2SMOD.(定时器1的溢出率)/32;
方式2波特率=2SMOD.(fosc/64);
方式3波特率同方式1(定时器l作波特率发生器)。
19.简述89C51串口通信的四种方式及其特点。
答:
方式0是同步移位寄存器方式,帧格式8位,波特率固定:
fosc/12;
方式1是8位异步通信方式,帧格式10位,波特率可变:
T1溢出率/n(n=32或16);方式2是9位异步通信方式,帧格式样11位,波特率固定:
fosc/n(n=64或32);方式3是9位异步通信方式,帧格式11位,波特率可变:
T1溢出率/n(n=32或16);方式1,2,3的区别方要表现在帧格式及波特率两个方面.
方式1与方式2帧格式相同波特率不同:
方式1波特率可变与T1溢出率有关;方式2波特率固定.
方式1与方式3波特率相同帧格式不同:
方式1帧格式10位;方式3帧格式11位.
方式1,2,3通信过程完全相同,均为异步通信方式.
20.单片机的串口可以与PC的串口直接连接进行通讯吗?
为什么?
应如何连接?
答
21.试叙述利用SM2控制位进行多级通讯的过程?
答:
SM2:
多机通信控制位。
多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。
接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。
当SM2=0时,就不管第9位数据是0还是1,都会将数据送入SBUF,并发出中断申请。
工作于方式0时,SM2必须为0。
22.RS485总线有何特点?
答:
RS485采用差分信号负逻辑,+0.2V~+6V表示“0”,-6V~-0.2V表示“1”。
RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓朴结构在同一总线上最多可以挂接32个结点。
23.简述LCM1602的主要显示性能。
答:
LCM1602显示2行,每行16个字符。
显示的字符需存入DDRAM。
24.如何用软件消除键盘的抖动?
答:
延时处理。
25.如何确定LED数码显示器的段码?
答:
用万能表测下就能知道。
26.段码表数组变量一定要放在CODE存储区吗?
放在其它存储区会减少程序的代码吗?
答:
不一定,不会。
二、选择题
1.89c51单片机在晶振12MHz时,计数器对外部脉冲最大计数频率为_C_。
A.12MHzB.1MHzC.0.5MHzD.6MHz
2.89c51外接晶振频率为6MHz,其计数器允许输入外部脉冲的最高频为A。
A.0.25MHzB.1MHzC.6MHzD.12MHz
3.下列几种中断优先级的次序中,B为可实现的次序。
A.
T1,
T0,串口B.串口,T0,
,T1,
C.
T0,T1,串口D.串口,
T1,
T0
4.各中断源发出的中断请求信号,都会标记在MCS-51中的B中。
(A)TMOD(B)TCON、SCON(C)IE(D)IP
6.下面哪一种仅适用于定时器T0(D)。
A.方式0B.方式1C.方式2D.方式3
7.下列说法正确的是C
A、各中断发出的中断请求信号,都会标记在MCS-51系统的IE寄存器中。
B、各中断发出的中断请求信号,都会标记在MCS-51系统的IP寄存器中。
C、各中断发出的中断请求信号,都会标记在MCS-51系统的TCON与SCON寄存器中。
D、各中断发出的中断请求信号,都会标记在MCS-51系统的TMOD寄存器中。
8.在MCS-51中,需要外加电路实现中断撤除的是:
A
A、电平方式的外部中断 B、定时中断
C、外部串行中断 D、跳变方式的外部中断
9.下列说法正确的是A
A、 特殊功能寄存器PCON,与定时器/计数器的控制无关。
B、 特殊功能寄存器TMOD,与定时器/计数器的控制无关。
C、 特殊功能寄存器IE,与定时器/计数器的控制无关。
D、 特殊功能寄存器TCON,与定时器/计数器的控制无关。
10.下列说法中不正确的是A
A、同一级别的中断请求按时间的先后顺序响应。
B、同级中断不能嵌套。
C、低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求。
D、同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。
三、填空题
1.89c51有5个中断源,可分为5个优先级。
上电复位时TX0中断源的优先级别最高。
2.当单片机接到外设的中断申请时,单片机响应中断,单片机将暂停主程序的执行,转去执行 中断 程序,执行完 中断程序,再执行 主 程序。
3.89c51单片机的中断源有:
外部中断0请求,外部中断1请求,定时、计数器T0中断请求,定时、计数器T1中断请求,串行中断请求。
4.阅读以下程序后填空
#include
unsignedchara;
voidmain(void)
{
TMOD=0x02;
TL0=0xd8;
TH0=0xd8;
EA=1;
ET0=1;
TR0=1;
while
(1);
}
voidTimer0()interrupt1
{
a++;
}
1)本程序把定时器/计数器T0设置成方式2。
2)本程序执行时,变量a的内容将溢出时自增。
3)程序在while
(1)语句处发生中断,执行完中断服务程序后,返回到语句处。
4)本程序中断服务程序的入口地址为000BH。
5)是否可将interrupt1改为interrupt3?
不可以。
四、是非题
1.MCS-51中的基本型89c51共有五个中断源,这五个中断请求源全部来自外部引脚。
(×)
2.对MCS-51系列芯片中,当使用内部RAM时,EA引线端应接高电平;而不使用内部RAM时,EA引线端则应接低电平。
(√)
3.MCS-51中的89c51单片机P3口的各口线,必须作为第二功能使用。
(×)
五、编程题
1.在P3.2-P3.4三个引脚上分别接有三个发光二极管,用C51编程实现三个发光二极管依次闪亮,循环不止。
电路原理图如图5-2所示。
解:
#include”reg51.h”
SbitLED1=P3^2;
SbitLED1=P3^3;
SbitLED1=P3^4;
Voiddelayms(unsignedintx)
{
Unsignedcharj;
While(x--)
{For(j=0;j<113;j++){;}}
}
Voidmain(void)
{
While
(1)
{
LED1=0;LED2=1;LED3=1;delayms(1000);
LED1=1;LED2=0;LED3=1;delayms(1000);
LED1=1;LED2=1;LED3=0;delayms(1000);
}
}
2.电路原理图如图5-4。
编写程序LED显示00,
每秒钟加1,至99,如此循环不止。
图5-4两位LED数码管静态显示
解:
#include
#defineucharunsignedchar
#defineuintunsignedint
Ucharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
Voiddelayms(uintx)
{
Uncharj;
While(x--)
{
For(j=0;j<113;j++){;}
}
}
Voidmain(void)
{
Ucharnum=0;
While
(1)
{P1=dispcode[num/10];
P3=dispcode[num%10];
Delayms(1000);
Num++;
If(num>99)num=0;}
}
3.设计一动态显示4位8段LED数码管的电路原理图,并编写程序显示“5678”。
解:
7.根据图5-7的电路原理,设计一个独立式键盘管理程序,在检测到键按下时,点亮对应的LED。
键闭合时,采用软件延时消抖的处理,键释放时不加消抖动处理。
图5-7
解:
#ifndef_KEY_H_
#define_KEY_H_
#include
#defineucharunsignedchar
#defineUP0x01
#defineDOWN0x02
#defineENTER0X03
SbitUP_key=P1^0;
SbitDOWN_key=P1^1;
SbitENTER_key=P1^2;
Voiddelayms(unsignedintx)
{
Uncharj;
While(x--)
{
For(j=0;j<113;j++){;}
}
}
UncharKeyScanNUM(void)
{
Uncharkey=0;
UP_key=1;DOWN_key=1;ENTER_key=1;
If(UP_key==0)
{delayms(10);if(UP_key==0)key=UP;elsekey=0;}
If(DOWN_key==0)
{delayms(10);if(DOWN_key==0)key=DOWN;elsekey=0;}
If(ENTER_key==0)
{delayms(10);if(ENTER_key==0)key=ENTER;elsekey=0;}
Returnkey;
}
#endif
8.根据图5-8所示电路,
(1)编写LED(0-9)的段码;
(2)设计一个程序,开机后LED显示0,以后每按一次键,显示的数字加1,显示9后,再回到0,并照此循环。
解:
9.用Proteus设计一个4x4的键盘,一位7段LED数码管显示的电路,编写程序将按键的编码显示出来(0~F)。
解:
10.利用51单片机的定时器和中断方式,在共阳极的两个LED上显示00~99(每次增加1秒)反复循环的秒钟。
请设计电路原理图和程序。
解:
#include
#defineucharunsignedchar
#defineuintunsignedint
Ucharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
Voiddelayms(uintx)
{
Uncharj;
While(x--)
{
For(j=0;j<113;j++){;}
}
}
Voidmain(void)
{
Ucharnum=0;
While
(1)
{P2=dispcode[num/10];
P3=dispcode[num%10];
Delayms(1000);
Num++;
If(num>99)num=0;}
}
11.如图5-11,编写程序,每次按键使外部中断0产生中断,在中断服务程序中使外接发光二极管LED改变一次亮灭状态。
解:
程序如下:
#include
SbitP1_0=P1^0;
Voidmain(void)
{
IT0=1;
EA=1;
EX0=1;
While
(1);
}
Voidint0(void)interrupt0
{
P1_0=~P1^0;
}
12.如图5.12,已知MCS-51单片机系统晶振频率为12MHz,试编写程序,用定时器T0,工作方式2,使P1.0引脚输出如下周期方波。
解:
#include
SbitP1_0=P1^0;
Voidmain(void)
{
TMOD=0x02;
TL0=0x9c;
THO=0x9c;
EA=1;
ET0=1;
While
(1);
}
Voidtimer0()interrupt1
{
P1_0=~P1^0;
}
13.如图5.13,用P1.0驱动LED亮1秒、灭1秒地闪烁,设晶振频率为12MHz。
解:
图5.14定时器例2程序框图
#include
#defineuncharunsignedchar
SbitLed=P1^0;
UncharTimeCouter=100;
Voidmain(void)
{
TMOD=0x10;
TL1=0xf0;
TH1=0xd8;
EA=1;
ET1=1;
TR1=1;
Led=0
While
(1);
}
VoidTimer1()interrupt3
{
TL1=0xf0;
TH1=0xd8;
TimeCouter--;
If(TimeCouter==0)
{
TimeCouter=100;
Led=~Led;
}
}
15.
引脚输入被检测信号,用门控方式测量正脉冲宽度(设脉宽小于65.5ms)。
分析:
采用T1的门控制方式,使T1的启动受
的控制,当GATA=1,TR1=1时,一旦
引脚输入高电平时,T1才启动计时,直至出现低电平,停止计时。
为了测量确保真正从高电平上升沿开始计时,T1的计数要先等到出现一个高电平后,下一个高电平到来才开始进行,见图5.15。
程序主要部分如下:
解:
#include
#defineduintunsignedint
SbitInputPulse=P3^3;
Voidmain(void)
{
UnitPulseWidth;
TMOD=0x90;
TL1=0;
TH1=0;
While(InputPulse==0)
{
TR1=1;
}
While(InputPulse==0)
{
TR1=0;
PulseWidth=TH1*256+TL1;
}
}
16.见附录D,实验4,利用计数器,记录光电开关被遮断的次数,并用LCD1602显示出来。
解:
图5.16计数显示原理图
17.图5-17是MCS51串口配合8位并行输出串行移位寄存器74LS164扩展输出口的LED显示原理图。
编写程序将1,2,3,4,5,6,7,8送到8位LED中去显示。
解:
程序如下:
18.电路原理如图5-18,74LS165的输入端连接了8个开关(SW1)接地,编写程序,将其开关状态送8个LED显示。
图5.18原理图
解:
19.如图5.19,一个主机通过RS-485总线(采用Max487芯片)把2个从机(1#、2#)P1口的控制信息传送给主机,并用条形LED显示出来。
主机上有一个按键,每按键一次可改换主机所连接的从机号。
图5.19多机485通信电路原理图
解:
20.用串口调试软件(可以从网上下载)从PC机以串口方式1每隔1秒依次发送0-9,请编写一程序,在51单片机上接收PC的数据,同时立刻把收到的数据送回PC机,并在单片机的一位数码管把收到的数据显示出来。
解: