单片机原理及应用(C51版)教案第4章 单片机的中断系统_第1页
单片机原理及应用(C51版)教案第4章 单片机的中断系统_第2页
单片机原理及应用(C51版)教案第4章 单片机的中断系统_第3页
单片机原理及应用(C51版)教案第4章 单片机的中断系统_第4页
单片机原理及应用(C51版)教案第4章 单片机的中断系统_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章

单片机的中断系统从应用的角度重点讲述MCS-51单片机中断系统的结构、工作原理、实现过程和C语言编程方法。第4章

单片机的中断系统中断系统的基本概念和基本结构4.1中断系统的控制与实现4.2中断系统的处理过程4.3中断系统的应用4.44.1.1中断的基本概念当CPU正在处理某件事情的时候,单片机外部或内部发生的某一事件请求CPU迅速去处理。CPU暂时中止当前的工作,转去处理所发生的事件。事件处理完毕后,CPU再回到刚刚被暂停的地方继续原来的工作。上述过程叫做中断。4.1中断系统的基本概念和基本结构能引起CPU产生中断的事件称为中断源。中断源向CPU提出的处理请求,称为中断请求。CPU接受中断请求,暂时中止自身的事情转去处理事件的过程,称为中断响应过程。CPU对事件的整个处理过程,称为中断服务。为实现中断而编写的服务程序叫做中断服务程序。事件处理完毕,再回到原来被中断的地方,称为中断返回。单片机是通过相应的硬件电路和软件设置来完成中断功能的,所以将能完成中断功能的硬件系统和软件系统统称为中断系统。4.1.1中断的基本概念MCS-51单片机的中断系统包括5个中断源、2个中断优先级,4个用于中断控制的寄存器IE、IP、TCON和SCON。

4.1.2中断系统的基本结构MCS-51单片机的中断系统包括5个中断源、2个中断优先级,4个用于中断控制的寄存器IE、IP、TCON和SCON。

4.1.2中断系统的基本结构INT0—外部中断请求0,由引脚P3.2提供,中断请求标志为IE0,由IT0选择其有效方式。INT1—外部中断请求1,由引脚P3.3提供,中断请求标志为IE1,由IT1选择其有效方式。T0—定时器/计数器T0溢出中断请求,中断请求标志为TF0。T1—定时器/计数器T1溢出中断请求,中断请求标志为TF1。TxD/RxD—串行中断请求,中断请求标志为TI或RI。MCS-51单片机通过中断请求标志寄存器TCON、串行口控制寄存器SCON、中断允许控制寄存器IE和中断优先级控制寄存器IP对中断实现控制。4.2.1中断请求控制1.TCON中的中断标志位

D7D6D5D4D3D2D1D0

(88H)8FH8EH8DH8CH8BH8AH89H88HTCONTF1TF0IE1IT1IE0IT04.2中断系统的控制与实现①IT0—外部中断0触发方式控制位当IT0=0时,外部中断0为电平触发方式当IT0=1时,外部中断0为边沿触发方式与中断有关的标志位的含义如下:电平触发方式时,外部中断源的有效低电平必须保持到请求获得响应时为止,否则就会漏掉;在中断服务结束之前,中断源的有效低电平必须撤除,否则中断返回之后将再次产生中断。边沿触发方式时,在相继两次采样中,先采样到外部中断输入为高电平,下一个周期采样到为低电平,则置位中断申请标志IE0。若CPU暂时不能响应,中断申请标志也不会丢失,直到CPU响应此中断时才清“0”。4.2.1中断请求控制②IE0—外部中断0的中断请求标志位当CPU检测到引脚上出现有效的中断信号时(若IT0=0,且检测到引脚为低电平时;若IT0=1,且检测到引脚当出现负跳变时),IE0由硬件置“1”,向CPU申请中断。③IT1—外部中断1触发方式控制位其意义与IT0类似。④IE1—外部中断1的中断请求标志位其意义与IE0类似。⑤TF0—T0溢出中断请求标志位当启动定时器/计数器T0计数后,T0从初值开始加1计数,当最高位产生溢出时,TF0由硬件置“1”,向CPU申请中断。CPU响应TF0中断时,由硬件清“0”TF0。⑥TF1—T1溢出中断请求标志位功能和TF0类似。4.2.1中断请求控制①TI—串行口发送中断标志位每当串行口发送完一帧串行数据后,TI由硬件自动置“1”。CPU响应该中断时,不能自动清除TI,必须用软件对TI标志位清“0”。②RI—串行口接收中断标志位每当串行口接收完一帧串行数据后,RI由硬件自动置“1”。CPU响应该中断时,不能自动清除RI,必须用软件对RI标志位清“0”。2.SCON中的中断标志位D7D6D5D4D3D2D1D0(98H)9FH9EH9DH9CH9BH9AH99H98HSCONTIRI4.2.1中断请求控制MCS-51单片机的中断系统包括5个中断源、2个中断优先级,4个用于中断控制的寄存器IE、IP、TCON和SCON。

