鹈鹕 发表于 2023-11-10 16:44 你说的这个,我好像也碰到过这种情况: 前几天看到一哥们贴出了他的一个程序,是个电子表程序(作者声称非常精确)里面就有这类错误,他的中断程序中有JMP类指令,目标地址下面肯定会碰到RET指令,这就不对了,之后的同级中断肯定永远也不会被执行的。 、、、、、、、、、、、、、、、、 不过你说的JMP类指令 和RET指令是什么啊? 、、、、、、、、、、、、、、 我碰到的情况是定时器中断,而且时间很快,然后外部中断就不起作用了,就是无论等多久都不会执行外部中断的服务程序。 后来设置了中断的优先级后就可以了。 |
不存在打断的问题,最多就是竞争,同时标记中断,谁先谁后的问题 |
中断优先级和查询顺序是两个不同的东西,在STC的单片机数据手册中有描述的,认真看一下就能理解了 |
高中断可以把低中断打断,结束高中断在执行较低中端 |
所谓的“自然优先级”其实只是查询顺序,不存在高低之分 优先级只有两级——高优先级和低优先级 同级优先级的中断,进入了一个中断,就不能被其他中断打断 低优先级的中断执行中,可以被高优先级的中断打断 |
纠正你一个理解错误, 同为低优先级,或者同为高优先级, 外部中断0 是不能打断 外部中断1的。 所谓的自然优先级,是STC的说法,正确的说法应当是,中断检索顺序,即:当发生了中断,单片机先看外部中断0是不是有中断请求,有则执行,没有的话则看看定时器中断0有没有中断请求,以此类推。只有多个中断都排队等待执行时,这个“自然优先级”才有意义。并不是说你在执行同等级中断时能被“自然优先级”高于你的中断打断。 |
你【现在的想法】是不对的,你的【实验现象】是对的,这个实验现象就是51系列单片机的中断规则,而不是你【现在的想法】,即:“1、,,,,那么在同级优先级,,,低优先级可以被高优先级打断;”——是不对的,不能被打断,这是明确的,没有异议,你的试验也证明了这点。 我有一本书,这一内容说的很明了:51系列单片机的6个中断源(51子系列只有5个,没有定时计数器2)只分为两个优先级,由用户自由分配,低优先级可以被高优先级中断,反之不能,同级中断也不能互相中断;你所说的“自然优先级”那不是《优先级》,而是指在同时申请中断时被CPU响应的次序,当CPU正在执行中断程序时如果有同级别的中断申请,CPU不会立即响应要等处理完之后才会,这就是IRET指令的必要性,这个指令不同于RET。前几天看到一哥们贴出了他的一个程序,是个电子表程序(作者声称非常精确)里面就有这类错误,他的中断程序中有JMP类指令,目标地址下面肯定会碰到RET指令,这就不对了,之后的同级中断肯定永远也不会被执行的。所以你的原来的【现在的想法】是不对的,应该按照你的【实验现象】去做,那才是正确的规则。 |
无法判断出你所讲的【A打断B】或【A不能打断B】的真伪。 比如:你说【A打断B】了,是凭什么认定的? 提供一下你认定的【打断、未打断】判定方法、思路。比如,在中断服务程序中亮不同色的灯……。 亦或给出中断程序。 所以,无法与你讨论。 |