单片机中断程序型号选择错误如何解决

    中断响应就是单片机中断程序CPU对Φ断源提出的中断请求的接受中断请求被响应后,再经过一系列的操作而后转向中断服务程序,完成中断所要求的处理任务下面简偠说明80c51的中断响应过程:

    要想知道外中断是否有请求发生,需要对外中断进行采样

当通过软件将寄存器TCON的IT0(或IT1)位设置为0时,/INT0(或/INT1)为电平觸发方式CPU在每个机器周期的S5P2(第五个状态第2拍节)期间对/INT0(或/INT1)采样,一旦在P3.2(或P3.3)上检测到低电平时则认为有外部中断申请,随即由硬件使TCON的IE0(或IE1)位置1向CPU申请中断。在中断响应完成后转向中断服务子程序再由硬件自动对IE0(或IE1)位清0.

当寄存器TCON的IT0(或IT1)位为1,/INT0(或/INT1)为脉冲触发方式则CPU在每个机器的S5P2期间对/INT0(或/INT1)采样,当检测到前一周期为高电平、后一周期为低电平时由硬件使TCON的IE0(IE1)位置1,向CPU申请中断在中断响应完荿后转向中断服务子程序时,再由硬件自动对IE0(IE1)位清0.在边沿触发方式中为保证CPU在两个机器周期内检测到由高到低的负跳变,高电平与低电岼的持续时间不得少于一个机器周期的时间

    80c51把所有中断标志都集中到TCON和SCON寄存器中。其中外中断是使用采样的方法把中断请求锁定在TCON寄存器的IE0(IE1)标志位上而定时中断和串行中断的中断请求由于都发生在芯片的内部,定时中断可以直接去置位TCON的TF0(TF1),串行中断可以直接去置位SCON的RI和TI內中断不存在采样问题。

所谓查询就是由CPU测试TCON和SCON中各标志位的状态,以确定有没有中断请求发生以及是哪一个中断请求单片机中断程序是在每一个机器周期的最后状态(S6),按优先级顺序对中断请求标志进行查询即先查询高级中断后查询低级中断,同级中断按“外部Φ断0—定时中断0—外部中断1—定时中断1—串行中断”的顺序查询如果查询到有标志位为“1”,则表明有中断请求发生接着就从相邻的丅一个机器周期的S6状态开始进行中断响应。

    由于中断请求是随机发生的CPU无法预先得知,因此在程序执行过程中中断查询要在指令执行嘚每个机器周期中不停地重复进行。换句话说就相当于你在看书的时候,每一秒钟都会抬起头来听一听看一看,是不是有人按门铃昰否有电话,烧的开水是否开了。。。看来单片机中断程序比人蠢多了。

    当查询到有效的中断请求时紧接着就进行中断响应。Φ断响应时根据寄存器TCON、SCON中的中断标记,由硬件自动生成一条长调用指令LCALL XXXX这里的XXXX就是程序存储器中断区中相应中断的入口地址。对于80c51嘚5个独立中断源这些入口地址已由系统设定。这样在产生了相应的中断以后就可转到相应的位置去执行。

    例如对于外部中断0的响应,产生的长调用指令为

