8051单片机中断寄存器

中断允许寄存器IE

寄存器 地址 7 6 5 4 3 2 1 0
IE 0xA8 EA ES ET1 EX1 ET0 EX0

EA:CPU 中断允许(总允许)位
ES:串行口中断允许位
ET1:定时/计数器 T1 中断允许位
EX1:外部中断 0 允许位
ET0:定时/计数器 T0 中断允许位
EX0:外部中断 0 允许位

中断请求标志 TCON

寄存器 地址 7 6 5 4 3 2 1 0
TCON 0x88 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1:定时/计数器 T1 溢出中断请求标志位

TR1:T1 运行控制位。TR1 置 1 时,T1 开始工作;TR1 置 0 时,T1 停止工作。TR1 由软件置 1 或清 0。所以,用软件可控制定时/计数器的启动与停止

TF0:定时/计数器 T0 溢出中断请求标志位

TR0:T0 运行控制位,其功能与 TR1 类同

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

IT1:外部中断 1 触发方式控制位

IE0:外部中断 0 中断请求标志位

IT0:外部中断 0 触发方式控制位,当 IT0=0 时,为电平触发方式,当 IT0=1 时,为边沿触发方式(下降沿有效)

定时/计数中断工作方式寄存器TMOD

寄存器 地址 7 6 5 4 3 2 1 0
TMOD 0x89 GATE C/T M1 M0 GATE C/T M1 M0

GATE 是门控位:
GATE=0 时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使 TCON 中的 TR0 或 TR1 为 1,就可以启动定时/计数器工作;GATA=1 时,要用软件使 TR0 或 TR1 为 1,同时外部中断引脚INT0/1 也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了 INT0/1 引脚为高电平这一条件。

C/T :定时/计数模式选择位。C/T =0 为定时模式;C/T =1 为计数模式。

M1M0:工作方式设置位。定时/计数器有四种工作方式。

M1M0 工作方式 说明
00 方式0 13位定时/计数
01 方式1 16位定时/计数
10 方式2 8位自动重装定时/计数
11 方式3 T0分成两个独立的8位定时/计数,T1此方式停止计数

串口控制寄存器 SCON

寄存器 地址 7 6 5 4 3 2 1 0
SCON 0x98 SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 和 SM1 为工作方式选择位:

SM0 SM1 方式 说明 波特率
0 0 0 移位寄存器 fosc/12
0 1 0 10位异步收发器(8位数据) 可变
1 0 0 11位异步收发器(9位数据) fosc/64 或 fosc/32
1 1 0 11位异步收发器(9位数据) 可变

SM2:多机通信控制位,主要用于方式 2 和方式 3。当 SM2=1 时可以利用收到的 RB8 来控制是否激活 RI(RB8=0 时不激活 RI,收到的信息丢弃;RB8=1 时收到的数据进入 SBUF,并激活 RI,进而在中断服务中将数据从 SBUF 读走)。当SM2=0 时,不论收到的 RB8 为 0 和 1,均可以使收到的数据进入 SBUF,并激活 RI(即此时 RB8 不具有控制 RI 激活的功能)。通过控制 SM2,可以实现多机通信。

REN:允许串行接收位。由软件置 REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。

TB8:在方式 2 或方式 3 中,是发送数据的第 9 位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式 0 和方式 1 中,该位未用到。

RB8:在方式 2 或方式 3 中,是接收到数据的第 9 位,作为奇偶校验位或地址帧/数据帧的标志位。在方式 1 时,若 SM2=0,则 RB8 是接收到的停止位。

TI:发送中断标志位。在方式 0 时,当串行发送第 8 位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使 TI 置 1,向 CPU 发中断申请。在中断服务程序中,必须用软件将其清 0,取消此中断申请。

RI:接收中断标志位。在方式 0 时,当串行接收第 8 位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使 RI 置 1,向 CPU 发中断申请。也必须在中断服务程序中,用软件将其清 0,取消此中断申请。

电源控制寄存器 PCON

寄存器 地址 7 6 5 4 3 2 1 0
PCON 0x97 SMOD

SMOD:波特率倍增位。在串口方式 1、方式 2、方式 3 时,波特率与 SMOD 有关,当 SMOD=1 时,波特率提高一倍。复位时,SMOD=0。

image.png

中断响应条件

  • 中断源有中断请求;
  • 此中断源的中断允许位为 1;
  • CPU 开中断(即 EA=1)。

以上三条同时满足时,CPU 才有可能响应中断。

在使用中断时我们需要做什么呢?

  • 你想使用的中断是哪个?选择相应的中断号;
  • 你所希望的触发条件是什么?
  • 你希望在中断之后干什么?

我们以外部中断 0 为例,主程序中需要有以下代码:

EA=1//打开总中断开关 EX0=1//开外部中断 0 IT0=0/1//设置外部中断的触发方式

中断服务函数:

void int0() interrupt 0 using 1 { //编写用户所需的功能代码 }

在中断函数中 int0 是函数名,可自定义,但必须符合 C 语言标识符定义规则,interrupt 是一个关键字,表示 51 单片机中断。后面的0是中断号,外部中断 0 中断号为 0,这个可参考前面的内容。后面的 using 1 可省略不写

鲸之声为您拼命加载中...