STC89C52之中断系统 ---- 51单片机的核心 自学笔记

 

目录

一、中断系统

1.1、概念

1.2、中断系统的功能与优点

1.3、89C52单片机中断系统的结构

二、中断允许控制

三、中断请求标志     

3.1、TCON的中断标志

     ​

2.2、优先级问题

2.3、51单片机的中断优先级的三条原则

四、51单片机中断处理过程

4.1、中断响应条件

4.2、使用中断的注意事项

 

五、代码示例

5.1、k3按键点亮LED模块的第一个LED灯

5.2、k4点亮led


一、中断系统

1.1、概念

cpu在处理某一事件A时,发生了另外一事件B请求cpu迅速去处理(中断发生);

cup暂时中断当前的工作,转去处理事件B(中断响应和中断服务);

待cup将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回);

这一过程称为中断。

STC89C52之中断系统 ---- 51单片机的核心 自学笔记_第1张图片

引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。cup暂时中断原来的事务A,转去处理事件B。对事件B

处理完毕后,再回到原来被中断的地方(即:断点)称为中断返回,实现上述中断功能的部件称为中断系统

STC89C52之中断系统 ---- 51单片机的核心 自学笔记_第2张图片

1.2、中断系统的功能与优点

  • 解决了快速主机与慢速i/o设备的数据传送问题。
  • 分时操作:cpu可以为多个i\o设备服务,提供计算机的利用率。
  • 实时操作:cpu能够及时处理应用系统的随机事件,系统实时性大大增强。
  • 可靠性高:cpu具有处理设备故障及掉电等突发性事件的能力,从而使系统可靠性提高。

1.3、89C52单片机中断系统的结构

89C52的中断系统有5个中断源,2个优先级,可实现二级中断嵌套。

二级中断嵌套:在一个中断里面还可以实现一个中断

 

STC89C52之中断系统 ---- 51单片机的核心 自学笔记_第3张图片

TF0,TF1:T1溢出(外部)中断请求标志   TF0=1溢出   TF0不等于1    计数器、定时器正常工作

RI:接收完成标志          RI =1 一帧数据接受完成      向cpu发送中断请求

TI:发送完成标志           TI=1 一帧数据发送完成     向cpu发送中断请求

IE0、IE1:中断标志位

二、中断允许控制

 

 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

EX0(IE,0):外部中断0允许位;                置1允许外部中断                       置0不允许外部中断

ET0(IE,1):定时/计数器T0中断允许位      置1允许定时器\计数器中断        置0 不允许打开中断

EX1(IE,2):外部中断1允许位;               置1允许外部中断                       置0不允许外部中断

ET1(IE,3);定时\计数器T1中断允许位        置1允许定时器\计数器中断        置0 不允定时器\计数器中断

ES(IE,4);串行口中断允许位                       置1允许串行口中断                   置0不允许串行口中断

EA(IE,7);CPU中断允许位(总允许)位 ;        如果EA不置1,上述如EX1,ET1置1也效

三、中断请求标志     

3.1、TCON的中断标志

     

ITO(TCON.0):外部中断0触发控制位。

  •  当IT0=0时,为电平触发方式      低电平
  • 当IT0=1时,为边沿触发方式(下降沿有效)

IE0(TCON.1):外部中断0中断请求标志位。

IT1(TCON.2):外部中断1触发方式控制位。

IE1(TCON.3):外部中断1中断请求标志位。

TF0(TCON.5):定时/计数器T0溢出中断请求标志位。    置1溢出

TF1(TCON.7):定时/计数器T1溢出中断请求标志位。

2.2、优先级问题

同一优先级中的中断申请不止一个时,则有中断优先权排队问题,同一优先级的中断优先排队,由

中断系统的硬件确定的自然优先级形成,排列如下

STC89C52之中断系统 ---- 51单片机的核心 自学笔记_第4张图片

 

STC89C52之中断系统 ---- 51单片机的核心 自学笔记_第5张图片

2.3、51单片机的中断优先级的三条原则

CPU同时收到几个中断时,首先响应优先级别最高的中断请求。

正在进行的中断过程不能被新的同级或低优先级的中断请求所中断

正在进行的优先级中断服务,能被高优先级中断请求所中断

为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器,其中一个置1,表示正在响应高优先级的中断,他将阻断后来所有的中断请求:另外一个置1,表示正在响应低优先级中断,他将阻断后来所有的低优先级中断请求。

四、51单片机中断处理过程

4.1、中断响应条件

  1. 中断源有中断请求
  2. 此中断的中断允许为1;
  3. CPU开中断(即EA=1)

同时满足以上三条件,cpu才可能响应中断

 

4.2、使用中断的注意事项

  1. 你想使用的是那个中断是那个,选择相应的中断号;
  2. 你希望触发中断的条件是什么?
  3. 你希望中断之后干什么

 

五、代码示例

5.1、k3按键点亮LED模块的第一个LED灯

#include 
typedef unsigned int u16;
typedef unsigned char u8;
sbit k3=P3^2;	 // 定义按键k3
sbit led = P2^0; // 定义 P20口是led
/*
  1,单片机-->LED&交通灯模块
  P20-->D1
  2,单片机-->独立按键模块
  P32-->K3

*/
void delay(u16 i)	   // 延时函数
{
while(i--);
}
void IntoInit()	      // 外部中断函数
{
//设置 INT0
IT0=1;//跳变沿触发方式(下降沿)
EX0=1;//打开 INT0 的中断允许。
EA=1;//打开总中断
}
 void main()
{
	   IntoInit();   // 设置外部中断
	   while(1);
}

void into() interrupt 0
{
delay(1000);  // 延时消抖
if(k3==0)
{
led=~led;
}
}

5.2、k4点亮led

#include 	               // 此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;		   // 宏定义  数据类型的声明
typedef unsigned char u8;

sbit k4=P3^3;	                   // 定义按键k4
sbit led = P2^0;                   // 定义 P20口是led
/*
  1,单片机-->LED&交通灯模块
		   		P20-->D1
		   2,单片机-->独立按键模块
		   		P33-->K4	

*/
void delay(u16 i)	   // 延时函数
{
while(i--);
}
void IntoInit()	      // 外部中断函数
{
//设置 INT0
IT1=1;//跳变沿触发方式(下降沿)
EX1=1;//打开 INT0 的中断允许。
EA=1;//打开总中断
}
 void main()
{
	   IntoInit();   // 设置外部中断
	   while(1);
}
/*
中断0 外部知中断0	        interrupt 0
中断道1 定时器1中断		    interrupt 1
中断2 外部中断1		        interrupt 2
中断3 定时器2中断		    interrupt 3
中断4 串口中断	            interrupt 4

*/
void into() interrupt 2	   // interrupt 一个中断处理函数
{
delay(1000);  // 延时消抖
if(k4==0)
{
led=~led;
}
}

中断0        外部知中断0            interrupt 0
中断1       定时器1中断            interrupt 1
中断2       外部中断1                interrupt 2
中断3       定时器2中断            interrupt 3
中断4        串口中断                interrupt 4

你可能感兴趣的:(单片机)