前言
本文介绍基于常见的51单片机,即如下图的芯片:
- STC89C51具备5个中断源
中断源 |
优先级 |
中断请求标志位 |
中断允许控制位 |
外部中断0 |
0 |
IE0 |
EX0 |
定时器中断0 |
1 |
TF0 |
ET0 |
外部中断1 |
2 |
IE1 |
EX1 |
定时器中断1 |
3 |
TF1 |
ET1 |
串口中断 |
4 |
RI / TI |
/ |
优先级数字越低,越优先得到CPU处理。配置中断时,需要将对应中断允许控制位置1。
-
使用任何中断,都需要打开总中断,即程序语句 EA = 1 ;
-
与中断相关的寄存器:IE 、TCON、SCON(此处只介绍了常用的)
一、中断相关寄存器介绍
1.IE:中断允许寄存器(可位寻址)
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
IE |
EA |
/ |
/ |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
对寄存器位功能介绍如下:
①EA :CPU总中断允许控制位。EA=1,允许总中断;EA=0,屏蔽所有中断请求。
②ES:串口中断允许位。用到串口中断时需要置 1
③ET1:定时器1中断允许位。用到定时器1中断时需要置 1
④EX1:外部中断1中断允许位。用到外部中断1中断时需要置 1
⑤ET0:定时器0中断允许位。用到定时器0中断时需要置 1
⑥EX0:外部中断0中断允许位。用到外部中断0中断时需要置 1
实际应用中使用到中断的话,需根据对应中断将其中断允许位置 1,且EA也需置 1。
2.TCON:定时器/计数器控制寄存器(可位寻址)
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
TCON |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
对寄存器位功能介绍如下:
①TF1: T1 溢出标志位。T1溢出后,硬件置1,硬件清0。
②TR1:T1 运行控制位。在 GATE=0时(此位在TMOD寄存器),只要TR1=1 , T1开始工作。
③TF0:T0 溢出标志位。T0溢出后,硬件置1,硬件清0。
④TR0:T0 运行控制位。在 GATE=0时(此位在TMOD寄存器),只要TR0=1 , T0开始工作。
⑤IE1:外部中断1请求标志位。硬件置1,硬件清0。
⑥IT1:外部中断1触发方式控制位。IT1=0,低电平触发;IT1=1,下降沿触发。
⑦IE0:外部中断0请求标志位。硬件置1,硬件清0。
⑧IT0:外部中断0触发方式控制位。IT0=0,低电平触发;IT0=1,下降沿触发。
实际应用中,标志位不用配置,标志位是用来给CPU触发中断的;而控制位是在使用到任意中断时,需将对应的控制位置 1 。
3.SCON : 串行控制寄存器(可位寻址)
位地址 |
9FH |
9EH |
9DH |
9CH |
9BH |
9AH |
99H |
98H |
SCON |
/ |
/ |
/ |
/ |
/ |
/ |
T1 |
R1 |
下面对寄存器控制位进行介绍:
①TI:发送中断请求标志位。
②RI:接收中断请求标志位。
以上2个标志位,大多用于串口通信时,用于发送或接收到数据时的判断,由硬件置1,软件清0。实际应用中,可以配合2个标志位对数据进行处理。
二、程序
以下程序为外部中断0和外部中断1参考程序。
#include <reg51.h>
void INT0( ) interrupt 0 //如果是外部中断1,中断号为2(即interrupt 2)
{
//Something to do ;
}
void main( )
{
IT0=1; //中断触发方式,1为下降沿触发,0为低电平触发(如果是外部中断1,则为IT1)
EX0=1; //使能外部中断0(如果是外部中断1,则为EX1)
EA=1; //允许总中断
while(1); //
}