4.1.2中断系统的基本结构中断源的开放和屏蔽由IE控制(1,开放;0,禁止)D7D6D5D4D3D2D1D0(A8H)AFHAEHADHACHABHAAHA9HA8HIEEAESET1EX1ET0EX04.2.2中断允许控制复位后,IE各位被复位成“0”状态,所有中断请求被禁止。若使某一个中断源被允许中断,除了IE相应的位的被置“1”,还必须使EA位=1。改变IE的内容,既可用字节操作指令来编写,也可以由位操作指令来实现。MCS-51单片机的中断系统包括5个中断源、2个中断优先级,4个用于中断控制的寄存器IE、IP、TCON和SCON。

4.1.2中断系统的基本结构MCS-51有两个中断优先级,可实现两级中断嵌套。两级中断嵌套的过程如下所示:4.2.3中断优先级控制中断优先级遵循的原则:低优先级中断请求不得打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务。任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断源所中断。中断优先级由IP控制(1,高级;0,低级)

D7D6D5D4D3D2D1D0(B8H)BFHBEHBDHBCHBBHBAHB9HB8HIPPSPT1PX1PT0PX0

复位后,IP清0,即全部设置为低优先级中断。4.2.3中断优先级控制同一优先级的自然顺序(自高至低):INT0、T0、INT1、T1、串口。

MCS-51的中断系统有两个不可寻址的“优先级激活触发器”:一个用来指示某高优先级的中断正在执行,所有后来的中断均被阻止;另一个用来指示某低优先级的中断正在执行,所有同级中断都被阻止,但不阻断高优先级的中断请求。中断处理过程可分3个阶段:中断响应、中断处理和中断返回。4.3.1中断响应1.中断响应条件①有中断源发出中断请求②中断总允许位EA=1③申请中断的中断源的中断允许位为1④无同级或更高级中断正在被服务⑤当前指令已执行到最后一个机器周期⑥若当前正在执行的指令是RETI或是访问IE、IP的指令,该指令以及紧接着的另一条指令已执行完。4.3中断系统的处理过程2.中断响应过程将相应优先级状态触发器置1(阻断后来同级或低级中断)执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC

)执行中断服务程序

4.3.1中断响应各中断源的入口地址如右表所示:中断源入口地址INT00003HT0000BHINT10013HT1001BHRxD/TxD0023H状态触发器的复位由中断返回指令RETI控制3.中断响应时间中断响应时间最短为3个机器周期受阻时要附加3~5个机器周期(无同级或高级中断正进行)

查询周期不是当前指令的最后机器周期(如MUL,+3)查询周期恰逢RETI类指令(且后跟MUL指令+5)所以,中断响应时间最长为8个机器周期4.3.1中断响应4.中断请求的撤销中断请求被响应后,要及时撤销中断请求,否则会引起重复响应。1)定时器/计数器中断请求的撤销

中断请求被响应后,硬件自动将中断请求标志位TF0或TF1清“0”

,因此定时器/计数器中断请求是自动撤销的。2)外部中断请求的撤销该中断请求的撤销,包括中断标志位的清“0”和外中断信号的撤销。边沿触发方式:中断被响应后,

IE0或IE1由硬件自动清“0”;由于跳沿信号过后就消失了,所以外部中断请求也是自动撤销的。4.3.1中断响应

