51单片机具体如何设置IP值改变优先级

最近学习51单片机 看到IP时 我想知道总共5个中断源 用IP修改时 我能不能具体设置5个中断源相互之间的优先级 而不是只让一个中断优于或者次于其他4个中断 用C语言实现哦

设置不了。51单片机就只有二级中断优先级而已。
51单片机的中断可嵌套,但至多支持二级嵌套。
51单片机的默认(此时的IP寄存器不做设置)中断优先级为:
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;
但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务的优先级,而不是可提供中断嵌套能力的优先级。这种优先级被称为逻辑优先级。
例如:当计数器0中断和外部中断1(优先级 计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。
要实现真正的嵌套形式的优先级,也即高优先级中断服务可以打断低优先级中断服务的情况,必须通过设置中断优先级寄存器IP来实现;这种优先级被称为物理优先级。
例如:设置IP = 0x10,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。追问

有点小贪心了 但能再问个问题吗
中断系统中 我觉得有些程序可以不用在开头的时候就给定时器赋初值 在后面的中断服务程序再赋初值其实也是可以的 额 这个可以吗到底

追答

可以啊。

前两天回家,没的空上网……

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-11
51单片机设置IP值改变优先级的方法:
【1】51有默认的中断优先级,在有中断标志时,MCU查询的顺序是:
1、外部中断0;
2、定时器中断0;
3、外部中断1;
4、定时器中断1;
5、串口中断。
这个不用设置几句可以实现你上述的功能的。当然,你要这样自行管理中断的优先级也是好事,是编程的好习惯。
51本来就能嵌套两级中断,可以通过设置中断优先级寄存器IP设置为最高或者最低优先级。
其实,只要了解了中断的原理,压实现中断嵌套式很简单的事情。多看看51的DataSheet,学东西就不要怕不厌其烦,一定要多看Datasheet。
【2】设置IP = 0x10,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。
【3】T1中断会一直等待cpu执行完T0中断函数再执行T1中断函数。一直要等到T0中断函数执行完毕后才会处理T1中断。如果在执行T0中断的过程中T1第二次相应中断,也要等T0全部执行完之后再相应T1中断,这时候T1中断只会被执行一次。本回答被网友采纳
第2个回答  2014-01-24
貌似51一次最多也是有两层堆栈,也就是只是有两个中断,除非软件上做咯
相似回答