MCS - 51中断系统--单片机教案

*外部中断INT0,INT1

*定时器/计数器0.1:溢出中断

*串行口中断

2)外部中断:每个机器周期的S5P2检测INT0或INT1上的信号

3)为保证检测可靠,低(或高)的宽度至少要保持一个机器周期。

(2) TCON寄存器

TF1

TF0

IE1

IT1

IE0

IT0

D7D6D5 D4 D3 D2 D1 D0

IT=0:电平触发方式,适用于外部中断输入(低电平输入)

IT=1:边沿触发方式

(3) SCON寄存器

D7D6D5 D4 D3 D2 D1 D0

TI

RI

1.中断控制

2.

3.

(1) 中断允许控制:

D7D0

EA

-

ET2

ES

ET1

EX

ET0

EX0

(2) 中断优先级控制

D7 D4D0

-

-

PT2

PS

PT1

PX1

PT0

PX0

(1)中断优先级遵循的原则:

*低优先中断可被高优先级中断所中断

*某个中断一旦得到响应,与它同级的中断请求不能再中断它。

(2)同级中断的优先级:外部中断0(最高)、T/C0、外部中断1、T/C1、串口(最低)。

例如, 某软件中对寄存器IE、 IP设置如下:

MOVIE, # 8FH

MOVIP, # 06H

则此时该系统中: 

u CPU中断允许

u 允许外部中断0、 外部中断1、 定时器/计数器0、 定时器/计数器1提出的中断申请

u 允许中断源的中断优先次序为: 

u 定时器/计数器0>外部中断 1>外部中断 0>定时器/计数器 1。

3.中断响应

1.

(1)CPU响应中断的条件

1)一条指令执行完成

2)刚执行的不是RETI或访问IE、IP指令,若是则要再执行一条才能响应

3)新的中断优先级要高于当前的正在执行的程序的优先级

(2)中断源的中断服务程序入口地址

外部中断0

T/C0

外部中断1

T/C1

串口

0003H

000BH

0013H

001BH

0023H

例如, 现有外部中断 1 提出申请, 且主程序中有R0、 R1、 DPTR、累加器A需保护, 则编制程序应为:

ORG0000H 

AJMPMAIN

ORG0013H

LJMPINT1

……

ORG0100H

MAIN: ……;主程序

……

ORG1000H

INT1: PUSHACC 中断服务程序

PUSHDPH

PUSHDPL

PUSH0

PUSH1

POP1

POP0

POPDPL

POPDPH

POPACC

RETI

(3)

中断处理过程

1) 在每条指令结束后, 系统都自动检测中断请求信号, 如果有中断请求,且CPU处于开中断状态下, 则响应中断。 

2) 保护现场, 在保护现场前, 一般要关中断, 以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。

3) 中断服务, 即为相应的中断源服务。 

4) 恢复现场, 用堆栈指令将保护在堆栈中的数据弹出来, 在恢复现场前要关中断, 以防止现场被破坏。在恢复现场后应及时开中断。 

5)中断返回, 此时CPU将推入到堆栈的断点地址弹回到程序计数器, 从而使CPU继续执行刚才被中断的程序。

(4)CPU响应中断的过程

单片机一旦响应中断请求, 就由硬件完成以下功能: 

1) 根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1

2) 执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈

3) 清除相应的中断请求标志位(串行口中断请求标志RI和TI除外)

4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。

4)