单片机(AT89C51)中断系统详解和中断系统应用实验

什么叫做单片机的中断?

CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序, 叫做中断。

为什么要设置中断?

  ⑴ 提高CPU工作效率

  ⑵ 具有实时处理功能

  ⑶ 具有故障处理功能

  ⑷ 实现分时操作

 中断源

中断源是指能发出中断请求,引起中断的装置或事件。 80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:

 

⑴  INT0:外部中断0,中断请求信号由P3.2输入。

⑵  INT1:外部中断1,中断请求信号由P3.3输入。

T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。

T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。

⑸ 串行中断:包括串行接收中断RI和串行发送中断TI(P3.0/P3.1)

 MCS-51单片机的中断系统结构示意图


 

中断控制寄存器(三个方面四个功能寄存器)

  1. 中断请求:定时和外中断控制寄存器(TCON)& 串行控制寄存器(SCON)
  2. 中断允许控制寄存器(IE
  3. 中断优先级控制寄存器(IP

TCON

TCON中存放了 INT0、INT1、T0、T1 中断请求标志,TCON是一个可位寻址的寄存器,高4位用于定时器控制,低4位用于外中断控制。各位功能如下:

 

TCON寄存器的功能

位名称

 TF1

TF0

IE1IT1IE0IT0
功能

T1 

中断

标志

T0 

中断

标志

INT1

中断

标志

INT1

触发

方式

INT0

中断

标志

INT0

触发

方式

 各位上的主要功能:

TF1 —— T1溢出中断请求标志

            T1计数溢出后,TF1=1

TF0 —— T0溢出中断请求标志

            T0计数溢出后,TF0=1

IE1 —— 外中断中断请求标志

            P3.3引脚信号有效时,IE1=1

IE0 —— 外中断中断请求标志

            P3.2引脚信号有效时,IE0=1

IT1 —— 外中断触发方式控制位

            IT1=1,边沿触发方式;

            IT1=0,电平触发方式。

IT0 —— 外中断触发方式控制位

            IT1=1,边沿触发方式;

            IT1=0,电平触发方式。

SCON

SCON为可位寻址寄存器,直接地址为98H

SCON寄存器的功能

位名称

 

TIRI
功能

串行发送

中断标志

串行接收

中断标志

 各位上的主要功能:

TI —— 串行口发送中断请求标志

                1—发完,0—未发完

RI —— 串行口接收中断请求标志

                 当接收数据完毕时,RI=1,表示接收完一帧数据,请求中断,也可供查询, TI RI只能由程序清零

IE

80C51对中断源的开放或关闭由中断允许控制寄存器IE控制。 

IE控制寄存器的功能

位名称

 EA

ES

ET1EX1ET0EX0
中断源CPU串行口T1INT1

T0

 

INT0

 

 各位上的主要功能:

EA  —— CPU中断允许控制位

            EA=1CPU开中;

            EA=0CPU关中,且屏蔽所有5个中断源。

EX0 —— 外中断INT0中断允许控制位

            EX0=1INT0开中;EX0=0INT0关中。  

EX1 —— 外中断INT1中断允许控制位

            EX1=1INT1开中;EX1=0INT1关中。

ET0 —— 定时/计数器T0中断允许控制位

            ET0=1T0开中;ET0=0T0关中。

ET1 —— 定时/计数器T1中断允许控制位

            ET1=1T1开中;ET1=0T1关中。

ES  —— 串行口中断(包括串发、串收)允许控制位  

            ES=1,串行口开中;ES=0,串行口关中。

 80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”

 IP

    80C515个中断源,划分为2个中断优先级:高优先级和低优先级

IP控制寄存器的功能

位名称

 

PS

PT1PX1PT0PX0
中断源 —串行口T1INT1

T0

 

INT0

 

 

 

PX0 INT0中断优先级控制位。PX0=1,为高优先级;

                               PX0=0,为低优先级;

PX1 INT1中断优先级控制位。控制方法同上。

PT0 T0中断优先级控制位。控制方法同上。

PT1 T1中断优先级控制位。控制方法同上。

PS :串行口中断优先级控制位。控制方法同上。

 注:同级中的优先顺序为(从高到低) INT0、INT1、T0、T1、串行口

 中断处理过程

主要分为四步:中断请求、中断响应、中断服务、中断返回

 80C51五个中断入口地址

  1. INT00003H;         interrupt 0
  2. T0000BH;            interrupt 1
  3. INT10013H;           interrupt 2
  4. T1001BH;            interrupt 3
  5. 串行口:0023H;         interrupt 4

例子:

 用外中断1的中断方式控制P18盏发光管的亮暗,要求每按一次开关K,灯由亮变暗或由暗变亮,请编程实现。

原理图: 

 

 代码:

#include <reg51.h>   
sbit  K=P3^3;     	         //将K位定义为P3.3,该定义可省略
void main(void)
  {
   EA=1;         			//开放总中断
   EX1=1;        			//允许使用INT1外中断
   IT1=1;        			//选择负跳变来触发外中断
	P1=0xff;      		    //设定P1口为输入状态
	while(1) ;      		//无限循环
  }
void int1(void) interrupt 2        //外中断1的中断编号为2
{
  P1=~P1;  	     //每产生一次中断请求,P1取反一次
}

思考题:若上图的开关改成与P3.2连接,如何修改程序?

原理图:

 

代码:


#include<reg51.h>
sbit  K=P3^2;     	             //将K位定义为P3.2,该定义可省略
void main(void)
  {
   EA=1;         		    //开放总中断
   EX0=1;        		    //允许使用INT0外中断
   IT0=1;        		    //选择负跳变来触发外中断
   P1=0x00;      		    //设定P1口为输入状态
   while(1);      		    //无限循环
  }
void int1(void) interrupt 0         //外中断0的中断编号为0
{
  P1=~P1;  	                    //每产生一次中断请求,P1取反一次

}

 注意:当改变自己的中断方式的时候记得需要把和他配套的TCON和IE里面的值也改,否则会出错。

 No pains No result

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