5. 1 中 断 概 述 单片机接通电源后将循环执行我们编制好的程序(一般称为主程序),当有外部设备或内部部件要求CPU为其服务时,计算机将被迫“中断”主程序的执行,并记录下暂停处程序地址(断点地址),然后转去为外部设备服务,即执行中断服务程序;在中断程序执行完毕后自动返回被迫中断主程序的地址,继续执行原主程序。 一个单片机系统可能有多个中断源,而单片机CPU在某一时刻只能响应一个中断源的中断请求,当多个中断源同时向CPU发出中断请求时,则必须按照“优先级别”进行排队,CPU首先选定其中中断级别高的中断源为其服务,然后按排队顺序逐一服务,完毕后返回断点地址,继续执行主程序。
5.2 AT89C51中断系统 5.2.1 中断源及中断系统构成 AT89C51具有五个中断源,分为内部中断源和外部中断源。外部中断源有两个,通常指由外部设备发出中断请求信号,从P3.2和P3.3 引脚输入单片机,用电平或边沿触发两种方式申请中断。内部中断源有三个,两个定时器/计数器(T0,T1)中断源和一个串行口中断源,T0和T1的中断申请是在它们计数从全“1”变为全“0”溢出时自动向中断系统提出的,串行口中断源的中断申请是在串行口每发送或接收完一个8位二进制数后自动向中断系统提出的。AT89C51的中断系统结构如图5-1所示。
图5-1 AT89C51中断系统结构图
图5-2给出了定时器控制寄存器TCON各位的定义。 5.2.2 中断标志与中断控制 1.中断标志 1) 定时器控制寄存器TCON 图5-2给出了定时器控制寄存器TCON各位的定义。 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 图5-2 定时器控制寄存器TCON
各位的作用如下: (1) TF1(TCON.7):定时器T1溢出中断标志位,位地址为8FH。 (2) TR1(TCON.6):定时器T1的启停控制位,位地址为8EH,TR1状态靠软件置位或清除。 (3) TF0(TCON.5):定时器T0溢出中断标志位,位地址为8DH。 (4) TR0(TCON.4):定时器T0的启停控制位,位地址为8CH,其他操作与TR1类同。
(5) IE1(TCON.3):外部中断 边沿触发中断请求标志位,位地址为8BH。 (6) IT1(TCON.2):外部中断 触发类型选择位,位地址为8AH。 (7) IE0(TCON.1):外部中断 边沿触发中断请求标志位,位地址为89H。其功能与IE1类同。 (8) IT0(TCON.0):外部中断 触发类型选择位,位地址为88H。其功能与IT1类同。
2) 串行口控制寄存器SCON 图5-3给出了串行口控制寄存器SCON各位的定义。其中只有TI和RI两位用来表示串行口中断标志位,其余各位用于串行口其他控制(将在第9章中详细介绍)。 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 图5-3 串行口控制寄存器SCON
(1) TI:为串行口发送中断标志位,位地址为99H。在串行口发送完一组数据时,TI由硬件自动置位(TI=1),请求中断,当CPU响应中断进入中断服务程序后,TI状态不能被硬件自动清除,而必须在中断程序中由软件来清除。 (2) RI:为串行口接收中断标志位,位地址为98H。在串行口接收完一组串行数据时,RI由硬件自动置位(RI=1),请求中断,当CPU响应中断进入中断服务程序后,也必须由软件来清除RI标志。
2.中断控制 各中断源的中断标志被置位后,CPU能否响应还要受到控制寄存器的控制,这种控制寄存器在AT89C51中有两个,即中断允许控制寄存器IE和中断优先级控制寄存器IP。下面分别详细介绍。
1) 中断允许控制寄存器IE AT89C51设有专门的开中断和关中断指令,中断的开放和关闭是通过中断允许寄存器IE各位的状态进行两级控制的。所谓两级控制是指所有中断允许的总控制位和各中断源允许的单独控制位,每位状态靠软件来设定。图5-4给出了中断允许控制寄存器IE各位的定义。 IE EA — ET2 ES ET1 EX1 ET0 EX0 位地址 AFH ADH ACH ABH AAH A9H A8H 图5-4 中断允许控制寄存器IE
(1) EA(IE.7):总允许控制位,位地址为AFH。EA状态可由软件设定,若EA=0,禁止AT89C51所有中断源的中断请求;若EA=1,则总控制被开放,但每个中断源是允许还是被禁止CPU响应,还受控于中断源的各自中断允许控制位的状态。 (2) ET2(IE.5):定时器T2溢出中断允许控制位,位地址是ADH。
(3) ES(IE.4):串行口中断允许控制位,位地址是ACH。 (4) ET1(IE.3):定时器T1的溢出中断允许控制位,位地址为ABH。 (5) EX1(IE.2):外部中断 的中断请求允许控制位,位地址是AAH。 (6) ET0(IE.1):定时器T0的溢出中断允许控制位,位地址是A9H。 (7) EX0(IE.0):外部中断 的中断请求允许控制位,位地址是A8H。
2) 中断优先级寄存器IP AT89C51的中断源优先级是由中断优先级寄存器IP进行控制的。五个中断源总共可分为二个优先级,每一个中断源都可以通过IP寄存器中的相应位设置成高级中断或低级中断,因此,CPU对所有中断请求只能实现两级中断嵌套。IP寄存器各位的定义如图5-5所示。 IP — PT2 PS PT1 PX1 PT0 PX0 位地址 BDH BCH BBH BAH B9H B8H 图5-5 中断优先控制寄存器IP
(1) —(IP.7,IP.6):保留位。 (2) PT2(IP.5):定时器T2中断优先级控制位,位地址是BDH。 (3) PS(IP.4):串行口中断优先级设定位,位地址是BCH。 (4) PT1(IP.3):定时器T1中断优先级控制位,位地址是BBH。 (5) PX1(IP.2):外中断 优先级控制位,位地址为BAH。
(6) PT0(IP.1):定时器T0中断优先级控制位,位地址为B9H。 (7) PX0(IP.0):外部中断 优先级控制位,位地址为B8H,其功能与PX1类同。 如果同样优先级的请求同时接收到,则内部对中断源的查询次序决定先接受哪一个请求,表5-1列出了同一优先级中断源的内部查询次序。
表5-1 中断源的内部查询次序 中断源 中断标志 优先查询次序 外中断0 定时器T0中断 外中断1 定时器T1中断 串行口中断 IE0 表5-1 中断源的内部查询次序 中断源 中断标志 优先查询次序 外中断0 定时器T0中断 外中断1 定时器T1中断 串行口中断 IE0 TF0 IE1 TF1 RI+TI 高 ↓ 低