电平触发方式:中断被响应后,IE0或IE1由硬件自动清“0”;但中断请求信号的低电平可能继续存在,在以后的机器采样中,又会把已清“0”的IE0或IE1重新置“1”。要彻底解决电平方式外部中断请求的撤销,需在中断响应后把中断请求信号引脚从低电平强制改变为高电平。因为CPU无法直接干预外电路,所以在引脚处用硬件电路(再配合相应的软件)来撤销外电路过期的中断请求。为实现上图所示的撤消中断请求功能,需要在中断服务程序中加如下两条指令:P1|=0x01;//将P1.0位置1P1&=0xfe;//再将P1.0位清04.3.1中断响应3)串行口中断请求的撤销串行口中断被响应后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收操作还是发送操作。所以串行口中断请求的撤销只能使用软件方法,即在中断服务程序中用如下指令清除标志位:

TI=0;//清TI标志位RI=0;//清RI标志位4.3.1中断响应中断处理包括两部分内容:保护现场和为中断源服务。现场:中断时刻单片机中某些寄存器和存储器单元中的数据或状态。保护现场:将现场送入堆栈保存。现场恢复:从堆栈弹出保存的现场。采用汇编语言编写中断程序时,应该根据中断处理程序的具体情况来决定保护哪些内容。采用C51编写中断服务函数时可不必考虑这些问题。4.3.2中断处理中断服务程序最后指令必须是RETI,其功能:将断点从堆栈弹送PC,CPU从原断点继续执行将相应优先级状态触发器清0,恢复原来工作状态

注意采用汇编语言编程时,不能用RET代替RETI。

4.3.3中断返回中断源中断请求

标志位名称置位条件置位方法清0方法中断方式查询方式INT0IE0单片机12引脚输入有效信号硬件自动置位硬件自动清0软件编程清0INT1IE1单片机13引脚输入有效信号硬件自动置位硬件自动清0软件编程清0T0TF0计数器/定时器0产生计数溢出(计满)硬件自动置位硬件自动清0软件编程清0T1TF1计数器/定时器1产生计数溢出(计满)硬件自动置位硬件自动清0软件编程清0TxDTI发送缓冲器空(发完一个字节)硬件自动置位软件编程清0软件编程清0RxDRI接收缓冲器满(收到一个字节)硬件自动置位软件编程清0软件编程清0中断请求标志位的变化情况4.3.4中断请求的深入理解其中:interrupt后面的n是中断编号,对于MCS-51单片机,n的取值范围为0~4,编译器从8n+3处产生中断向量。中断源中断编号中断向量00003HT01000BH20013HT13001BHRxD/TxD40023H中断服务函数的一般形式为:函数类型

函数名(形式参数表)interruptn[usingm]

MCS-51单片机的中断编号和中断向量如下表所示:4.4.1中断函数4.4中断系统的应用中断程序一般包含中断初始化程序和中断服务程序两部分。中断初始化程序的设计内容:(1)设置中断允许控制寄存器IE。(2)设置中断优先级寄存器IP。(3)对外中断源,要设置中断请求是采用电平触发方式还是跳沿触发方式。(4)如果是定时器/计数器中断或串行通信中断,应该设置相应的工作方式。4.4.2中断程序的内容【例4-1】试编写设置外部中断源1为边沿触发的高优先级中断源的初始化程序。4.4.2中断程序的内容【例4-1】试编写设置外部中断源1为边沿触发的高优先级中断源的初始化程序(假设已包含reg51.h)。参考程序1(采用位操作指令)参考程序2(采用字节传送指令)EA=1;//开启中断允许总控制位EX1=1;//允许外部中断1中断PX1=1;//设外部中断1为高优先级IT1=1;//设外部中断1为边沿触发方式IE=0x84;//为IE赋值10000100BIP=0x04;//为IP赋值00000100BTCON=0x04;

//为TCON赋值00000100B4.4.2中断程序的内容【例4-2】如下图所示,89C51的P1口接了8个发光二极管,在外部中断0输入引脚(P3.2)接了一只按键K0,在外部中断1输入引脚(P3.3)接了一个按键K1。试编程实现如下功能:每按动K1按键一次,从右向左依次点亮8个发光二极管中的一个。4.4.3外部中断源的应用程序51单片机的中断系统结构图