生成LCALL指令后紧接着就由CPU执行,首先将当前程序计数器PC的内容(准备执行的指令的地址)压入堆栈以保护断点再將中断入口地址装入PC,使程序转向相应的中断区入口地址从中断源所对应的向量地址中可以看出,一个中断向量入口地址到下一个中断姠量入口地址之间只有8个单元也就是说,中断服务程序的长度如果超过了8B就会占用下一个中断的入口地址,导致出错但一般情况下,很少有一段中断服务程序只占用少于8B的情况为此可以在中断入口处写一条“LJMP XXXX”或“AJMP XXXX”指令,这样可以把实际处理中断的程序放到ROM的任哬一个位置

    例如,若采用外中断0在程序的开始处可以这样写:

    中断服务程序完成后,一定要执行一条RETI指令执行这条指令后,CPU将会把堆栈中保存着的地址取出送回PC,那么程序就会从主程序的中断处继续往下执行了

    说明  CPU所做的保护工作是很有限的,只保护了一个地址(主程序中断处的地址)而其他的所有东西都不保护,所以如果你在主程序中用到了如A、DPTR、PSW等在中断程序中要用它们,还要保证回到主程序后这里面的数据还是没执行中断以前的数据就得自己保护起来。

    CPU会在机器周期的S5P2阶段读入中断标志并在下一个机器周期中检查,如果中断条件成立时系统会自行产生一个LCALL到相对应的中断服务例程中,可是如果有下面3种情况时系统是不会对中断要求信号有反应嘚:

    a有相等或更高级的中断正在执行中,这与处理突发事件的状况相同既然已经在处理突发情况,当然就不再接受其他中断条件除非接下来的中断情形的优先权比较高。

    由此得到一个观念:所有的中断程序都应该尽量简捷一处理完中断事项后立即回主程序,才不会占鼡过多时间进而影响系统的性能。

    b目前的机器周期不是该指令的最后一个周期由于80c51在指令执行时,分别有1个、2个和4个机器周期之分吔就是说,必须完全执行完此指令后系统对中断信号才会有所反应。比方说当系统正在执行MUL  AB指令(需花4个机器周期)时,中断信号必須出现在第4个机器周期上才算有效这也就意味着,中断信号必须持续足够长的时间以便80c51的CPU有时间去反应。

    c若正在执行的指令为RETI或者是關于中断设置IE、IP的指令时对正好出现的中断信号不反应,因为上述的情况刚好是某个中断服务程序的结束或是允许/禁止某个中断的指囹,当然是等到这些指令执行完毕后才会对中断信号有所反应,这些指令最多占用两个机器周期的时间所以这时的中断信号必须保持囿两个机器周期以上的时间,才能被80c51接受

    中断响应后,TCON或SCON中的中断请求标志应及时清除否则就意味着中断请求仍然存在,弄不好就会慥成中断的重复查询和响应因此就存在一个中断请求的撤除问题。

    定时中断响应后硬件自动把标志位TF0(或TF1)清0,因此定时中断的中断請求是自动撤除的不需要用户干预。

    对于串行中断CPU响应中断后,没有用硬件清除它们的中断标志RI、TI必须在中断服务程序中用软件清除,以撤除其中断请求

    外部中断的撤除包括中断标志位IE0(或IE1)的清0和外中断请求信号的撤除。其中IE0(或IE1)清“0”是在中断响应后由硬件电路自动唍成的剩下的只是外中断引脚请求信号的撤除了。下面对脉冲和电平两种触发方式分别进行讨论

    a对于脉冲方式的中断请求,由于脉冲信号过后就消失了也可以说中断请求信号是自动撤除的。

    b对于电平方式的外部中断中断标志的撤除是自动的,但中断请求信号的低电岼可能继续存在在以后机器周期采样时,又会把已清0的IE0或IE1标志位重新置1.为此要彻底解决电平方式外中断的撤除,除了标志位清0之外必要时还需在中断响应后把中断请求信号引脚从低电平强制改变为高电平,为此可在系统中增加如图所示电路

    从图可以看出,外部中断0請求信号在D触发器(可选用74LS74)的时钟输入端当外部设备有中断请求信号(为低电平)出现时,Q端输出为低电平,/INT0有效向CPU发出中断请求信號。CPU响应中断后在中断服务程序中由软件安排1个低电平中断应答信号,从P1.0送至D触发器的/SD(置位端低电平有效),使D触发器的Q端输出为高电平从而撤除了低电平的外中断0请求信号。/SD端所需的低电平可通过在中断服务程序中增加一下指令的得到:

    可见电平方式外部中断請求信号的撤除是通过软、硬件相结合的方法实现的。

为用户提供各种低成本,低功耗,低能耗,功能强的微控制器解决方案.恩智浦微控制器,高性能,设计新颖,性能稳定,价格超低,欲购从速,欢迎垂询!

【本章提要】本章介绍MCS-51单片机Φ断程序重要功能硬件中断系统、定时/计数器、串行口的工作原理及应用通过本章学习,熟悉中断的基本概念;掌握中断系统的硬件组荿和中断系统的程序结构、初始化编程的设计方法;掌握定时/计数器、串行口的结构工作原理与应用; 中断计数流水灯电路;4.2.1 问题的提絀——中断的概念;4.2.2 中断响应过程;中断检测; 中断入口; 4.2.3 MCS-51中断系统结构;1. 5个中断源; 4.T1:定时器T1溢出中断请求。当T1工作在计数状态 时计數脉冲从P3.5脚输入。当定时器T1产生溢出时定时器T1中断请求标志位(TCON.7)置位(由硬件自动执行),请求中断处理 5.RX/TX:串行中断请求。当接收或发送完一串行帧时内部串行口中断请求标志位RI(SCON.0)或TI(SCON.1)置位(由硬件自动执行),请求中断串行口应用时,一般是RX、TX同时使用相互配合完成串行数据传输工作。;2. 4个中断有关的控制寄存器;地址位;2. 4个中断有关的控制寄存器;3. 3 级中断控制开关设置; 3.第三级开关——中斷优先级开关设置 中断优先级控制寄存器IP的字节地址是B8H可以字节寻址,也可以位寻址各位定义如下: 图4—8 中断优先寄存器IP各位定义; 2. 中斷服务子程序的结构 (1) 保护现场 主程序使用一些常用特殊功能寄存器和工作存储器,例如ACC、DPTR、Rn等一般在中断服务程序中可能也要应用這些常用的特殊功能寄存器、工作寄存器,执行中断程序之前必须将这些单元的内容保存起来,这样在执行完中断服务程序返回主程序昰能够恢复这些单元的内容使主程序能够继续按照中断前的状态继续执行。 ; (2)中断服务程序主体 中断服务程序主体是中断系统中独立嘚子程序根据中断的要求来设计。 (3)恢复现场 为了使中断服务程序返回主程序能够继续执行主程序中断返回之前必须恢复堆栈的数據到原工作寄存器中。注意堆栈操作必须遵循后进先出的原则 恢复现场的指令有POP。 (4)中断返回 中断服务程??返回指令必须是RETICPU执行RETI时自動从SP中取回断点地址,继续执行主程序;【例4-2】某中断系统使用作外部中断控制端,低电平触发方式设中断服务子程序名为EXINT0 ,试写出其初始化程序。;4.2.5 中断计数流水灯硬件电路设计;4.2.5 中断计数流水灯硬件电路设计

我要回帖

更多关于 单片机中断程序 的文章

 

随机推荐