单片机原理及应用课后习题答案第5章作业

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章中断系统作业
1. 外部中断1所对应的中断入口地址为()H。

2. 对中断进行查询时,查询的中断标志位共有、_ _、、_ 和_ 、_ _ 六个中断标志位。

3.在MCS-51中,需要外加电路实现中断撤除的是:()
(A) 定时中断(B) 脉冲方式的外部中断
(C) 外部串行中断(D) 电平方式的外部中断
4.下列说法正确的是:()
(A) 同一级别的中断请求按时间的先后顺序顺序响应。

()
(B) 同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。

()
(C) 低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求
能中断低优先级中断请求。

()
(D) 同级中断不能嵌套。

()
5.在一般情况下8051单片机允许同级中断嵌套。

()
6.各中断源对应的中断服务程序的入口地址是否能任意设定? ()
7.89C51单片机五个中断源中优先级是高的是外部中断0,优先级是低的是串行口中断。

()
8.各中断源发出的中断申请信号,都会标记在MCS-51系统中的()中。

(A)TMOD (B)TCON/SCON (C)IE (D)IP
9. 要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器
IE的内容应是()
(A)98H (B)84H (C)42 (D)22H
10.编写出外部中断1为负跳沿触发的中断初始化程序。

11.什么是中断?其主要功能是什么?
12. 什么是中断源?MCS-51有哪些中断源?各有什么特点?
13. 什么是中断嵌套?
14.中断服务子程序与普通子程序有哪些相同和不同之处?
15. 中断请求撤除的有哪三种方式?
16. 特殊功能寄存器TCON有哪三大作用?
17. 把教材的P82页的图4.24改为中断实现,用负跳变方式,中断0(INT0)显示“L2”,中断1(INT1)显示“H3”。

(可参考第四章的电子教案中的例子)18.第5章课后作业第9题。

第五章中断系统作业答案
1. 外部中断1所对应的中断入口地址为(0013)H。

2. 对中断进行查询时,查询的中断标志位共有IE0 、_TF0_、IE1 、TF1_ 和_TI 、_RI_六个中断标志位。

【实际上只能查询TF0、TF1、TI、RI】
3.在MCS-51中,需要外加电路实现中断撤除的是:(D)
(A) 定时中断(B) 脉冲方式的外部中断
(C) 外部串行中断(D) 电平方式的外部中断
4.下列说法正确的是:(A C D )
(A) 同一级别的中断请求按时间的先后顺序顺序响应。

(YES)
(B) 同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。

(ERR)
(C) 低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优
先级中断请求。

(YES)
(D) 同级中断不能嵌套。

(YES)
5.在一般情况下8051单片机允许同级中断嵌套。

(ERR)
6.各中断源对应的中断服务程序的入口地址是否能任意设定? (NO)
7.89C51单片机五个中断源中优先级是高的是外部中断0,优先级是低的是串行口中断。

(YES)
8.各中断源发出的中断申请信号,都会标记在MCS-51系统中的(B)中。

9. 要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容
应是( A )【98H=1001 1000 )。

IT1=1;
EX1=1;
EA=1;
【注意点:最好分开写,用位来写,不要用TCON和IE特殊功能寄存器】
11.什么是中断?其主要功能是什么?
中断是指计算机暂时停止原程序的执行,转而为外部设备服务(执行中断服务程序),并在服务完成后,自动返回原程序执行的过程。

可以提高CPU的工作效率,可以提高实时数据的处理时效。

中断技术主要用于实时监测与控制,采用中断可以解决单片机在查询方式中的等待现象,可以大大地提高了单片机的工作效率和实时性。

12. 什么是中断源?MCS-51有哪些中断源?各有什么特点?
引起CPU暂停正在运行程序的事件,称为中断源。

有5个:外部中断0、定时器0、外部中断1、定时器1、串行通信。

外部中断源(INT0、INT1)的中断请求信号是从P3.2和P3.3引脚输入,通过设置TCON 的IT0和IT1来规定是电平申请还是下降沿申请。

对下降沿触发的中断标志在进入中断服务程序时,中断标注位自动清零。

内部中断源(T0、T1)的中断信号是在计数器从全“1”变为全“0”溢出时,向CPU 提出中断申请,中断标志在进入中断服务程序时,自动清零。

内部串行的中断信号是在串行口每发送完一帧数据(方式0为8位,方式1为10位)或接收完一帧数据后,向CPU 提出中断申请。

中断标志在进入中断服务程序时,必须用软件清零。

13. 什么是中断嵌套?
中断系统在执行一个中断服务程序时,如果有一个优先级更高的中断提出中断请求时,那么会暂时停止当前执行的低优先级的中断服务程序,去处理高优先级的中断服务程序,处理完后在返回到被中断的低优先级的服务程序继续执行,这个过程称为中断嵌套。

