第5、6、7、8章习题一、问答题1.说明51单片机读端口锁存器的必要性,为什么?答:MCS-51系列单片机有不少指令可以直接进行端口操作,例如:ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOV PX.x,C、CLR PX.x、SETB PX.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-1 P1结构图加以说明。
20 答:在单片机执行读引脚操作时,如果锁存器原来寄存的数据Q=0,那么由于Q=1,将使V1导通,引脚被始终钳位在低电平上,不可能输入高电平。
为此,使用读引脚指令前,必须先用输出指令置Q=1,使V1截止。
5.简述89c51各IO口的驱动能力。
答:各IO口单个引脚,允许灌入的最大电流为10 mA;每个8 位的接口(P1、P2 以及P3),允许向引脚灌入的总电流最大为15 mA;P0 的驱动能力最强,允许灌入的最大总电流为26 mA;全部的四个接口所允许的灌电流之和,最大为71 mA。
但引脚“输出高电平”的时候,输出电流不到1 mA。
6.什么是中断?中断与子程序最本质的区别?答:中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,自动转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序的过程。
中断是单片机实时地处理内部或外部事件的一种内部机制。
当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。
中断与子程序的最本质的区别:子程序是预先安排好的;中断是随机发生的。
7.编制中断服务程序时,为什么在主程序的初始化程序中,必须设置EA=1 这条指令(或达到同样功能的对IE赋值的指令),以及在中断服务程序中为什么通常需要保护现场和恢复现场?答:中断允许寄存器IE中有1个总的开关中断控制位EA,当EA=0时,所有的中断请求被屏蔽,CPU不接受任何中断;只有当EA=1时,CPU才开放中断。
所以主程序的初始化程序中,必须设置EA=1(或者用IE=1xxxxxxxB,x表示1或0)这条指令。
现场是指中断时刻单片机中某些寄存器和储存器单元中的数据或状态,为了使中断服务程序的执行不破坏这些数据和状态,以免在中断返回后影响主程序的运行,因此要这些数据和状态送入堆栈保存,这就是现场保护。
中断结束后,在返回主程序前,则需要把保存的现锁存器 D CP Q Q P1.x 读锁存器写锁存器内部总线读引脚内部上拉电阻图5-1 P1口结构图 2 1 V1 VCC21 场数据和状态从堆栈中弹出,以恢复那些寄存器和存储器单元中的原有内容,这就是现场恢复。
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的区别?22 答: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),控制开关被关断,不能计数。
控制启动、停止计数方式如下:●非门控方式当GA TE=0,控制权由TRx 决定,TRx=1计数启动,TRx=0计数停止。
这种方式实际上是用软件控制启动、停止计数。
方式1的逻辑结构振荡器÷12 控制Tx TRx GATE & ≥ 1 INTx 中断TFx THx (8 位) C/T=0 C/T=1 TLx (8 位)23 ●门控方式当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。