51单片机中断系统

发布时间:2024年01月19日

一.单片机各引脚回顾

开发板上面使用的是DIP封装(双列直插式),有40只引脚!
在这里插入图片描述

40只引脚按其功能来分,可分为3类:

  • 电源和时钟引脚
  • 控制引脚
  • I/O口引脚

1.电源和时钟引脚

该类包含:VccVssXTAL1XTAL2

  • 电源引脚接入单片机工作电源:
    Vcc(40脚)接+5V电源;Vss(20脚)接地。
  • 时钟引脚
    XTAL1XTAL2(18、19号引脚)分别接我们开发板的外部晶振,为单片机提供工作频率节拍。

有人说实物上有白线表示20脚附近是3个GND,那是因为它是芯片引出来的排针,有时候需要接各种外设而提供VCCGND的端口,它并不是芯片内部。

2.控制引脚

  • RST(RESET)9号引脚是复位信号输入端,当单片机运行时,在此引脚加上持续两个机器周期的高电平时,就可以完成复位操作。Vpd为本引脚的第二功能,即备用电源输入端。当主电源Vcc发生故障,降低到某一规定值的低电平时,将+5v电源自动接入RST端,为内部RAM提供备用电源,从而保证单片机复位后能继续运行。

有人不是很理解复位,简单说一下就是单片机在运行程序时,假设总共有50行代码,你关闭电源时单片机恰好运行在20行代码,那么你下次开机时,程序必须从头开始运行,有个叫程序指针的东西就会自动从20行转到第1行从而完成自动复位。手动复位就是程序执行一般,手动让程序从头开始执行。

  • EA为内外部程序储存器选择端(31号引脚)。当EA为高电平时,单片机访问内部程序储存空间,为低电平时访问外部程序存储空间。Vpp编程电压的输入端。
  • ALE(30号引脚)为地址所存允许信号,PROG为对片内为EPROMS单片机编写程序时,此引脚做编程脉冲输入。
  • PSEN(29号引脚)当单片机访问外部程序储存器时。此引脚为读取读取外部储存选通信号。

早期的单片机内部存储空间比较小,需要与外部程序存储空间一起使用,所以诞生了这些引脚,但是现在的单片机内部存储空间足够使用,所以这些引脚在现在没什么用,了解即可。重点是理解前面的RST引脚。

3.I/O口引脚

P0是三态I/O口,P1口内部有上拉普通准双向IO口,P2口内部有上拉普通准双向I/O口,P3口内部有上拉普通准双向I/O口(有第二功能,可以通过配置特殊功能寄存来实现)

这里需要注意的是P0口如果需要接高电平,那么我们需要接一个上拉电阻;而P2P1口则不需要,除此之外,P3口还有第二功能。

P3口各引脚第二功能定义:

  • P3.0: RXD串行口输入
  • P3.1: TXD串行口输出
  • P3.2: INT0外部中断0输入
  • P3.3: INT1外部中断1输入
  • P3.4: T0定时器0外部输入
  • P3.5: T1定时器1外部输入
  • P3.6:WR外部写控制
  • P3.7:RD外部读控制

中断系统中,有很多种中断,比如串口中断、外部中断、定时器中断……,我们后面慢慢学,今天这里只是了解中断系统。

二.中断系统

什么是中断系统?

基本解释:
计算机执行某程序时,发生了紧急事件或有特殊请求,CPU暂停某程序的执行,转而去处理上述事件或请求,处理完毕后再重新执行某程序的过程叫做中断

为了让我们更加方便的理解中断这个概念,举例:假设你正在吃饭,这时接到快递员电话叫你下楼取快递只等5分钟,这就是中断请求。然后你回答:“好的,我现在就来”这就是中断响应。接着你停止吃饭下楼去取快递,这就是中断处理;取完快递,你再回来接着吃饭,这就叫做中断返回。从以上可以看出,中断分为4个步骤: 中断请求->中断响应->中断处理->中断返回。

其实如果学习了计算机组成原理或操作系统,这个比较号好理解的,这里的中断步骤太非专业化了,你甚至可以熟悉中断的整个流程并且由什么完成。

三.知识点补充

1.数据输入/输出传送方式

  • 无条件传送方式:一方对另一方来说总是准备好的。
  • 查询传送方式(LOOK UP):传送前一方先查询另一方的状态,若已经准备好就传送,否则就继续查询/等待。
  • 中断传送方式(IRQ) :一方通过申请中断的方式与另一方进行数据传送。
  • 直接存储器存取方式(DMA):双方直接通过总线传送数据,不经CPU中转。适用于数据量大、高速通讯的设备,不占用CPU时间。

