寄存器 | 地址 | 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 允许位
寄存器 | 地址 | 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 时,为边沿触发方式(下降沿有效)
寄存器 | 地址 | 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此方式停止计数 |
寄存器 | 地址 | 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,取消此中断申请。
寄存器 | 地址 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|
PCON | 0x97 | SMOD |
SMOD
:波特率倍增位。在串口方式 1、方式 2、方式 3 时,波特率与 SMOD 有关,当 SMOD=1 时,波特率提高一倍。复位时,SMOD=0。
以上三条同时满足时,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
可省略不写