14.中断服务子程序与普通子程序有哪些相同和不同之处? 相同点:都是从主函数转到子函数,子函数执行完后又返回主函数。

不同点:中断函数是发生中断后,自动执行的,不需要主函数调用,是否执行,取决于相应的中断事件是否发生。

而普通子函数要主函数调用才能执行。

普通子函数调用时,直接进入函数入口地址
中断函数在中断发生时,先进入中断入口地址,再通过中断入口地址处放置的一条无条件转移指令,使程序执行转向中断服务程序入口。

中断函数的定义和普通函数的定义不同,中断服务程序用interrupt 关键字来定义。

15. 中断请求撤除的有哪三种方式?
(1)由单片机内部硬件自动复位的有:对于定时器/计数器T0、T1的溢出中断和采用跳变方式触发的外部中断请求,在CPU 响应中断后,由内部硬件自动复位中断标志TF0、TF1、IE0和IE1,而实现自动撤除中断请求。

(2)需用软件清除相应标志的有:
【用查询方式时,定时器T0、T1的TF0和TF1也需要用软件来清零;】 响应串行口的中断后,CPU 无法知道是接收中断还是发送中断,还需要判断这两个中断标志位,以判定是接收操作还是发送操作,然后才清除相应的标志。

所以串行口中断请求的撤销只能使用软件的方法,即用如下指令在中断服务程序中对串行口中断标志位进行清除: TI =0; // 清TI 标志位【在reg51.h 中,已经定义】 RI=0; // 清RI 标志位
(3)既无硬件也无软件措施的:对于采用电平触发方式的外部中断请求,CPU 对0INT 、1INT 引脚上的中断请求信号无控制能力,IE0或IE1受外部引脚中断信号(0INT 、1INT )直接控制,CPU 无法控制IE0或IE1,也无应答信号。

为保证在CPU 响应中断后、中断服务程序返回前,要撤除中断请求,需要另外考虑撤除中断请求信号的方法,可通过外加硬件电路,并配合软件来解决,如下图。

中断响应后,利用D 触发器的SD 端接80C51的P1.0端。

只要P1.0端输出一个负脉冲就可以使D 触发器置“1”,撤销低电平的中断请求信号。

16. 特殊功能寄存器TCON 有哪三大作用?
(1)锁存4个中断请求标志(外部中断0、定时器0、外部中断1、定时器1);
(2)设置0INT 和1INT 的两种触发方式(低电平或下降沿) (3) 定时器的启动标志
17. 把教材的P87页的图4.24改为中断实现,用负跳变方式,中断0(INT0)显示“L2”,中断1(INT1)显示“H3”。

#include <reg51.h>
unsigned char led_mod[]={0x38,0x5b,0x76,0x4f}; // L2H3
unsigned char i,led_pos; sbit P17=P1^7;
void delay(unsigned int count) { unsigned char i; while(count--)
for(i=0; i<120;i++); }
void xint0(void) interrupt 0 { led_pos=2; }
void xint1(void) interrupt 2 { led_pos=0; }
main()
{ IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
P1=0xfd; //0xfd=1111 1101
while(1)
{ f or(i=0;i<2;i++)
{ P2=led_mod[i+led_pos];
delay(5);
P1=~P1; }
}
}
18.第5章课后作业第9题。

805l单片机只有两个外部中断源,若要扩展成8个外部中断源,请画出实现这种扩展的硬件线路图,并说明如何确定各中断源的优先级。

解:用按钮开关模拟中断源的中断请求,INT0单独作为一个中断源,INT1扩展成7个中断源,有中断请求时,借助于P2口识别是这七个中断源是哪个请求中断,为了验证正确性,如果是INT0中断,则在P0口的数码管上显示0,是INT1中断,则根据从上到下是哪个中断源在P0口的数码管上显示1—7。

具体电路和程序如下:
#include <reg51.h>
char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void INT0_srv (void) interrupt 0 using 1 //外部中断0处理程序{
P0=led_mod[0];
}
void INT1_srv (void) interrupt 2 using 2 //外部中断1处理程序{
char intnum;
intnum=P2;
switch(intnum){
case 0xfe:P0=led_mod[1];break;
case 0xfd:P0=led_mod[2];break;
case 0xfb:P0=led_mod[3];break;
case 0xf7:P0=led_mod[4];break;
case 0xef:P0=led_mod[5];break;
case 0xdf:P0=led_mod[6];break;
case 0xbf:P0=led_mod[7];
}
}
void main(){
EA=1;
EX0=1;
EX1=1;
P0=0;
while(1);
}。

相关文档
最新文档