好理解吧,学了计算机组成原理我们还知道通道传送方式。

2.中断传送方式特点

数据传送的双方平时各自做自己的工作,一旦甲方要求与乙方进行数据传送,就主动发出信号提出申请,乙方接到申请后若同意传送,安排好当前的工作,再响应与甲方发生数据传送。完事后,回去继续做打断前的工作。
中断功能强弱是计算机性能优劣的重要标志:

  • 提高CPU效率
  • 解决速度矛盾
  • 实现并行工作
  • 应付突发事件.·····

3.中断系统结构

在这里插入图片描述

4.中断源

51子系列允许5个中断源:

  • 外部中断源 (2个) :
    • INTO一一由P3.2端口线引入,低电平或下降沿引起。
    • INT1一一由P3.3端口线引入,低电平或下降沿引起。
      这两个外部中断源标志和它们的触发方式控制位由特殊功能寄存器TCON的低4位控制。
  • 内部中断源 (3个) :
    • T0一一定时器/计数器0中断,由TO回零溢出引起。
    • T1一一定时器/计数器1中断,由T1回零溢出引起
    • TX/RX——串行I/O中断,串行端口完成一帧字符发送/接收后引起。
      这3个内部中断源的控制位分别锁存在特殊功能寄存器TCONSCON中。
      在这里插入图片描述

四.如何使用中断系统

1.允许中断

STC89C51RC/RD+系列单片机CPU对中断源的开放或屏蔽,每一个中断源是否被允许中断,是由内部的中断允许寄存器IE (地址为A8H)和XICON (地址为COH) 控制的。
允许中断,结合上一部分的结构图,说的就是IE(允许中断寄存器)部分,里面有一个总开关EA,只有总开关EA=1被打开时,各中断才能够允许进入下一阶段;除了总开关EA要打开之外,各种中断对应的开关也需要打开,比如INT0要打开对应的EX0,T0要打开对应的ET0……此外,IE的一个显著特征是可位寻址,可位寻址的体现在我们写代码时就是可以直接赋值,比如EA=1,EX0=1等等。
在这里插入图片描述

  • EA:CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自己的中断允许控制位控制。
  • ET2: 定时/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁止T2中断。
  • ES : 串行口1中断允许位。ES=1,允许串行口1中断:ES=0,禁止串行口1中断。
  • ET1:定时/计数器T1的溢出中断允许位。ET1=1,允许T1中断:ET1=0,禁止T1中断
  • EX1: 外部中断1中断允许位。EX1=1,允许外部中断1中断:EX1=0,禁止外部中断1中断
  • ET0:TO的溢出中断允许位。ETO-1,允许T中断:ETO-0禁止TO中断。
  • EX0:外部中断0中断允许位。EX0=1,允许中断:EX0=0禁止中断。

2.配置中断方式

首先认识一个寄存器:TCONTCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求中断源等,其也是可位寻址的。
在这里插入图片描述

  • TF1:T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置“1”,TF1向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0” (也可由查询软件清“0”)
  • TR1定时器1的运行控制位。
  • TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置“1”,TFO向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询软件清0)。
  • TR0:定时器0的运行控制位。
  • IE1:外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该中断时由硬件清“0”。
  • IT1:外部中断1中断源类型选择位IT1=0INT1/P3.3引脚上的低电平信号可触发外部中断;IT1=1,外部中断1为下降沿触发方式。
  • IE0:外部中断0请求源 (INTO/P3.2)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外部中断时,由硬件清“0”。
    IT0:外部中断0中断源类型选择位IT0=0INTO/P3.2引脚上的低电平可触发外部中断0;IT0=1,外部中断0为下降沿触发方式。

总共有8位,上一部分的图中只显示了4位,其余4位的功能如上所示,定时器和计数器是同一种中断,而该类中断与外部中断一起均受TCON的控制。

3.编写中断处理函数

中断优先级处理原则(对同时发生多个中断申请时):

  • 不同优先级的中断同时申请 (很难遇到),先高后低
  • 相同优先级的中断同时申请 (很难遇到),按序执行
  • 正处理低优先级中断又接到高级别中断,高打断低
  • 正处理高优先级中断又接到低级别中断,高不理低

内部查询顺序:在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一优先级内,还同时存在另一辅助优先级结构,其查询顺序如下:
在这里插入图片描述
中断处理函数模型:

void 函数名() interrupt 2             //普通函数基础上,加关键字interrupt和入口号
{
	中断处理语句
}
文章来源:https://blog.csdn.net/weixin_51496226/article/details/135403569
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。