第六章 单片机的中断系统

212 阅读4分钟

第六章 单片机的中断系统

6.1 中断系统简介

当cpu在执行某一程序过程中,在突发事件的请求下,cpu中断当前正在执行的程序,自动转去执行为处理该事件而预先编写的程序服务;当服务程序执行完后,cpu继续执行原来的程序。这一过程称为中断。

8051单片机提供5个中断源,包括两个外部中断源INT0\overline{INT0}INT1\overline{INT1} ,两个定时器/计数器中断源T0和T1,以及一个串口中断源。

中断的自然优先级

中断函数编号中断名称中断标志位中断使能位中断向量地址默认优先级
0外部中断0IE0EX003H1(最高)
1定时器T0中断TF0ET00BH2
2外部中断1IE1EX113H3
3定时器T1中断TF1ET11BH4
4UART中断(串口)T1/R1ES23H5

6.2 中断系统的控制

1. 定时器/计数器控制寄存器TCON

字节地址为88H,可以位寻址。

位序号D7D6D5D4D3D2D1D0
位符号TF1TR1TF0TR0IE1IT1IE0IT0
位地址8FH8EH8DH8CH8BH8AH89H88H
  • TF1: 定时器1溢出标志位,当定时器1计满溢出时,由硬件将TF1置1,并申请中断;进入中断服务程序后,由硬件自动清零。

  • TR1: 定时器1运行控制位: TR=1表示启动定时器,需要配合GATEINT1

    • GATE=1,且INT1为高电平时,TR1置1启动定时器。
    • GATE=0时,TR1置1启动定时器1。
  • TF0: 定时器0溢出标志位,功能和用法同TF1.

  • TR0: 定时器0运行控制位,功能和用法同TR1.

  • IE1: 外部中断1请求标志位.

    • IT1=0时,为电平触发方式,每个机器周期的S5P2采样INT1引脚,若INT1脚为高电平,则置1;否则IE1清0.

    • IT1=0时,为跳变沿触发方式,当第一个机器周期采样到INT1为低电平时,将IE1置1,表示外部中断1正在向CPU请求中断.当CPU响应,转向中断服务程序时,IE1由硬件清零.

  • IT1: 外部中断1触发方式选择位.

    • IT1=0时,为电平触发方式,引脚INT1上的低电平有效.
    • IT1=1时,为跳变沿触发方式,引脚INT1上的电平从高到低的负跳变有效.
  • IE0: 外部中断0请求标志位,功能和用法同IE1.

  • IT0: 外部中断0触发方式选择位,功能和用法同IT1.

2. 中断允许寄存器IE

按位寻址,地址:A8H。

B7B6B5B4B3B2B1B0
EA-ET2ESET1EX1ET0EX0
  • EA (IE.7): EA=0时,所有中断禁止(即不产生中断) EA=1时,各中断的产生由个别的允许位决定

  • -(IE.6) :保留

  • ET2(IE.5):定时2溢出中断充许(8052用)

  • ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)

  • ET1(IE.3):定时1中断充许

  • EX1(IE.2):外中断INT1中断充许

  • ET0(IE.1):定时器0中断充许

  • EX0(IE.0):外部中断INT0的中断允许

3. 中断优先级寄存器IP

中断控制位
位序D7D6D5 D4D3D2D1D0
位序号---PSPT1 PX1PT0PX0

高电平为高优先级。

PS:串行口中断优先

PS=1,设置串行口中断为高优先级。

PS=0,设置串行口中断为低优先级。

PT1:定时器/计数器1中断优先

PX1:外中断INT1中断优先

PT0:定时器0中断优先

PX0:外部中断INT0的中断优先

6.3 中断系统的编程

1. 中断函数

定义如下:

void 函数名(void) interrupt n using m
{
    中断函数内容
}

修饰符interrupt表示该中断服务程序所对应的中断源的中断号

修饰符using m用于指定本函数内部使用的寄存器工作组,该修饰符可省略,让编译器分配。

注意

  1. 中断函数不带任何参数。

  2. 中断函数没有返回值。

  3. 中断函数必须由中断源触发而自动调用,不得直接调用,因此也不用提前声明。

  4. 中断函数要精简,避免因执行时间过长影响其他中断的响应。

2. 编程的具体流程

(1) 外部中断,例如INT1

  1. 设置IT1选择触发方式。

  2. 开启总中断允许EA = 1。

  3. 开启外部中断1允许EX1 = 1。

(2) 定时器/计数器中断, 例定时器T0

  1. 确定计数初值, TH0, TH1初始化

  2. 确定定时器工作方式, TMOD初始化

  3. 开放定时器,EA=1,ET0=1

  4. 启动T0工作,TR0=1

  5. 若不是工作方式2,则每次中断必须重新装载计数初值。