找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

外部中断0和中断1交替设置优先级时候出现问题?

查看数: 5706 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-8-29 16:21

正文摘要:

如下程序,在实验板上调试的时候出现这种情况: 当按下k3时候,外部中断0触发,灯向右移动,接着按下k4,外部中断1触发(设置了中断0低优先级,中断1高优先级),灯向左移动, 接着再按k3按键,就不再实现中断0触 ...

回复

ID:53308 发表于 2013-8-30 16:01
ahshmj 发表于 2013-8-30 08:31
你应该在中断程序里面仅仅做标记,退出中断后,根据标记来执行动作。
K3:
        SETB    F0

谢谢提示,我试试行不行,这是我移植c程序里面的内容再写的。现在学着发现手头能参考的只有c程序了。所以现在慢慢转去用c写。
ID:53308 发表于 2013-8-30 15:58
ahshmj 发表于 2013-8-30 08:24
你这样改了以后是不是手一放开按键就停止了?

不会,因为程序一直都在做跳转循环,没有按下比它更高级别的优先时候,程序一直都在做循环,松手也一直在run
ID:7485 发表于 2013-8-30 08:31
你应该在中断程序里面仅仅做标记,退出中断后,根据标记来执行动作。
K3:
        SETB    F0
        RETI
K4:
        CLR     F0
       RETI

HERE:                                      ;你原来的标号   
         JB    F0,  XXXX
        ......
       SJMP HERE     
ID:7485 发表于 2013-8-30 08:24
你这样改了以后是不是手一放开按键就停止了?
ID:53308 发表于 2013-8-29 16:42
终于找出原因来了,是delay那里出了问题,将ret改成reti就可以。
我想应该是中断程序中的子程序也需要加入reti,一旦发现中断就可以跳出,然后再跳到中断程序,最后再跳到优先级别高的中断程序。
    否则就不会跳出子程序,一直在做延时后,跳回原程序。

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

Powered by 单片机教程网

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