51单片机2个外中断的应用,这个怎么设计?

51单片机的P1口上接有8只LED。在外部中断0输入引脚P3.2( )引脚接有一只按钮开关K1。在外部中断1输入引脚P3.3( )引脚接有一只按钮开关K2。程序要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,仅K1(P3.2)按下时,左右4只LED交替闪烁。仅按下K2(P3.3),P1口的8只LED全部闪亮。两个外中断的优先级相同。

中断的允许和禁止就是中断的开放和关闭,中断允许就是开放中断,中断的禁止就是关闭中断。从以上说明我们可看出,MCS-51的中断允许是通过两级控制的,以EA位作为总中断控制位,以各中断控制位为分控制位。当总中断位为禁止状态时,不管分控制位是允许或禁止整个中断都是禁止的。只有当EA=1(允许)时,才能由各分控制位设置各自的中断允许与禁止。MCS-51单片机复位后,IE=00H,因此中断处于禁止状态。

值得一提的是:单片机中断响应后不会自动关闭中断,因此在转入中断服务程序后,应由软件指令禁止中断。

中断优先级控制寄存器 (IP)

MCS-51的中断优先级控制比较简单,只设置了高、低两个级别的有限级,各中断源的优先级别由优先寄存器(IP)进行控制。

·PX0——外中断0(INT0)优先级控制位。
·PT0——定时中断0(T0)优先级控制位。
·PX1——外中断1(INT1)优先级控制位。
·PT1——定时中断1(T1)优先级控制位。
·PS ——串行中断(ES)优先级控制位。

控制位=0,优先级为低。控制位=1,优先级为高。

中断优先级是为了中断嵌套服务的,控制原则为:
(1) 低优先级中断不能打断高优先级的中断服务,而高优先级的中断服务可以打断低优先级的中断服务。
(2) 同级的中断已经响应,其他中断将被禁止。
(3) 如果同级的多个中断源同时出现,CPU将按查询次序确定哪个中断被响应,次序为:外中断0→定时中断0→外中断1→定时中断1→串行中断。

中断控制寄存器的状态设置

在应用中,我们可以通过相应的控制寄存器来使用中断系统,因此从使用的角度上看,这些控制寄存器是面向用户的。这些控制寄存器既可以进行字节寻址,也可以进行位寻址,也就是对位状态的寻址既可以使用字节操作指令也可以使用位操作指令,例如:

MOV IE,#81H

如使用位操作指令,也可写为:
SETB EA
SETB EX0

对于一般的外中断程序,我们可以这样安排:

ORG 0000H ;主程序入口
START: AJMP MAIN

ORG 0003H ;外中断程序入口
AJMP INT00

MAIN: MOV IE,#81H ;允许总中断和外中断
…… ;主程序
……
……

INT00: …… ;外中断服务程序
……
RETI ;中断返回
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-05
按照您的阐述,设置好中断,然后写中断函数嘛!中断0的服务程序写左右4只LED交替闪烁,中断1的服务程序写P1口的8只LED全部闪亮,MAIN()的是循环里写流水程序嘛。本回答被网友采纳
第2个回答  2011-06-08
兄弟,这个不难
在主程序里设计一个流水灯闪烁程序;
在外部中断0里做一个if(K1==0)
{
则左右4只LED交替闪烁;
}
在外部中断1里做一个if(K2==0)
{
8只LED全部闪亮;
}
就可以了本回答被提问者采纳
第3个回答  2011-06-08
两个外中断的优先级应该不可能相同吧?!中断有等级的,低级的不能打断高级中断的
第4个回答  2011-06-08
在主程序的死循环里显示流水,中断1发生时马上屏蔽中断2,然后调用“左右4只LED交替闪烁”;中断2发生时马上屏蔽中断1,然后调用“8只LED全部闪亮”。
具体你的描述还是不够清晰:中断发生后是一直执行中断后的闪烁呢,还是中断撤消后会回到平常状态?这关系到中断结束后是否要恢复另一中断的开启。

