• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于单片机外部中断返回问题

f28f389b6c478b8e 2020-08-14 浏览量:810
void ext0() interrupt 0 
{

keyscan;();//键盘里改变 F 的数字

}
void main()
{
                        while(1)
                                {
                                        switch(F)
                                                {
                                                        case 1:
                                                                 pattern1();//里面很多语句
                                                        break;
                                                        case 2:
                                                                 pattern2();//里面很多语句
                                                        break;
                                                        case 3:
                                                                 pattern3();//里面很多语句
                                                        break;
                                                                                                
                                                }

}
按下外部中断键 进入中断,中断里就是键 盘扫描,改变F的数值 ,但是中断结束返回后,不会立即执行F数值 所指定的语句,而是返回中断点执行完原来的,才会重新判断F的数值 ,执行相应的语句,我想这个应该 怎么写才能F数值 发生改变后  立即执行,大师门给个思路。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • C语言是没有办法在中断函数结束后指定跳转其他地方的,这个直接操作汇编可能可以实现,把中断前压栈的信息取出来却不赋值给PC指针,而是把switch的位置付给PC指针。

    但正常来说这种需求是很罕见的,可操作性也不高,因为单片机运行速度很快,所有完全可以等一个周期的代码运行完了再操作,在者你在一个周期没有运行完的情况下,强行跳转到新的一个周期很难保证这个过程中会不会出现什么野指针之类的麻烦。如果一个周期很长,你急需在按键之后立即中断他,要么采用实时操作系统,直接中断这个任务;要么在长等待的语句里面判断是否有新的按键时间,再使用goto语句/break语句跳转。

    • 发布于 2020-08-14
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 肯定要等pattern执行完才能执行新的switch函数,不过有个办法可以跳出pattern,就是用goto语句,在pattern里面多个地方然判断f的值,如果改变立刻goto到当前函数结尾语句也可以用return,这样就可以快速跳出当前的函数,重新去函数执行switch
    • 发布于2020-08-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断函数的调用者是中断控制器,它的返回值没有意义,这种逻辑最好放在main函数里面实现,中断只是做一个状态位的改变
    • 发布于2020-08-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 把你那个keyscan函数发上来看看,只描述看不出什么问题。
    • 发布于2020-08-15
    • 举报
    • 评论 0
    • 0
    • 0

  • C语言中断完了后,就是会回到进中断前的地方去运行,是芯片内部进行控制的,无法用户自己控制
    • 发布于2020-08-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 你可以直接将键盘扫描的语句让在主函数中,因为中断返回的时候会返回进入中断之前的地方继续执行,所以不会马上切换到F的判断部分去
    • 发布于2020-08-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于单片机外部中断返回问题