单片机作业答案第5678章教材.docx
- 文档编号:25238167
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:50
- 大小:269.24KB
单片机作业答案第5678章教材.docx
《单片机作业答案第5678章教材.docx》由会员分享,可在线阅读,更多相关《单片机作业答案第5678章教材.docx(50页珍藏版)》请在冰豆网上搜索。
单片机作业答案第5678章教材
第5、6、7、8章习题
一、问答题
1.说明51单片机读端口锁存器的必要性,为什么?
答:
MCS-51系列单片机有不少指令可以直接进行端口操作,例如:
ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOVPX.x,C、CLRPX.x、SETBPX.x。
这些指令的执行过程分成“读-修改-写”三步,即先将端口的数据读入CPU,在ALU中进行运算,运算结果再送回端口。
执行“读-修改-写”类指令时,CPU实际上是通过三态门读回锁存器Q端的数据。
这种读锁存器的方式是为了避免可能出现的一种错误。
例如,用一根口线直接去驱动端口外的一个NPN晶体管基极,当向口线写“1”时,该晶体管导通,导通了的三极管集极与发射极间只有0.7V,会把端口引脚的高电平拉低,这样直接读引脚就会把本来的“1”误读为“0”。
但若从锁存器Q端读,就能避免这样的错误,得到正确的数据。
也就是说,如果某位输出为1时,有外接器件拉低电平,读端口引脚与读锁存器就有区别了,读锁存器状态是1,读引脚状态是0,锁存器状态取决于单片机企图输出什么电平,引脚状态则是引脚的实际电平。
因此,当作为读引脚方式使用时,应先对该口写“1”,使场效应管截止,再进行读操作,以防止场效应管处于导通状态,使引脚为“0”,而引起误读。
2.请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常工作电流为8~mA,导通压降为0.6V),为什么?
答:
因为LED导通时,电压降是基本固定的(如0.6V)。
为了使LED既能正常工作(电流为8~20mA),又不至于被过大的电流损坏,所以必须加一个限流电阻,电阻值为100~500Ω。
3.简述在使用普通按键的时候,为什么要进行去抖动处理,如何处理。
答:
键抖动会引起一次按键被误读多次。
为了确保CPU对键的一次闭合仅做一次处理,有必要去除键抖动。
在键闭合稳定时,读取键的状态;在键释放稳定后,再作处理。
按键的抖动,可用硬件或软件两种方法消除。
4.简述LED数码管动态扫描的原理及其实现方式。
答:
动态扫描的原理是利用人的视觉暂留,让人觉得各位LED同时点亮一样。
逐位轮流点亮各个LED,每一位保持一定时间,在5-10ms之内再一次点亮,重复不止,就可以实现动态扫描。
5.为什么51单片机在读口的引脚状态时,许先向端口写“1”,请用图5-1P1结构图加以说明。
答:
在单片机执行读引脚操作时,如果锁存器原来寄存的数据Q=0,那么由于
=1,将使V1导通,引脚被始终钳位在低电平上,不可能输入高电平。
为此,使用读引脚指令前,必须先用输出指令置Q=1,使V1截止。
5.简述89c51各IO口的驱动能力。
答:
各IO口单个引脚,允许灌入的最大电流为10mA;
每个8位的接口(P1、P2以及P3),允许向引脚灌入的总电流最大为15mA;
P0的驱动能力最强,允许灌入的最大总电流为26mA;
全部的四个接口所允许的灌电流之和,最大为71mA。
但引脚“输出高电平”的时候,输出电流不到1mA。
6.什么是中断?
中断与子程序最本质的区别?
答:
中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,自动转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序的过程。
中断是单片机实时地处理内部或外部事件的一种内部机制。
当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。
中断与子程序的最本质的区别:
子程序是预先安排好的;中断是随机发生的。
7.编制中断服务程序时,为什么在主程序的初始化程序中,必须设置EA=1这条指令(或达到同样功能的对IE赋值的指令),以及在中断服务程序中为什么通常需要保护现场和恢复现场?
答:
中断允许寄存器IE中有1个总的开关中断控制位EA,当EA=0时,所有的中断请求被屏蔽,CPU不接受任何中断;只有当EA=1时,CPU才开放中断。
所以主程序的初始化程序中,必须设置EA=1(或者用IE=1xxxxxxxB,x表示1或0)这条指令。
现场是指中断时刻单片机中某些寄存器和储存器单元中的数据或状态,为了使中断服务程序的执行不破坏这些数据和状态,以免在中断返回后影响主程序的运行,因此要这些数据和状态送入堆栈保存,这就是现场保护。
中断结束后,在返回主程序前,则需要把保存的现场数据和状态从堆栈中弹出,以恢复那些寄存器和存储器单元中的原有内容,这就是现场恢复。
8.单片机89C51有哪些中断源,CPU对其中断如何请求?
答:
89C51中断系统有5个中断源:
INT0:
外部中断0请求,低电平有效。
通过P3.2引脚输入。
INT1:
外部中断1请求,低电平有效。
通过P3.3引脚输入。
T0:
定时器/计数器0溢出中断请求。
T1:
定时器/计数器1溢出中断请求。
TXD/RXD:
串行口中断请求。
当串行口完成一帧数据的发送或接收时,便可请求中断。
9.简述单片机89C51中断的自然优先级顺序,如何提高某一中断源的优先级别。
答:
中断源,其自然优先级的顺序如下:
外部中断0(PX0) 最高
定时器/计数器0溢出中断(PT0)
外部中断1(PX1)
定时器/计数器1溢出中断(PT1)
串行口中断(PS) 最低
SFR中的IP寄存器中有对应的控制位,若某几个控制位为1,则相应的中断源就规定为高优先级中断;反之,若某几个控制位为0,则相应的中断源就规定为低优先级中断。
当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部自然优先级的顺序。
10.简述51系列单片机中断响应的条件。
答:
有中断源发出中断请求;
中断总允许位EA=1,即CPU开中断;
申请中断的中断源的中断允许位为1,即中断没有屏蔽;
无同级或更高级中断正在被服务;
当前的指令周期已经结束;
若现在指令为RETI或者是访问IE或IP指令,则该指令以及紧接着的另一条指令已执行完。
11.用汇编语言编程时,在51系列单片机执行中断服务程序的指令较多时,为什么一般都要在入口地址(又称中断矢量地址)开始的地方放一条跳转指令?
答:
因为51系列单片机的两个相邻中断源中断服务程序入口地址相距只有8个单元,当中断服务程序较长容纳不下的,一般都要在相应的中断服务程序入口地址中放一条跳转指令。
12.为什么一般都把主程序的起始地址放在0030H之后?
答:
因为0000H~0030H中有中断的矢量地址,为了避免冲突,一般都把主程序的起始地址放在0030H之后。
13.中断服务子程序返回指令RETI和普通子程序返回指令RET的区别?
答:
RETI指令在返回的同时清除相应的优先级触发器,以便允许下次中断。
14.简述51单片机定时/计数器4种工作模式的特点。
答:
模式1:
是16位的定时器/计数器;
模式2:
把TL0(或TL1)配置成一个可以自动重装载的8位定时器/计数器;
模式3:
对T0和T1大不相同。
若将T0设置为模式3,则TL0和TH0被分为两个相互独立的8位计数器。
定时器T1无工作模式3状态。
模式0:
与模式1几乎完全相同,唯一的差别是模式0中,寄存器TL0用5位,TH0用8位。
这种方式是为了与48系列兼容的,目前一般不使用。
15.定时/计数器用作定时器时,其计数脉冲由谁提供?
定时时间与哪些因素有关?
答:
定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供。
定时时间与时钟频率和定时初值有关。
16.画出51单片机计数/定时器方式1的逻辑结构框图,说明它们的工作原理,如何使用门控和非门控启动计数的方法。
答:
如图所示,当GATE=0时,经非门后,或门输出1,这样TRx将直接控制定时器的启动和关闭。
这时如果TRx=1,则接通控制开关,定时器从初值开始计数直至溢出。
溢出时,16位加计数器为0,TFx置位,并申请中断。
如要循环计数,则定时器需重置初值,且需用软件将TFx复位。
TRx=0,则与门被封锁,控制开关被关断,停止计数。
当GATE=1时,与门的输出由输入INTx的电平和TRx位的状态来确定。
这时若TRx=1,则引脚INTx可直接开启或关断计数器:
当INTx为高电平时,允许计数;低电平时则停止计数。
若TRx=0,则与门被封锁(即输出为0),控制开关被关断,不能计数。
控制启动、停止计数方式如下:
●非门控方式
当GATE=0,控制权由TRx决定,TRx=1计数启动,TRx=0计数停止。
这种方式实际上是用软件控制启动、停止计数。
●门控方式
当GATE=1、TRx=1,控制权由INTx决定INTx=1计数启动,INTx=0计数停止。
这种方式实际上是用外部硬件INTx引脚控制启动、停止计数。
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:
同步移位寄存器输入/输出方式,常用于扩展I/O口。
波特率固定为振荡频率的1/12,并不受PCON寄存器中SMOD位的影响。
方式1:
用于串行发送或接收,为10位通用异步接口。
TXD与RXD分别用于发送与接收数据。
收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。
波特率由定时器T1的溢出率与SMOD值同时决定。
方式2:
用于串行发送或接收,为11位通用异步接口。
TXD与RXD分别用于发送与接收数据。
收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位可编程的第9数据位和1位停止位,共11位。
波特率取决于PCON中SMOD位的值:
当SMOD=0时,波特率为晶振的1/64;当SMOD=1时,波特率为晶振的1/32。
方式3:
用于串行发送或接收,为11位通用异步接口。
TXD与RXD分别用于发送与接收数据。
帧格式与方式2相同,波特率与方式1相同。
20.单片机的串口可以与PC的串口直接连接进行通讯吗?
为什么?
应如何连接?
答:
MCS-51系列单片机串行口与PC机的RS-232C接口不能直接对接,PC机RS232采用负逻辑电平,即逻辑“0”:
+3V~+15V;逻辑“1”:
-3V~-15V,单片机采用的是TTL电平,即电压小于0.4V为低电平,大于2.4V为高电平;因此二者不能直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏!
必须进行电平转换。
常用的转换芯片有MAX232等。
连接图如上。
21.试叙述利用SM2控制位进行多级通讯的过程?
答:
见8.7及8.7.1节。
22.RS485总线有何特点?
答:
RS-232C是利用传输信号线与公共地之间的电压差,RS-485是利用信号导线之间的信号电压差。
它通过传输线驱动器,把逻辑电平变换成电位差,完成始端的信号传送;通过传输线接收器,把电位差转换成逻辑电平,完成终端的信息接收。
RS-485比-232C传输距离长、速度快,传输速率最大可达10Mb/s,最大距离可达1200m。
RS-485是一点对多点的通讯接口,一般采用双绞线的结构。
普通的PC机一般不带RS-485接口,因此要使用RS-232/RS-485转换器。
在计算机和单片机组成的RS-485通信系统中,通常下位机由单片机系统组成,主要完成工业现场信号的采集和控制。
上位机为工业PC机,负责监视下位机的运行状态,并对其状态信息进行集中处理,以图文方式显示下位机的工作状态和工业现场被控设备的工作状态。
系统中的各节点(包括上位机)的识别是通过设置不同的站地址来实现的。
单片机可以通过MAX1487等来完成TTL/RS-485的电平转换。
23.简述LCM1602的主要显示性能。
答:
LCM1602可显示192个5x7点阵字符,主要是数字和英文大小写字母(1602显示的数字和字母的码值,与ASCII码表中的数字和字母的码值相同)。
另外,它具有64B的自定义字符RAM,可自行定义8个5x7点阵字符用于显示。
24.如何用软件消除键盘的抖动?
答:
由于按键是机械开关结构,所以当用手按下其中一个键时,往往会出现所按键在闭合位置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。
在释放一个键时,也会出现类似的情况,这就是键的抖动,抖动的持续时间不一,但通常不会大于10ms。
若抖动问题不解决,就会引起对闭合键的多次读入。
对于键抖动最方便的解决方法就是当发现有键按下后,不是立即进行扫描,而是延时大约10ms后再进行。
由于一个键按下的时间一般会持续上百毫秒,所以延迟10ms后再扫描处理并不迟。
25.如何确定LED数码显示器的段码?
答:
根据所选用的LED数码管的极性(共阳极还是共阴极)以及数码中每一个笔段的引脚与CPU(或其它控制芯片)IO口的引脚的连接来定(称自定的段码表)。
一般资料上提供的段码表是标准接法的段码,即数码管的a、b、c、d、e、f、g、dp的引脚要依次接在CPU的Px.0~Px.7上,这种接法有时会使在PCB布线的时候不大方便,不如自定的段码表灵活。
26.段码表数组变量一定要放在CODE存储区吗?
放在其它存储区会减少程序的代码吗?
答:
最好放在Code存储区,当然也可以放在内部RAM或外部RAM区,但这样作会占用本来就非常稀少的内部RAM资源和不多的外部RAM资源。
由于放在其它区域仍然要采用程序中的段码表,所以不仅不能减少程序的代码量还会增加把段码表传送的程序指令,增加程序的代码数量。
二、选择题
1.89c51单片机在晶振12MHz时,计数器对外部脉冲最大计数频率为___C___。
A.12MHzB.1MHzC.0.5MHzD.6MHz
2.89c51外接晶振频率为6MHz,其计数器允许输入外部脉冲的最高频为A。
A.0.25MHzB.1MHzC.6MHzD.12MHz
3.下列几种中断优先级的次序中,C为可实现的次序。
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.下列说法中不正确的是D
A、同一级别的中断请求按时间的先后顺序响应。
B、同级中断不能嵌套。
C、低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求。
D、同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。
三、填空题
1.89c51有5个中断源,可分为2个优先级。
上电复位时INT0中断源的优先级别最高。
2.当单片机接到外设的中断申请时,单片机响应中断,单片机将暂停主程序的执行,转去执行 中断服务 程序,执行完 中断服务 ,再执行 主 程序。
3.89c51单片机的中断源有:
外部0中断,定时器T0中断,外部1中断,定时器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)本程序执行时,变量a的内容将。
3)程序在语句处发生中断,执行完中断服务程序后,返回到语句处。
4)本程序中断服务程序的入口地址为。
5)是否可将interrupt1改为interrupt3?
。
答案:
1)T0;2;
2)+1;
3)while
(1);while
(1);
4)000BH;
5)不能。
四、是非题
1.MCS-51中的基本型89c51共有五个中断源,这五个中断请求源全部来自外部引脚。
F
2.对MCS-51系列芯片中,当使用内部RAM时,EA引线端应接高电平;而不使用内部RAM时,EA引线端则应接低电平。
F
3.MCS-51中的89c51单片机P3口的各口线,必须作为第二功能使用。
F
五、编程题
1.在P3.2-P3.4三个引脚上分别接有三个发光二极管,用C51编程实现三个发光二极管依次闪亮,循环不止。
电路原理图如图5-2所示。
解:
程序框图如图5-3。
其C51程序如下:
#include
//LED数码管位连接定义
sbitLED1=P3^2;//定义SFR中引脚的“位”
sbitLED2=P3^3;
sbitLED3=P3^4;
/*-------------------------------------------
功能:
毫秒延时函数
参数:
当晶振为11.0592MHz时,x为ms数,
误差都为16us;x=1000为1秒
--------------------------------------------*/
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数码管静态显示
解:
程序框图如图5-5,程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodedispcode[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
/*-------------------------------------------------------------
功能:
毫秒延时函数
参数:
当晶振为11.0592MHz时,x为ms数,,误差都为17us;x=1000为1秒
---------------------------------------------------------------*/
voiddelayms(unsignedintx)
{
unsignedcharj;
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”。
解:
电路原理图如图5-6。
程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
/*----------------------------------------------------------------
LED数码管位选线连接定义
注:
LED数码管段码线连接在P0口
----------------------------------------------------------------*/
sbitLED1=P2^0;
sbitLED2=P2^1;
sbitLED3=P2^2;
sbitLED4=P2^3;
ucharcodedispcode[]=//LED显示0~9、黑的段码定义
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
ucharledbuf[4];//4LED显示缓冲区,ledbuf[0]为高位,ledbuf[4]为低位
/*---------------------------------------------------------------------功能:
延时子程序
参数:
x-需延时的毫秒数当晶振为11.0592MHz时,延时为xms
--------------------------------------------------------------------*/
voiddelayms(uintx)
{
ucharj;
while(x--)
{
for(j=0;j<113;j++);
}
}
/*----------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 作业 答案 5678 教材