51单片机中断详解

常用寄存器

IE

EA -– ET2 ES ET1 EX1 ET0 EX0

1
2
3
4
5
作用:
EA=1,打开总中断。
ES=1,打开串口中断。
ET0/1,打开定时器0/1中断。
EX0/1,打开外部中断0/1

中断优先级:从右到左依次递减。

TMOD

GATE C/T M1 M0 GATE C/T M1 M0

1
2
3
4
5
6
7
8
9
作用:
高四位控制定时器1模式,低四位控制定时器0
GATE=0仅由TR0/1控制,GATE=1由TR0/1和外部中断引脚控制。
C/T=0定时模式。C/T=1计数模式。
M1 M0 为:
00 方式013位定时/计数器
01 方式116位定时/计数器
10 方式28位初值自动重装初值的8位定时/计数器
11 方式3,仅T0,分成两个8位定时/计数器,T1停止

TCON

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

1
2
3
4
TF,定时器溢出标志位,无需操作,硬件控制。
TR,定时器运行控制位。
IE,外部中断溢出标志位。
IT,外部中断允许。IT=1,下降沿触发,IT=0,低电平触发。

PCON

8位寄存器,最高位为SMOD=1串行方式123波特率加倍。SMOD=0串行方式123正常波特率。

上电后初始化PCON=0X00

SCON

SM0 SM1 SM2 REN TB8 RB8 TI RI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SM0 SM1为:
00 方式0,同步移位寄存方式,通常用于扩展I/O
01 方式110位异步首发(8位数据),波特率可调(由定时器1溢出率控制)。
10 方式211位异步收发(9位数据),波特率固定。
11 方式311位异步收发(9位数据),波特率可调(由定时器1溢出率控制)

SM2 多机通信控制位,用于方式23

REN=1,允许串行接受数据

REN=0,禁止串行接受数据。

TB8,方式23发送第九位数据

RB0, 方式23接受第九位数据

TI,发送数据中断标志位,由硬件置1,发送中断,需要软件清零,解除中断。

RI 接受数据中断标志位,由硬件置1,发送中断,需要软件清零,解除中断。

中断控制写法

外部中断0/1:

1
2
3
EX0/1=1;  //打开中断
IT0/1=0/1; //为0低电平触发,为1下降沿触发
EA=1; //打开总中断

定时器0方式1

1
2
3
4
5
6
TMOD=0x01; //确定定时器工作方式和使用哪个定时器。
TH0=(65536-N)/256; //赋初值
TL0=(65536-N)%256;
EA=1; //打开总中断
ET0=1; //打开定时器0中断
TR0=1; //启动定时器

串口通信方式1

1
2
3
4
5
6
7
TMOD=0x20;  //定时器1方式2
TH1= ; //根据波特率计算
TL1=;
TR1=1; //启动定时器1,不需要ET1=1,不用打开中断
SCON=0x50; //确定串行方式1打开REN允许位,这里要对SCON操作,不要对SM1 SM0 REN赋值,有时会出错。
EA=1; //打开总中断
ES=1; //打开串口中断

波特率计算

1
2
3
4
5
6
方式0波特率=f/12
方式1波特率=(2^SMOD/32)×T1溢出率
方式2波特率=(2^SMOD/64)×f
方式3波特率=(2^SMOD/32)×T1溢出率

f为晶振频率,SMOD为PCON最高位