摇滚一族 发表于 2024-8-28 12:03:39

请教一个中断问题

本帖最后由 摇滚一族 于 2024-8-28 14:47 编辑

请教各位一个中断的问题。

比如程序延时五秒的过程中,按键触发中断,让退出程序,返回到指定位置重新开始程序,这个怎么写?

现在按键触发中断后,要继续执行完五秒的延时程序后,才执行后面的命令。

while(1)
{
命令1
命令2
延时5秒
命令3
命令4
}

例如在延时5秒中,按键中断了,想达到按键后就返回命令1执行如何操作?
现在是中断结束后,继续执行延时5秒、命令3 命令4



DebugLab 发表于 2024-8-28 12:16:28

不要死等,可以10ms检测一次,持续500次都是按下的状态再执行,中间去干别的

摇滚一族 发表于 2024-8-28 14:52:00

DebugLab 发表于 2024-8-28 12:16
不要死等,可以10ms检测一次,持续500次都是按下的状态再执行,中间去干别的 ...

中断是立即执行的,我的意思是中断结束后如何跳转?首页问题内容我重新编辑了一下

DebugLab 发表于 2024-8-28 14:54:10

摇滚一族 发表于 2024-8-28 14:52
中断是立即执行的,我的意思是中断结束后如何跳转?首页问题内容我重新编辑了一下 ...

用if判断一个标志位,状态为1才执行,状态为0不执行

摇滚一族 发表于 2024-8-28 14:58:14

DebugLab 发表于 2024-8-28 14:54
用if判断一个标志位,状态为1才执行,状态为0不执行

延时5秒已经在执行进程中,IF不起作用了

DebugLab 发表于 2024-8-28 15:48:47

摇滚一族 发表于 2024-8-28 14:58
延时5秒已经在执行进程中,IF不起作用了

用定时器,不能死等

Lkck8210 发表于 2024-8-28 17:02:20

while(1)
{
        switch(step)
        {
                case 0:命令1;step=1;break;
                case 1:命令2;step=2;break;
                case 5001:命令3;step=5002;break;
                case 5002:命令4;step=0;break;
                default:step++;break;
        }
        延时1毫秒
}
按键中断里step=5001;

摇滚一族 发表于 2024-8-28 17:58:48

Lkck8210 发表于 2024-8-28 17:02
按键中断里step=5001;

while(1)
{
      switch(step)
      {
                case 0:命令1;step=1;break;
                case 1:命令2;step=2;延时5秒;break;
                case 5001:命令3;step=5002;break;
                case 5002:命令4;step=0;break;
                default:step++;break;
      }
      延时1毫秒
}

我的意思是比如上面,在step2里,已经在执行延时5秒的过程中,按键中断
中断执行step=5001后;也会继续执行延时5秒,然后才继续。

如何打断正在执行的延时5秒命令?

hsrzq 发表于 2024-8-28 19:19:04

摇滚一族 发表于 2024-8-28 17:58
while(1)
{
      switch(step)


把延时5秒改成1毫秒检查一下状态,可不能真的在那傻傻等足5秒……

taihang 发表于 2024-8-29 08:45:58

本帖最后由 taihang 于 2024-8-29 09:18 编辑

while(1)
{
    u8 xx=1;

   if(xx==1)
    {
      命令1
      xx++;
   }


   if(xx==2)
    {
      命令2
      xx++;
   }

   if(xx==3)
    {
      while(1)
       {
         延时5秒
          exit;
         xx++;
       }
    }

   if(xx==4)
    {
      命令3
      xx++;
   }   

   if(xx==5)
    {
      命令4
      xx=1;
   }
}




void intx() interrupt x
{
      exit;
      xx=1;
}

这是一个思路,供参考。
页: [1] 2
查看完整版本: 请教一个中断问题