您现在的位置是:首页 > 创新技术
51入门系列教程| 无法逃避的宿命--中断
智慧创新站
2024-11-21【创新技术】198人已围观
简介通过前面几贴,应该已经大概了解51单片机是如何进行简单的使用,今天一起聊聊单片机系统里面非常重要的一个特性--中断。可以这么说,如果不能够熟练使用单片机的中断功能,基本上,也等同于不会使用单片机,So,咱还是先了解一下啥是中断。所谓中断,其实就是单片机在执行一般代码时,被更加重要的事情所打断,暂时放...
通过前面几贴,应该已经大概了解51单片机是如何进行简单的使用,今天一起聊聊单片机系统里面非常重要的一个特性--中断。可以这么说,如果不能够熟练使用单片机的中断功能,基本上,也等同于不会使用单片机,So,咱还是先了解一下啥是中断。
所谓中断,其实就是单片机在执行一般代码时,被更加重要的事情所打断,暂时放下一般代码的执行,先处理这件重要的事情,举个栗子吧:看书事件
假设你正在图书馆自习看书,四周静悄悄,大家都在认真地看书,这个时候;,突然你的手提电话(你的铃声是“江南style”)大声地唱出来:我爸刚弄死它……正常的你反应应该是停止看书,看向你的手机,根据情况,决定做出挂机、调为静音还是赶紧拿起手机跑到门外接听等等。对手机铃声响起这件事情的处理,同时,如果没有外界干扰的话,你会记下桌面上的书看到第55页第7行。合上课本,进行对手机的操作。等到你完成对手机的处理,这个时候,你再回到桌面上,继续手机铃声响起前的工作,翻到书的第55页,从第7行接着看。当然,如果你两耳不闻窗外事,一心只读圣贤书,也可以把手机调成静音放进书包,完全不理会进来的电话。
上面这个实际的状况,其实就是一个很经典的中断案例,把自己看成一个单片机,而看书正是你这时正在执行的主要程序,有电话进来,则是一个中断事件、这个中断事件是怎样一个过程呢?咱来一步步分析:
第一步,进入中断,有电话进来,你看书被打断,这里有个蛮重要的条件。就是你是被自己特有的铃声或震动打断,也就是说,如果你的手机铃声是“江南style”。那么一个“甩葱歌”的手机铃声是不会让你停止看书的,如果你的手机调成了震动。别人的手机铃声响起,你也不会去停止看书,So,介是中断触发条件。
第二步,处理中断,确认是自己的手机响起后,你会放下手头上的事情----看书。但是你会保留记忆住你在正在做的事情,譬如看书的页码之类。准备着你回来,继续接着看书,这个便是数据进栈,保护现场。完成上述工作后,你就开始对手机的处理。如果是女神打来,毫不犹豫地拿起手机跑到门外接听。如果是女汉纸打开,默默地按成静音。如果是好基友打来,直接挂掉。这一系列对手机的操作,都是你自己根据需要进行的处理。可以称之为中断服务程序。也就是说,中断来了,具体做出响应的,还是中断服务程序。
第三步,结束中断,手机处理完了,继续回去看书吧。走到书桌前,回忆起自己看到55页第7行,然后把书翻到55页,接着从第7行开始继续阅读。这个阶段便是数据出栈,现场恢复,当然,如果在处理完手机后觉得内急,不继续看书,而是接着去上厕所。那叫中断嵌套,简而言之是中断中还有中断,这个时候,咱先响应哪个,就看那件事情比较着急了。术语一点,叫那件事情的优先级比较高
最后一种情况,如果你把手机调成静音放进书包,完全不理会进来的电话,只能说明,你根本没有打算去响应这个中断。或者根本不去响应任何中断
Ok,通过上面的介绍,中断应该有个基本的了解。对于51而言,中断的资源比较有限,如果抛开单片机内部的异常中断。总共可利用的只有外部中断int0、int1,定时器t0、t1。如果是52(可以理解为增强型的51)的话,还会有t2和串口中断,其实不同厂家的51单片机,外设数量也不太一样,中断资源也就有所区别。这里只对51的外部中断进行讨论:先看看和外部中断有关的寄存器,其实51的外部中断控制非常简单,半个字节的TCON和IE寄存器就全部解决了。头文件已经把这些寄存器的位寻址封装好,直接调用赋值即可。
打开51文件(在头文件处右击)
选择即可
看看这里,做些简单的解释吧
/*TCON*/8个寄存器位如下
sbitTF1=0x8F;
sbitTR1=0x8E;
sbitTF0=0x8D;
sbitTR0=0x8C;
sbitIE1=0x8B;外部中断1请求标志
sbitIT1=0x8A;外部中断1触发方式选择位
sbitIE0=0x89;外部中断0请求标志
sbitIT0=0x88;外部中断0触发方式选择位
/*IE*/6个寄存器位如下,另外2个保留
sbitEA=0xAF;全局中断允许位
sbitES=0xAC;
sbitET1=0xAB;
sbitEX1=0xAA;外部中断1中断允许位interrupt2(外部中断1中断服务程序入口)
sbitET0=0xA9;
sbitEX0=0xA8;外部中断0中断允许位interrupt0(外部中断0中断服务程序入口)
/*IP*/优先级配置寄存器
sbitPS=0xBC;
sbitPT1=0xBB;
sbitPX1=0xBA;//外部中断1优先级控制位
sbitPT0=0xB9;
sbitPX0=0xB8;//外部中断0优先级控制位
上面有注释的便是51单片机外部中断相关的寄存器,如果我们只使用外部中断0(INT0)的话,需要处理的寄存器便只有EA、EX0和IT0了。和看书事件,特别要注意的是,51单片机外部中断,仅支持电平触发和下降沿触发,EX0这个寄存器位是用于决定是否响应INT0,EA则是决定是不是对中断进行响应。IT0这个寄存器位是用于选择触发方式,置0为低电平中断,置1为下降沿中断
注:INT0端口在P32口
详见下面的管脚分配
看粗来了么?外部中断INT0和INT1其实是从和管脚输入的,上面的非号表示低电平或者下降沿有效。
上代码
上图
按键按住不放,给外部中断0口一直低电平,Led并没有闪烁,也就说明IT0=1时,就是下降沿触发了
很赞哦!(164)