51单片机之中断系统


前言

        在上一篇文章中,简略地介绍了流水灯的实现,利用的是软件调用——通过指令,调用子程序,实现的。那么还有没有其他的方法实现流水灯呢?接下来介绍中断系统,利用中断实现流水灯。


一、中断系统介绍(简略版)

1.1 中断的概念

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

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

  • 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。

       可以通过图片理解:

         形象地解释为:你正在打电动(主程序),这时候杰哥敲门进来想要和你一起打电动(中断请求),你不想跟杰哥分享,便暂停游戏(中断当前程序),起来把杰哥请出去,关上房间门(执行中断处理程序),接着继续打电动(中断返回)。

1.2 中断源

        

        引起CPU中断的根源,称为中断源。即:中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。

1.2.1 中断源的种类

 51的中断系统共有5个中断源

  • 外部中断0(INT0):由P3.2引脚输入的中断请求信号。
  • 外部中断1(INT1):由P3.3引脚输入的中断请求信号。
  • 定时器T0中断(T0):由定时器/计数器T0的定时、计数溢出产生的中断请求。
  • 定时器T1中断(T0):由定时器/计数器T1的定时、计数溢出产生的中断请求。
  • 串行口中断(ES):由串行数据发生完成(TI)或串行数据接收完成(RI)产生的中断请求

1.2.2 中断地址入口

        下面是5个中断源的中断地址入口:

中断源中断入口地址
外部中断00003H
定时器T0000BH
外部中断10013H
定时器T1001BH
串行口中断ES0023H

        记忆中断地址入口:定时器的入口地址都与B有关,外中断的入口地址都与3有关,而串行口中断ES的入口地址最大为0023H,与0有关的中断(外中断0,定时器0)的入口地址都比与1有关的中断(外中断1,定时器1)入口地址小,同时外中断的入口地址又比定时器的入口地址小,所以可以将5个中断源的中断地址记忆为:外中断——定时器——外中断——定时器——串行口中断,再进一步(0比1小):外中断0——定时器0——外中断1——定时器1——串行口中断ES;定时器的入口地址都与B有关,外中断的入口地址都与3有关,按上面顺序是从小到大的地址:外中断0(0003H)——定时器0(000BH)——外中断1(0013H)——定时器1(001BH)——串行口中断ES(0023H)。

1.3 51单片机的中断系统的结构

         

  • (P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
  • TF0(TCON.5),单片机内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,TF0=1,并向CPU申请中断。
  • RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时TI=1,向CPU申请中断。

二、中断允许控制位

2.1 中断请求标志位

2.1.1 TCON寄存器

位:76543210
字节地址:88HTF1TR1TF0TR0IE1IT1IE0IT0

各标志位功能如下:

  • TF0——定时器T0的溢出中断请求标志位。溢出时由硬件置1,即开始发送中断请求;单片机响应中断后,重新由硬件清0。
  • TR0——定时器/计数器0的启动控制。功能详见定时器知识。
  • IE0——外部中断0的中断请求标志位。触发中断时由硬件置1,即开始发送中断请求;单片机响应中断后,重新由硬件清0。
  • IT0——外部中断0的触发方式选择位。令它为1,则对应引脚为下降沿触发中断;令它为0,则对应引脚为低电平触发方式。
  • TF1、TR1,IE1、IT1则为定时器1、外部中断1的相关标志位,功能与上述相同。

2.1.2  SCON寄存器

位:76543210
字节地址:98HSMDSM1SM2RENTB8RB8T1R1

 

各标志位功能如下:

  • TI——串行口发送完成中断请求标志位。串行口发送数据后,TI位被硬件置1;单片机响应串行口中断后,必须在服务程序中将TI手动清0。
  • RI——串行口接收完成中断请求标志位。串行口接收数据后,TI位被硬件置1;单片机响应串行口中断后,必须在服务程序中将TI手动清0。

2.2 中断控制

2.2.1 中断允许寄存器IE

位:76543210
字节地址:A8HEA--ESET1EX1ET0EX0

        各位的功能如下:

  1. EA——总中断允许控制位。用来开启或屏蔽所有的中断请求,令它为1,则开放中断请求,可以响应中断;令它为0,则屏蔽所有中断请求。
  2. ES——串行口中断允许控制位。为1时开放串行口中断请求,为0时屏蔽。
  3. ET1——定时器/计数器T1中断允许控制位。为1时开放TI的中断请求,为0时屏蔽。
  4. EX1——外部中断1中断允许控制位。为1时开放外部中断1的中断请求,为0时屏蔽。
  5. ET0、EX0则为T0、外部中断0的中断允许控制位。功能与上述相同。

2.2.2  中断优先级寄存器IR

位:76543210
字节地址:B8H---PSPT1PX1PT0PX0

        各位的功能如下:

  1. PS——串行口中断优先级控制位。
  2. PT1——TI中断优先级控制位。
  3. PX1——外部中断1中断优先级控制位。
  4. PT0、PX0则为T0、外部中断0的中断优先级控制位。功能与上述相同。

2.3 中断优先级别 (中断源)

        同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:

中断源中断标志中断服务程序入口优先级顺序
外中断0IE00003H
定时器0TF0000BH|
外中断1IE10013H|
定时器1TF1001BH|
串行口中断ESRI或RI0023H

2.4 中断响应的条件

中断响应的条件:

  • 中断源发出有效的中断请求,相应的中断请求标志位被置1;
  • 中断允许寄存器IE中的EA=1;
  • 相应中断源的中断请求被开放,即IE中相应位被置1

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

三、手动版流水灯控制实现

        在上一篇文章中利用软件调用实现了自动版流水灯,其代码如下:

ORG 0000H
    AJMP MAIN
    ORG 0030H
	MAIN:
		MOV P2,#11111111B
		MOV A,#0FEH
		MOV P2,A        
	LIGHT:
		ACALL DELAY              
		MOV P2,A
		SJMP LIGHT
 
	DELAY: 
		RL A  
		MOV R3,#10
	RF:  MOV R4,#200
	LF:  MOV R5,#250
	   DJNZ R5,$
		   DJNZ R4,LF
			DJNZ R3,RF
			RET
END

        用另外一种方式:外中断的方式,即将软件调用的子程序内容放到中断服务子程序中,同时的设置外中断的入口地址,开外中断:

  1. 中断请求标志位被置1——SETB IT0
  2. 中断允许寄存器IE中的EA=1——SETB EA
  3. 相应中断源的中断请求被开放——SETB EX0

        代码如下:

ORG 0000H
    AJMP MAIN
	ORG 0003H
		AJMP INT_0
    ORG 0030H
	MAIN:
		SETB EA
		SETB EX0
		SETB IT0
		MOV P2,#11111111B
		MOV A,#0FEH      
	LIGHT:             
		MOV P2,A
		SJMP LIGHT

	INT_0: 
		RL A  
		RETI
END

总结

        以上就是今天要讲的内容,本文仅仅简单介绍了使用中断实现手动版流水灯,具体实现根据实际情况而定。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值