遇到一个奇怪的问题,关于中断优先级
C8051F340中、英文资料明确说明,中断优先级IP初始化为#00H时候,定时器0中断的自然优先级高于外部中断1
于是乎,由于程序需要,我发现这一点实现不了,
思路,将单片机正确初始化将,并且MOV IP,#00H
外部中断1初始化、并打开,由按键低电平触发、进入中断后直接LJMP $(以上已经确保单条程序正确)然后打开定时器0初始化,并在主程序里相隔5S进入定时器0并且点亮一盏灯,正常退出,主程序循环(以上程序经过反复检测确保正确)
经过上述设置后,原本的情况应该是:当按键按下,进入外部中断1,执行中断内部的LJMP $,不退出中断、然后看主程序是否能进入定时器0中断,并且点亮灯
结果:灯不亮
分析:这是一个最简洁的测试程序,结果与资料不符合,定时器0没有能成功中断外部中断1
修改:我抱着尝试的心态,将IP修改为MOV IP,#02H(将定时器0中断优先级置高)
结果:按键后,程序进入外部中断的LJMP $,灯点亮,程序正常运行
总结:在我的理解看来:如果默认中断优先级为#00H时,个中断相遇时,按照自然排列高低,也就是说,外部中断1与定时器0中断相遇时,定时器0能得到CPU的响应,并且当外部中断1已经产生中断未且退出时,定时器0也能顺利产生中断,不用特意改变IP的设置、
问题:请高人解释,是我错了,还是芯片资料与芯片本身不符合?
如果是我错了,那错在哪里、(程序不用怀疑有问题)
(有条件的可以自己做一下这个实验),如果结果和我得到的结果相反,也麻烦通知一下 |