第04章 单片机中断系统 单片机原理与应用-基于实例驱动和Proteus仿真 (李林功) 课后答案 科学出版社
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
答:保护断点:单片机在进入中断服务程序前先将当前PC以及其它响应寄存器压入堆栈。转入中断服务程序:单片机将当前中断源的中断矢量赋给PC,相当于一条长跳转指令。
5.电路如图4-7所示。编写程序,用两级中断实现如下功能。电路正常工作时,两个LED同时点亮;若先按下按键K0后,LED1熄灭,LED0闪烁10次;若在LED0闪烁期间按下按键K1,则LED0熄灭,LED1闪烁,闪烁10次后,LED1熄灭,LED0继续闪烁。若先按下按键K1,则LED1闪烁,闪烁10次后,LED1熄灭。若在LED1闪烁其间,按下K0,不能中断LED1的闪烁;等到LED1闪烁结束后,LED0闪烁10次。闪烁结束后,恢复正常工作。
3.MCS-51单片机5个中断源的中断入口地址为:0003H、000BH、0013H、001BH、0023H。
4.当定时器/计数器1申请中断时,TF1为1,当中断响应后,TF1为0。当串口完成一帧字符接收时,RI为1,当中断响应后,RI为1,需要软件清零。
5.中断源扩展有三种方式,分别是定时器/计数器扩展、查询方式扩展、中断控制芯片扩展。
CLR EA;关中断
MOV P2,#00H;关闭LED
CALL DELAY20MS;延时
MOVA,P1;读按键状况
CPL A;取反
MOV P2, A;送LED显示
CALL DELAY20MS;延时
JB P3.2, WBI;循环闪烁
SETB EA;开中断
RETI;中断返回
END;汇编结束
C语言参考程序如下:
{uint j;
while(i--)
for (j=0;j<125;j++);
}
三、Proteus仿真
1.在Proteus下,仿真实现4.5节内容。
答:全自动洗衣机“启动/暂停”控制Ptoteus仿真
在全自动洗衣机工作过程中,当遇到意外事件发生,如衣物缠绕,或需要干预洗衣进程时,如需要添加消毒液,就需要暂停当前洗衣进程,处理这些事件。用图4-6电路模拟全自动洗衣机中断过程。假设全自动洗衣机有8个流程,用8个指示灯表示;用8个按键进行选择控制。当某个流程工作时,对应的指示灯点亮。当按下按键SW1时,中断正在进行的流程,对应的流程指示灯闪烁,洗衣机进入等待状态;再次按下SW1时,指示灯停止闪烁,变成点亮状态,表示洗衣机恢复原来被中断的洗衣流程。Proteus仿真电路及程序如下。
第4章 单片机中断系统习题解答
一、填空题
1.MCS-51单片机有5个中断源。上电复位时,同级中断的自然优先级从高至低依次为外中断0、定时器/计数器0、外中断1、定时器/计数器1、串行口,若IP=00010100B,优先级别最高者为外中断1、最低者为定时器/计数器1。
2.外部中断请求有低电平触发和下降沿触发两种触发方式。
#include<reg51.h>//包含头文件
void delayMs(unsigned int i)//定义延时程序
{
unsigned int j;//定义延时变量
while(i--)//延时外循环
{
for(j = 0; j < 125; j++);//延时外循环
}
}
main()//主程序
{P2=0;//关闭LED
答:参考程序如下
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED0 = P1^0;
sbit LED1 = P1^1;
void flashled0();
void flashled1();
void delayms(uint i);
{uchar i;
LED0 = 0;
for(i=0;i<10;i++)
flashled1();}
void flashled0()
{LED0 = 1;
delayms(250);
LED0 = 0;}
void flashled1()
{LED1 = 1;
delayms(250);
LED1 = 0;}
void delayms(uint i)
SETB IT0;边沿触发中断
SETB EX0;允许外中断0中断
SETB EA;开中断开关
LOOP: MOV A, P1;输入洗衣流程控制按键状态
CPL A;A的内容求反
MOV P2, A;输出驱动指示灯亮
CALL DELAY20MS;延时
SJMP LOOP;主循环
SJMP $;循环等待
DELAY20MS:;延时子程序程序入口
P2=0;//关闭LED
delayMs(20);//延时
P2=~P1;//读Байду номын сангаас按键状态送LED显示
delayMs(20);}//延时
while(P3^2==1);//循环闪烁
EA=1;//开中断
}
2.在Proteus下,仿真实现简答题第5题内容。
答:先在Proteus下画出电路图,程序如第5题所示。也可在此基础上进行扩展。
3.简述外中断 和 的2种触发方式(电平、边沿)的异同。
答:相同点:都是在检测到有效信号后将中断标志位置1,向CPU申请中断。
不同点:电平触发的有效信号是低电平;边沿触发的有效信号是负跳变,前一次检测到高电平,后一次检测到低电平。
4.MCS-51单片机响应中断时,如何保护断点?如何转移到中断服务应用程序?
IT0=1;//设置中断0边沿触发
EX0=1;//打开中断0允许
EA=1;//打开CPU中断允许
while(1)//设置主循环
{P2=~P1;//读取按键状态送LED显示
delayMs(20);//延时
}
}
exint0() interrupt 0//外中断0服务程序
{do//中断循环
{EA=0;//关中断
2.简述MCS-51中断过程
答:中断过程分中断申请、中断响应、中断处理、中断返回4个阶段。
中断请求:各中断源根据自身特点施加合适的信号,将对应的中断标志位置1向CPU申请中断。
中断响应:CPU对中断请求进行判断,形成中断矢量,转入响应的中断服务程序。
中断处理:根据各中断源要求执行响应中断服务程序。
中断返回:中断服务程序结束后,返回主程序。
二简答题
1.MCS-51单片机有几个中断源?各中断标志是如何产生的?如何撤销的?各中断源的中断矢量分别是什么?
答:MCS-51单片机有5个中断源。外中断0/1电平触发方式,在对应引脚上检测到低电平将中断标志位IE0/1置1向CPU申请中断,边沿触发方式,在对应引脚上检测到负跳变将中断标志位IE0/1置1向CPU申请中断;定时器/计数器0/1在计数溢出时将TF0/1置1向CPU申请中断;串行口发送1帧结束将TI置1或接收1帧数据将RI置1向CPU申请中断。对于T0/T1和边沿触发的INT0/INT1中断标志在进入中断服务程序后自动撤销;对于电平触发的INT0/INT1需在中断申请引脚处加硬件撤销电路;对于串行口中断标志TI/RI需在进入中断服务程序后用软件CLR RI或CLR TI,撤销。它们的中断矢量分别是:0003H、000BH、0013H、001BH、0023H。
图4-6 全自动洗衣机“启动/暂停”中断控制过程Proteus仿真
汇编语言参考程序如下:
ORG 0000H;在0000H单元存放转移指令
AJMP MAIN;转移至主程序
ORG 0003H;INT0中断入口
AJMP WBI;转中断服务程序
ORG 0030H;主程序
MAIN: MOV P2,#00H;全灯灭
main()
{PX1=1;IT0=1;IT1=1;
EX0=1;EX1=1;EA=1;
while(1);}
void serint0() interrupt 0
{uchar i;
LED1 = 0;
for(i=0;i<10;i++)
flashled0();}
void serint1() interrupt 2
MOV R6,#200;设置延时外循环数
LOOP1:MOV R7,#200;设置延时内循环数
LOOP2:NOP;延时指令
NOP;延时指令
NOP;延时指令
DJNZ R7,LOOP2;判断延时内循环是否结束
DJNZ R6,LOOP1;判断延时外循环是否结束
RET;延时子程序返回
WBI:;中断服务程序入口
5.电路如图4-7所示。编写程序,用两级中断实现如下功能。电路正常工作时,两个LED同时点亮;若先按下按键K0后,LED1熄灭,LED0闪烁10次;若在LED0闪烁期间按下按键K1,则LED0熄灭,LED1闪烁,闪烁10次后,LED1熄灭,LED0继续闪烁。若先按下按键K1,则LED1闪烁,闪烁10次后,LED1熄灭。若在LED1闪烁其间,按下K0,不能中断LED1的闪烁;等到LED1闪烁结束后,LED0闪烁10次。闪烁结束后,恢复正常工作。
3.MCS-51单片机5个中断源的中断入口地址为:0003H、000BH、0013H、001BH、0023H。
4.当定时器/计数器1申请中断时,TF1为1,当中断响应后,TF1为0。当串口完成一帧字符接收时,RI为1,当中断响应后,RI为1,需要软件清零。
5.中断源扩展有三种方式,分别是定时器/计数器扩展、查询方式扩展、中断控制芯片扩展。
CLR EA;关中断
MOV P2,#00H;关闭LED
CALL DELAY20MS;延时
MOVA,P1;读按键状况
CPL A;取反
MOV P2, A;送LED显示
CALL DELAY20MS;延时
JB P3.2, WBI;循环闪烁
SETB EA;开中断
RETI;中断返回
END;汇编结束
C语言参考程序如下:
{uint j;
while(i--)
for (j=0;j<125;j++);
}
三、Proteus仿真
1.在Proteus下,仿真实现4.5节内容。
答:全自动洗衣机“启动/暂停”控制Ptoteus仿真
在全自动洗衣机工作过程中,当遇到意外事件发生,如衣物缠绕,或需要干预洗衣进程时,如需要添加消毒液,就需要暂停当前洗衣进程,处理这些事件。用图4-6电路模拟全自动洗衣机中断过程。假设全自动洗衣机有8个流程,用8个指示灯表示;用8个按键进行选择控制。当某个流程工作时,对应的指示灯点亮。当按下按键SW1时,中断正在进行的流程,对应的流程指示灯闪烁,洗衣机进入等待状态;再次按下SW1时,指示灯停止闪烁,变成点亮状态,表示洗衣机恢复原来被中断的洗衣流程。Proteus仿真电路及程序如下。
第4章 单片机中断系统习题解答
一、填空题
1.MCS-51单片机有5个中断源。上电复位时,同级中断的自然优先级从高至低依次为外中断0、定时器/计数器0、外中断1、定时器/计数器1、串行口,若IP=00010100B,优先级别最高者为外中断1、最低者为定时器/计数器1。
2.外部中断请求有低电平触发和下降沿触发两种触发方式。
#include<reg51.h>//包含头文件
void delayMs(unsigned int i)//定义延时程序
{
unsigned int j;//定义延时变量
while(i--)//延时外循环
{
for(j = 0; j < 125; j++);//延时外循环
}
}
main()//主程序
{P2=0;//关闭LED
答:参考程序如下
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED0 = P1^0;
sbit LED1 = P1^1;
void flashled0();
void flashled1();
void delayms(uint i);
{uchar i;
LED0 = 0;
for(i=0;i<10;i++)
flashled1();}
void flashled0()
{LED0 = 1;
delayms(250);
LED0 = 0;}
void flashled1()
{LED1 = 1;
delayms(250);
LED1 = 0;}
void delayms(uint i)
SETB IT0;边沿触发中断
SETB EX0;允许外中断0中断
SETB EA;开中断开关
LOOP: MOV A, P1;输入洗衣流程控制按键状态
CPL A;A的内容求反
MOV P2, A;输出驱动指示灯亮
CALL DELAY20MS;延时
SJMP LOOP;主循环
SJMP $;循环等待
DELAY20MS:;延时子程序程序入口
P2=0;//关闭LED
delayMs(20);//延时
P2=~P1;//读Байду номын сангаас按键状态送LED显示
delayMs(20);}//延时
while(P3^2==1);//循环闪烁
EA=1;//开中断
}
2.在Proteus下,仿真实现简答题第5题内容。
答:先在Proteus下画出电路图,程序如第5题所示。也可在此基础上进行扩展。
3.简述外中断 和 的2种触发方式(电平、边沿)的异同。
答:相同点:都是在检测到有效信号后将中断标志位置1,向CPU申请中断。
不同点:电平触发的有效信号是低电平;边沿触发的有效信号是负跳变,前一次检测到高电平,后一次检测到低电平。
4.MCS-51单片机响应中断时,如何保护断点?如何转移到中断服务应用程序?
IT0=1;//设置中断0边沿触发
EX0=1;//打开中断0允许
EA=1;//打开CPU中断允许
while(1)//设置主循环
{P2=~P1;//读取按键状态送LED显示
delayMs(20);//延时
}
}
exint0() interrupt 0//外中断0服务程序
{do//中断循环
{EA=0;//关中断
2.简述MCS-51中断过程
答:中断过程分中断申请、中断响应、中断处理、中断返回4个阶段。
中断请求:各中断源根据自身特点施加合适的信号,将对应的中断标志位置1向CPU申请中断。
中断响应:CPU对中断请求进行判断,形成中断矢量,转入响应的中断服务程序。
中断处理:根据各中断源要求执行响应中断服务程序。
中断返回:中断服务程序结束后,返回主程序。
二简答题
1.MCS-51单片机有几个中断源?各中断标志是如何产生的?如何撤销的?各中断源的中断矢量分别是什么?
答:MCS-51单片机有5个中断源。外中断0/1电平触发方式,在对应引脚上检测到低电平将中断标志位IE0/1置1向CPU申请中断,边沿触发方式,在对应引脚上检测到负跳变将中断标志位IE0/1置1向CPU申请中断;定时器/计数器0/1在计数溢出时将TF0/1置1向CPU申请中断;串行口发送1帧结束将TI置1或接收1帧数据将RI置1向CPU申请中断。对于T0/T1和边沿触发的INT0/INT1中断标志在进入中断服务程序后自动撤销;对于电平触发的INT0/INT1需在中断申请引脚处加硬件撤销电路;对于串行口中断标志TI/RI需在进入中断服务程序后用软件CLR RI或CLR TI,撤销。它们的中断矢量分别是:0003H、000BH、0013H、001BH、0023H。
图4-6 全自动洗衣机“启动/暂停”中断控制过程Proteus仿真
汇编语言参考程序如下:
ORG 0000H;在0000H单元存放转移指令
AJMP MAIN;转移至主程序
ORG 0003H;INT0中断入口
AJMP WBI;转中断服务程序
ORG 0030H;主程序
MAIN: MOV P2,#00H;全灯灭
main()
{PX1=1;IT0=1;IT1=1;
EX0=1;EX1=1;EA=1;
while(1);}
void serint0() interrupt 0
{uchar i;
LED1 = 0;
for(i=0;i<10;i++)
flashled0();}
void serint1() interrupt 2
MOV R6,#200;设置延时外循环数
LOOP1:MOV R7,#200;设置延时内循环数
LOOP2:NOP;延时指令
NOP;延时指令
NOP;延时指令
DJNZ R7,LOOP2;判断延时内循环是否结束
DJNZ R6,LOOP1;判断延时外循环是否结束
RET;延时子程序返回
WBI:;中断服务程序入口