前言
本文介绍基于常见的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); //
}