51单片机中断详解
常用寄存器
IE
EA -– ET2 ES ET1 EX1 ET0 EX0
作用:
EA=1,打开总中断。
ES=1,打开串口中断。
ET0/1,打开定时器0/1中断。
EX0/1,打开外部中断0/1。
中断优先级:从右到左依次递减。
TMOD
GATE C/T M1 M0 GATE C/T M1 M0
作用:
高四位控制定时器1模式,低四位控制定时器0。
GATE=0仅由TR0/1控制,GATE=1由TR0/1和外部中断引脚控制。
C/T=0定时模式。C/T=1计数模式。
M1 M0 为:
00 方式0,13位定时/计数器
01 方式1,16位定时/计数器
10 方式2,8位初值自动重装初值的8位定时/计数器
11 方式3,仅T0,分成两个8位定时/计数器,T1停止
TCON
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
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
SM0 SM1为:
00 方式0,同步移位寄存方式,通常用于扩展I/O
01 方式1,10位异步首发(8位数据),波特率可调(由定时器1溢出率控制)。
10 方式2,11位异步收发(9位数据),波特率固定。
11 方式3,11位异步收发(9位数据),波特率可调(由定时器1溢出率控制)
SM2 多机通信控制位,用于方式2,3
REN=1,允许串行接受数据
REN=0,禁止串行接受数据。
TB8,方式2,3发送第九位数据
RB0, 方式2,3接受第九位数据
TI,发送数据中断标志位,由硬件置1,发送中断,需要软件清零,解除中断。
RI 接受数据中断标志位,由硬件置1,发送中断,需要软件清零,解除中断。
中断控制写法
外部中断0/1:
EX0/1=1; //打开中断
IT0/1=0/1; //为0低电平触发,为1下降沿触发
EA=1; //打开总中断
定时器0方式1
TMOD=0x01; //确定定时器工作方式和使用哪个定时器。
TH0=(65536-N)/256; //赋初值
TL0=(65536-N)%256;
EA=1; //打开总中断
ET0=1; //打开定时器0中断
TR0=1; //启动定时器
串口通信方式1
TMOD=0x20; //定时器1方式2
TH1= ; //根据波特率计算
TL1=;
TR1=1; //启动定时器1,不需要ET1=1,不用打开中断
SCON=0x50; //确定串行方式1打开REN允许位,这里要对SCON操作,不要对SM1 SM0 REN赋值,有时会出错。
EA=1; //打开总中断
ES=1; //打开串口中断
波特率计算
方式0波特率=f/12
方式1波特率=(2^SMOD/32)×T1溢出率
方式2波特率=(2^SMOD/64)×f
方式3波特率=(2^SMOD/32)×T1溢出率
f为晶振频率,SMOD为PCON最高位