51单片机2个外中断的应用,这个怎么设计?
(1) 低优先级中断不能打断高优先级的中断服务,而高优先级的中断服务可以打断低优先级的中断服务。(2) 同级的中断已经响应,其他中断将被禁止。(3) 如果同级的多个中断源同时出现,CPU将按查询次序确定哪个中断被响应,次序为:外中断0→定时中断0→外中断1→定时中断1→串行中断。中断控制寄存器的状...

MCS-51单片机外部中断的触发方式如何设定和选择
1、打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。2、导入51单片机的头文件,否则后续使用的端口都会出现未定义的情况,然后在主函数中,使得EA=1,即总中断允许,...

51单片机怎么同时开启两个中断的问题?
要优先于高级中断,再开低级中断。当系统有个定时中断。比如定时采集温度值,然后通过串口发送到上位机。这样程序里要用到定时中断和串口中断。处理了定时中断后,再处理的串口中断。

51单片机的两个外部中断可否同时开启
可以,只要第二次的中断优先级高于第一次就行。通过设置了中断控制寄存器IP来实现。如果不设置 默认的优先级顺序为:INT0 TO INT1 TI 串口中断。do{} while(P3^3==0);先执行一次DO里的循环 在P3.3=0(INT1中断) 如果成立继续执行循环 do{} while(P3^3==1);TR1=0;先执行一次DO里的循环...

C语言中,51单片机怎么将进入外部中断服务程序,
51单片机的外部中断主要分为两种触发方式。首先,我们有外部中断0(IT0,TCON.0),这是一个中断触发方式控制位。当IT0值设置为0时,意味着中断是电平触发方式;而当其值设为1时,则表示中断为边沿触发方式,其中下降沿有效。在进行51单片机的外部中断初始化时,我们首先需要开启中断源。对于外部中断0...

51单片机中断怎样嵌套?
51单片机总共支持5个中断源,分别为外部中断0,定时器0,外部中断1,定时器,串行中断 这5个中断源都可以独立申请中断 当需要同时进行两个中断时,即可自动通过中断嵌套的方式来进行 比如说,当需要用外部中断0来启动和停止定时器计数 由于外部中断0的优先级比定时器0的优先级高 所以当定时器正在计数时...

关于51单片机的外部中断使用方法
中断用的是外部中断0,要触发中断的时候,就用一根杜邦线一端接地,一端接到单片机的P3.2口就行,这样,就满足了你的要求了。外部中断的触发方式有低电平触发和下降沿触发。到底是那种触发方式,要设置中断允许寄存器中IT0的值,如果IT0=0,像我写的程序,就是低电平触发,如果为1,就是下降沿触发...

51单片机有哪几个中断源?如何设定它们的优先级?
中断源有5个,分别为外部中断0请求、外部中断1请求、T0溢出中断请求TF0,T1溢出中断请求TF1和串行口中断请求RI或TI。51单片机有两个中断优先级:高优先级和低优先级。每个中断源都可以通过设置中断优先级寄存器IP确定为高优先级中断或低优先级中断,实现二级嵌套。同一优先级别的中断源可能不止一个,因此...

51单片机的每个中断源有几个中断优先级?它们在进行中断请求是单片机如 ...
51单片机的每个中断源有两个中断优先级,分别是高优先级和低优先级。在51单片机中,中断是处理突发事件或异步事件的一种重要机制。当某个中断源发出中断请求时,单片机会根据当前的中断优先级和中断允许标志来决定是否响应该中断。而每个中断源,都被赋予了两个级别的优先级,这样的设计使得中断的处理更加...

51单片机怎么设置外部中断和时钟中断的优先级?使得外部中断优先级大于...
51单片机中断源总共有5个,即2个外部中断、2个定时\/计数器中断、1个串行口中断。没有时钟中断,你说的时钟中断是指定时器中断吧。中断优先级的设定 主要是对中断优先级寄存器IP的设置,其8位内容 如下:XXPT2 PS PT1 PX1 PT0 PX0 其中PX0为外部中断0的优先级设定位,PX1为外部中断1的优先...

相似回答