第04章 单片机中断系统 习题解答

更新时间:2024-04-02 17:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第4章 单片机中断系统 习题解答

一、填空题

1.MCS-51单片机有 5 个中断源。上电复位时,同级中断的自然优先级从高至低依次为 外中断0、定时器/计数器0、外中断1、定时器/计数器1、串行口 ,若IP=00010100B,优先级别最高者为 外中断1 、最低者为 定时器/计数器1 。

2.外部中断请求有 低电平 触发和 下降沿 触发两种触发方式。 3.MCS-51单片机5个中断源的中断入口地址为: 0003H、000BH、0013H、001BH、0023H 。

4.当定时器/计数器1申请中断时,TF1为 1 ,当中断响应后,TF1为 0 。当串口完成一帧字符接收时,RI为 1 ,当中断响应后,RI为 1 ,需要 软件 清零。 5.中断源扩展有三种方式,分别是 定时器/计数器扩展、查询方式扩展、中断控制芯片扩展 。 二 简答题

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。 2.简述MCS-51中断过程

答:中断过程分中断申请、中断响应、中断处理、中断返回4个阶段。

中断请求:各中断源根据自身特点施加合适的信号,将对应的中断标志位置1向CPU申请

中断。

中断响应:CPU对中断请求进行判断,形成中断矢量,转入响应的中断服务程序。 中断处理:根据各中断源要求执行响应中断服务程序。 中断返回:中断服务程序结束后,返回主程序。

3.简述外中断INT0和INT1的2种触发方式(电平、边沿)的异同。

答:相同点:都是在检测到有效信号后将中断标志位置1,向CPU申请中断。

不同点:电平触发的有效信号是低电平;边沿触发的有效信号是负跳变,前一次检测到高电

平,后一次检测到低电平。

4.MCS-51单片机响应中断时,如何保护断点?如何转移到中断服务应用程序?

答:保护断点:单片机在进入中断服务程序前先将当前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次。闪烁结束后,恢复正常工作。

答:参考程序如下 #include

#define uint unsigned int #define uchar unsigned char sbit LED0 = P1^0; sbit LED1 = P1^1; void flashled0(); void flashled1(); void delayms(uint i); 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++)

8051

P1.0 P1.1 LED0 R LED1 Vcc P3.2 P3.3 R K0 K1

flashled0();}

void serint1() interrupt 2 { 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) {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-6 全自动洗衣机“启动/暂停”中断控制过程Proteus仿真

汇编语言参考程序如下:

ORG 0000H ;在0000H单元存放转移指令

AJMP MAIN ;转移至主程序 ORG 0003H ;INT0中断入口 AJMP WBI ;转中断服务程序 ORG 0030H ;主程序 MAIN: MOV P2,#00H ;全灯灭

SETB IT0 ;边沿触发中断 SETB EX0 ;允许外中断0中断 SETB EA ;开中断开关 LOOP: MOV A, P1 ;输入洗衣流程控制按键状态

CPL A ;A的内容求反 MOV P2, A ;输出驱动指示灯亮 CALL DELAY20MS ;延时 SJMP LOOP ;主循环

SJMP $ ;循环等待 DELAY20MS: ;延时子程序程序入口 MOV R6,#200 ;设置延时外循环数 LOOP1: MOV R7,#200 ;设置延时内循环数 LOOP2: NOP ;延时指令 NOP ;延时指令 NOP ;延时指令 DJNZ R7,LOOP2 ;判断延时内循环是否结束 DJNZ R6,LOOP1 ;判断延时外循环是否结束 RET ;延时子程序返回

WBI: ;中断服务程序入口

CLR EA ;关中断 MOV P2,#00H ;关闭LED

CALL DELAY20MS ;延时

MOV A,P1 ;读按键状况

CPL A ;取反 MOV P2, A ;送LED显示

CALL DELAY20MS ;延时

JB P3.2, WBI ;循环闪烁 SETB EA ;开中断 RETI ;中断返回 END ;汇编结束

C语言参考程序如下:

#include void delayMs(unsigned int i) {

unsigned int j; while(i--) {

for(j = 0; j < 125; j++); } }

main() { P2=0; IT0=1; EX0=1; EA=1; while(1) { P2=~P1; delayMs(20); } }

exint0() interrupt 0 { do { EA=0; P2=0; delayMs(20); P2=~P1; delayMs(20);} while(P3^2==1); EA=1; }

//包含头文件 //定义延时程序 //定义延时变量 //延时外循环 //延时外循环 //主程序 //关闭LED //设置中断0边沿触发 //打开中断0允许 //打开CPU中断允许 //设置主循环 //读取按键状态送LED显示//延时 //外中断0服务程序 //中断循环 //关中断 //关闭LED //延时 //读取按键状态送LED显示//延时 //循环闪烁 //开中断 2.在Proteus下,仿真实现简答题第5题内容。

答:先在Proteus下画出电路图,程序如第5题所示。也可在此基础上进行扩展。

本文来源:https://www.bwwdw.com/article/41dr.html

Top