1按动K1后,IE1=1,向CPU发出申请IT1=0:电平触发方式IT1=1:边沿触发方式内部CPU分析中断控制原理1

IE1变成1后,申请就能送到CPU了吗?IT1=1;EA=1;EX1=1;中断初始化程序为响应该中断,主程序要做哪些准备?51单片机的中断系统结构图

分析中断控制原理1

如果CPU响应该中断,程序结构如何?51单片机的中断系统结构图

分析中断控制原理#include<reg51.h> //预处理命令void函数名()interrupt2//中断函数定义{ …… //中断函数体}voidmain()

//主函数{

IT1=1;

EA=1;

EX1=1; //中断初始化程序 while(1) { …… //主函数体 }}1

如果CPU响应该中断,程序结构如何?51单片机的中断系统结构图

分析中断控制原理#include<reg51.h> //预处理命令voidmain()

//主函数{

IT1=1;

EA=1;

EX1=1; //中断初始化程序 while(1) { …… //主函数体 }}void函数名()interrupt2//中断函数定义{ …… //中断函数体}【例4-2】如下图所示,89C51的P1口接了8个发光二极管,在外部中断0输入引脚(P3.2)接了一只按键K0,在外部中断1输入引脚(P3.3)接了一个按键K1。试编程实现如下功能:每按动K1按键一次,从右向左依次点亮8个发光二极管中的一个。4.4.3外部中断源的应用程序#include<reg51.h> //预处理命令voidmain()

//主函数{

IT1=1;

EA=1;

EX1=1; //中断初始化程序 while(1) { …… //主函数体 }}void函数名()interrupt2//中断函数定义{ …… //中断函数体}#include <reg51.h> //51系列单片机头文件#include <intrins.h> //包含_crol_函数所在的头文件#define ucharunsignedchar//宏定义uchar temp; //定义一个变量,用来给P1口赋值void main() //主函数{ EA=1; //开总中断

EX1=1; //开外中断1

PX1=1; //外中断1设成高级别中断

IT1=1; //外中断1设成边沿触发 temp=0xfe; //赋初值,预备右边第一个灯亮while(1); //主程序循环,原地等待中断申请}void int1()interrupt2//外部中断1的中断服务函数{P1=temp; //输出到P1口 temp=_crol_(temp,1);//左环移一次}参考程序4.4.3外部中断源的应用程序【例4-3】对于上题所示的电路,试编程实现如下功能:当无外部中断请求时,每隔1s,从右向左依次点亮8个发光二极管中的1个;当按键K1被按下时,8只发光二极管的显示状态改为闪烁显示(假设二极管点亮及熄灭的时间都是1s),闪烁5次后,继续依次点亮。假设系统时钟频率为12MHz。

4.4.3外部中断源的应用程序#include<reg51.h>//预处理命令voidmain()

//主函数{

IT1=1;

EA=1;

EX1=1; //中断初始化程序 while(1) {……}//主函数体}void函数名()interrupt2//中断函数定义{ …… }参考程序#include <reg51.h> #include <intrins.h> #define ucharunsignedchar #define uintunsignedint uchar temp; void delaynms(uintn) { uint i,j; for(i=0;i<n;i++) for(j=0;j<125;j++);}4.4.3外部中断源的应用程序void main() { EA=1; EX1=1; PX1=1; IT1=1; temp=0xfe; while(1) { P1=temp; temp=_crol_(temp,1); delaynms(1000); }}void int1()interrupt2{ ucharm; for(m=0;m<5;m++) { P1=0; delaynms(1000); P1=0xff; delaynms(1000); }}扩展外部中断源的方法有:定时器/计数器扩展法采用中断和查询相结合的扩展法采用硬件电路扩展法4.4.4外部中断源的扩展及应用中断和查询相结合的外部中断源扩展法:利用MCS-51的两个外部中断线,每一个中断输入线可以通过“与”或“异或”的关系连接多个外部中断源,同时利用MCS-51的I/O端口作为各中断源的识别标志,其原理图分别如下所示:4.4.4外部中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论