找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1372|回复: 8
收起左侧

51单片机中断优先级问题

[复制链接]
ID:1091488 发表于 2023-11-9 19:26 | 显示全部楼层 |阅读模式
我现在的想法是,    1、同为低优先级或者高优先级时,遵循 外部中断0->定时器/计数器T0->外部中断1->定时器/计数器T1->串口中断(优先级由高到低),的自然优先级,那么在同级优先级(同为高优先级或者同为低优先级)时在自然优先级里的低优先级可以被高优先级打断;
    2、倘若设置外部中断0为高优先级,外部中断1为低优先级,那么高优先级可以打断低优先级,即外部中断0可以打断外部中断1;
    3、在51单片机中设置优先级的寄存器为IP,IP有5位有效位,PS,PT1,PX1,PT0,PX0;且IP可以进行位寻址,现在只是用外部中断0以及1,就有两种对其优先级定义的方式,(设置同为高优先级时,IP=1和PX1=1、PX0=1;意义相同);

基于此我进行了验证:
    按键K3(连接P3.2引脚,外都中断0),按键K4(连接P3.3引脚,外都中断1),LED灯连接在P2端口,设置其触发方式均为低电平触发;
    1、分别设置外都中断0和1,为同级时查看中断的相互打断情况;2、分别设置外部中断0和1,为一个高另一个低时中断打断情况;
1、实验现象为:
1)、IP=0时,在运行外部中断0的中断服务函数时,外部中断1无法打断其运行,同样外部中断1的中断服务函数运行时,外部中断0无法打断;
2)、PX0=0、PX1=0时,在运行外部中断0的中断服务函数时,外部中断1无法打断其运行,同样外部中断1的中断服务函数运行时,外部中断0无法打断;
3)、IP=1时,在运行外部中断0的中断服务函数时,外部中断1无法打断其运行,外部中断1的中断服务函数运行时,外部中断0可以打断外部中断1;
4)、PX0=1、PX1=1时,在运行外部中断0的中断服务函数时,外部中断1无法打断其运行,同样外部中断1的中断服务函数运行时,外部中断0无法打断;

疑惑之处:
    1、IP无论设置为1(高优先级)还是0(低优先级),都应遵循  【外部中断0->定时器/计数器T0->外部中断1->定时器/计数器T1->串口中断(优先级由高到低)】这一优先级,即在外部中断0的中断服务函数运行时,外部中断1应无法打断,明显实验现象  1)、2)、4),不符合
    2、在对外部中断0和外部中断1的中断优先级设定时,可以使用IP,也可以PX0,PX1,但是实验现象中的  1)和2)不相统一,3)和4)不相统一


感谢,感谢,感谢

屏幕截图 2023-11-09 192243.png 屏幕截图 2023-11-09 192231.png 屏幕截图 2023-11-09 192219.png 屏幕截图 2023-11-09 192150.png 屏幕截图 2023-11-09 192130.png 屏幕截图 2023-11-09 184259.png 屏幕截图 2023-11-09 184219.png 屏幕截图 2023-11-09 184142.png

单片机开发板原理图.pdf

141.71 KB, 下载次数: 5

回复

使用道具 举报

ID:123289 发表于 2023-11-10 15:39 | 显示全部楼层
无法判断出你所讲的【A打断B】或【A不能打断B】的真伪。
比如:你说【A打断B】了,是凭什么认定的?
提供一下你认定的【打断、未打断】判定方法、思路。比如,在中断服务程序中亮不同色的灯……。
亦或给出中断程序。
所以,无法与你讨论。
回复

使用道具 举报

ID:397054 发表于 2023-11-10 16:44 | 显示全部楼层
你【现在的想法】是不对的,你的【实验现象】是对的,这个实验现象就是51系列单片机的中断规则,而不是你【现在的想法】,即:“1、,,,,那么在同级优先级,,,低优先级可以被高优先级打断;”——是不对的,不能被打断,这是明确的,没有异议,你的试验也证明了这点。

我有一本书,这一内容说的很明了:51系列单片机的6个中断源(51子系列只有5个,没有定时计数器2)只分为两个优先级,由用户自由分配,低优先级可以被高优先级中断,反之不能,同级中断也不能互相中断;你所说的“自然优先级”那不是《优先级》,而是指在同时申请中断时被CPU响应的次序,当CPU正在执行中断程序时如果有同级别的中断申请,CPU不会立即响应要等处理完之后才会,这就是IRET指令的必要性,这个指令不同于RET。前几天看到一哥们贴出了他的一个程序,是个电子表程序(作者声称非常精确)里面就有这类错误,他的中断程序中有JMP类指令,目标地址下面肯定会碰到RET指令,这就不对了,之后的同级中断肯定永远也不会被执行的。所以你的原来的【现在的想法】是不对的,应该按照你的【实验现象】去做,那才是正确的规则。
回复

使用道具 举报

ID:624769 发表于 2023-11-11 16:55 | 显示全部楼层
纠正你一个理解错误, 同为低优先级,或者同为高优先级, 外部中断0 是不能打断 外部中断1的。
所谓的自然优先级,是STC的说法,正确的说法应当是,中断检索顺序,即:当发生了中断,单片机先看外部中断0是不是有中断请求,有则执行,没有的话则看看定时器中断0有没有中断请求,以此类推。只有多个中断都排队等待执行时,这个“自然优先级”才有意义。并不是说你在执行同等级中断时能被“自然优先级”高于你的中断打断。
回复

使用道具 举报

ID:647261 发表于 2023-11-14 16:44 | 显示全部楼层
所谓的“自然优先级”其实只是查询顺序,不存在高低之分
优先级只有两级——高优先级和低优先级
同级优先级的中断,进入了一个中断,就不能被其他中断打断
低优先级的中断执行中,可以被高优先级的中断打断
回复

使用道具 举报

ID:1097455 发表于 2023-11-15 08:41 | 显示全部楼层
高中断可以把低中断打断,结束高中断在执行较低中端
回复

使用道具 举报

ID:401564 发表于 2023-11-15 22:56 | 显示全部楼层
中断优先级和查询顺序是两个不同的东西,在STC的单片机数据手册中有描述的,认真看一下就能理解了
回复

使用道具 举报

ID:879348 发表于 2023-11-16 10:50 | 显示全部楼层
不存在打断的问题,最多就是竞争,同时标记中断,谁先谁后的问题
回复

使用道具 举报

ID:1091094 发表于 2023-11-18 11:35 | 显示全部楼层
鹈鹕 发表于 2023-11-10 16:44
你【现在的想法】是不对的,你的【实验现象】是对的,这个实验现象就是51系列单片机的中断规则,而不是你【 ...

你说的这个,我好像也碰到过这种情况:
前几天看到一哥们贴出了他的一个程序,是个电子表程序(作者声称非常精确)里面就有这类错误,他的中断程序中有JMP类指令,目标地址下面肯定会碰到RET指令,这就不对了,之后的同级中断肯定永远也不会被执行的。
、、、、、、、、、、、、、、、、
不过你说的JMP类指令  和RET指令是什么啊?

、、、、、、、、、、、、、、
我碰到的情况是定时器中断,而且时间很快,然后外部中断就不起作用了,就是无论等多久都不会执行外部中断的服务程序。   后来设置了中断的优先级后就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表