一、中断的概念
对于单片机中断,可以简单理解为在看电视的过程中,突然蹦出一个广告,广告过了在继续播放之前的节目。CPU在处理事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生),CPU中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。
二、基本中断源
1.51单片机中的5个重要中断
单片机的应用与开发,实际上就是通过单片机的三个重要外设,即外部中断、定时器/计数器和串口来实现对寄存器的操作。
三、中断结构图
四、特殊功能寄存器
IE :中断控制寄存器
IP :中断优先级寄存器
TCON :中断状态标志寄器
TMOD :定时/计数器模式控制寄存器
THx 、TLx : 定时器的计数初值寄存器
SCON : 串口控制寄存器
SBUF : 串行接口收发数据缓冲器
1.中断允许控制寄存器(IE)
EA:中断总开关
EA=1,CPU开放中断
EA=0,CPU屏蔽所有中断申请
ELVD:低压检测中断允许位
ELVD=1,允许低压检测中断
ELVD=0,禁止低压检测中断
EADC:ADC中断允许位
EADC=1,允许ADC中断
EADC=0,禁止ADC中断
ES:串行口1中断允许位
ES=1,允许串行口1中断
ES=0,禁止串行口1中断
ET1:定时/计数器T1的溢出中断允许位
ET1=1,允许T1中断
ET1=0,禁止T1中断
EX1:外部中断1中断允许位
EX1=1,允许外部中断1中断
EX1=0,禁止外部中断1中断
ET0:定时/计数器T0的溢出中断允许位
ET0=1,允许T0中断
ET0=0,禁止T0中断
EX0:外部中断0中断允许位
EX0=1,允许外部中断0中断
EX0=0,禁止外部中断0中断
2.中断优先级控制寄存器IP
单片机内的CPU在工作时,如果一个中断源向它发出中断请求信号,它就会产生中断;如果同时有两个或两个以上的中断源发出中断请求信号,CPU会先接受优先级较高的中断源请求,然后再接受优先级较低的中断源请求。中断优先级控制寄存器如下:
PT1:定时器1中断优先级控制位
PT1=1,定时器1中断为最高优先级
PT1=0,定时器1中断为最低优先级
PX1:外部中断1优先级控制位
PX1=1,外部中断1为最高优先级
PX1=0,外部中断1为最低优先级
PT0:定时器1中断优先级控制位
PT0=1,定时器0中断为最高优先级
PT0=0,定时器0中断为最低优先级
PX0:外部中断0优先级控制位
PX0=1,外部中断0为最高优先级
PX0=0,外部中断0为最低优先级
3.TCON:定时器/计数器控制寄存器
TF1:T1溢出中断标志
TF1=1,TF1计数器溢出
TF1=0,TF1计数器未溢出
TR1:定时器1运行控制位
TR1=1,启动定时器
TR1=0,关闭定时器
TF0:T0溢出中断标志
TF0=1,TF0计数器溢出
TF0=0,TF10计数器未溢出
TR0:定时器0运行控制位
TR0=1,启动定时器
TR0=0,关闭定时器
IE1:外部中断1中断请求标志位
IT1:外部中断1触发方式选择位
IT1=1,下降沿触发
IT1=0,低电平触发
IE0:外部中断0中断请求标志位
IT0:外部中断0触发方式选择位
IT0=1,下降沿触发
IT0=0,低电平触发
4.SCON:串口控制寄存器
SM0、SM1:串口工作模式选择位
SM2:多机通信控制位
REN:串行接收允许位
TB8:发送数据的第9位(奇偶校验位)
RB8:接收数据的第9位(奇偶校验位)
TI:发送完成中断标志位
发送完数据后由硬件置1,进入中断程序后需手动软件清0
RI:接收完成中断标志位
接收完数据后由硬件置1,进入中断程序后需手动软件清0
补充:
因为11.0592MHz能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。用11.0592晶振的原因是51单片机的定时器导致的,用51单片机的定时器做波特率发生器时,如果用11.0592MHz的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12MHz晶振,则波特率都是有偏差的。比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用STC90C516晶振12M波特率9600,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。
5.PCON:电源控制寄存器
SMOD:波特率选择位
SMOD=1,方式1、2、3的波特率加倍
SMOD0: 帧错误检测有效控制位
SMOD0=0时,与SCON寄存器中的SM0/FE位一起指定串行口的工作方式
6.TCON:中断状态标志寄存器
TF1:T1溢出中断标志
T1允许计数以后,从初始值开始计数,当产生溢出时由硬件将TF1置1,直到CPU响应中断时,才由硬件清“0”。
TR1:定时器T1的启动位
当GATE=0,TR1=1时就允许T1定时,TR1=0时禁止T1定时。若GATE=1,则当TR=1且INT1输入高电平时,才允许T1开始定时。
TF0:T0溢出中断标志
T0允许计数以后,从初始值开始计数,当产生溢出时由硬件将TF0置1,直到CPU响应中断时,才由硬件清“0”。
TR0:定时器T0的启动位
当GATE=0,TR0=1时就允许T0定时,TR0=0时禁止T8定时。若GATE=1,则当TR0=1且INT0输入高电平时,才允许T0开始定时。
7.TMOD:定时器/计数器工作模式寄存器
GATE:门控位
置1时只有INT1/0脚为高电平及TR1/0控制位置1时才可以打开定时器/计数器。
C/T~:为0作为定时器,为1作为计数器
M1M0:定时器/计数器工作模式选择位
8.AUXR:辅助寄存器
T(0/1/2)x12:定时器(0/1/2)速度控制位
为0:定时器是传统8051速度,12T
为1:定时器是传统8051速度的12倍,1T
UART_M0x6:串口1模式0的通信速度设置位
为0:串口1模式0是传统8051单片机串口速度,12T
为1:串口1模式0是传统8051单片机串口速度的6倍,2T
T2R:定时器2允许控制位。为1时,允许定时器工作
T2_C/~T:控制定时器2作为定时器还是计数器。为0作为定时器为1用作计数器。
注意:如果串口1/串口2用T2作为波特率发生器,则由T1x12决定串口1/串口2是12T还是1T
EXTRAM:内部/外部RAM存取控制位
0,允许使用逻辑上在片外、物理上在片内的扩展RAM
1,禁止使用逻辑上在片外、物理上在片内的扩展RAM
SIST2:串口1(UART1)选择定时器2作波特率发生器的控制位
为0:选择定时器1作为串口1(UART1)的波特率发生器;
为1:选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为独立定时器使用
五、定时器/计数器
1.计数:
计数是指对外部事件进行计数,外部事件的发生以输入脉冲的形式表示,因此计数功能的实质就是对外部脉冲进行计数,在单片机中对应引脚T0和T1两个脉冲输入端。外部输入的脉冲在负跳变时有效(即外部脉冲由1变化到0),计数器加1。
2.定时:
定时器是通过计数器的计数来实现的,不过定时器的计数脉冲来自单片机的内部,因此定时器的实质是对内部脉冲的计数
补充:
根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定TH0和TL0所要赋予的初值(以12MHz晶振,工作方式1,16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所定时间大于65535,则要用if语句控制,现假设X<65535))
①时钟周期的时间:t=1/12MHz=1/12 (us)
②机器周期的时间:T=12*1/12=1 us
③因为每经过一个机器周期计数器+1,所以,计数器+1,经过的时间为 1 us。
若所定时间为X,则要求经过Xus,中断响应,又因为16位计数器要全部置1(即达到65535+1)后,中断才会响应,所以,初值=(65536-X),将初值转化为16进制码,分别赋给TH0和TL0
例如:所定时间5ms,则:
初值=(65536-5000)=60536=EC78
TH0=0XEC;
TL0=0X78;
写程序时另一种TH0/TL0赋值方法
TH0=(65536-5000)/256
TL0=(65536-5000)%256
相关文章