51单片机中断笔记

2023-02-23 23:30   289   0  

一、中断的概念


对于单片机中断,可以简单理解为在看电视的过程中,突然蹦出一个广告,广告过了在继续播放之前的节目。CPU在处理事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生),CPU中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。


46f53756-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp




二、基本中断源


1.51单片机中的5个重要中断


46f53757-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


单片机的应用与开发,实际上就是通过单片机的三个重要外设,即外部中断、定时器/计数器和串口来实现对寄存器的操作。


三、中断结构图


46f53758-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp




四、特殊功能寄存器


IE :中断控制寄存器


IP :中断优先级寄存器


TCON :中断状态标志寄器


TMOD :定时/计数器模式控制寄存器


THx 、TLx : 定时器的计数初值寄存器


SCON : 串口控制寄存器


SBUF : 串行接口收发数据缓冲器




1.中断允许控制寄存器(IE)


46f53759-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


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会先接受优先级较高的中断源请求,然后再接受优先级较低的中断源请求。中断优先级控制寄存器如下:


46f5375a-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp




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:定时器/计数器控制寄存器


46f5375b-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


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:串口控制寄存器


46f5375c-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


SM0、SM1:串口工作模式选择位


46f5375d-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


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:电源控制寄存器


46f5375e-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


SMOD:波特率选择位


SMOD=1,方式1、2、3的波特率加倍


SMOD0: 帧错误检测有效控制位


SMOD0=0时,与SCON寄存器中的SM0/FE位一起指定串行口的工作方式


6.TCON:中断状态标志寄存器


46f5375f-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


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:定时器/计数器工作模式寄存器


46f53760-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


GATE:门控位


置1时只有INT1/0脚为高电平及TR1/0控制位置1时才可以打开定时器/计数器。


C/T~:为0作为定时器,为1作为计数器


M1M0:定时器/计数器工作模式选择位


46f53761-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


8.AUXR:辅助寄存器


46f53762-ac4f-11ed-bcd2-b8ca3a6cb5c4.webp


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




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。