找回密码
 立即注册
查看: 523|回复: 13

请教一个中断问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:319
  • 最近打卡:2025-05-01 20:29:25

10

主题

24

回帖

1142

积分

金牌会员

积分
1142
发表于 2024-8-28 12:03:39 | 显示全部楼层 |阅读模式
本帖最后由 摇滚一族 于 2024-8-28 14:47 编辑

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

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

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

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

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



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-28 12:16:28 | 显示全部楼层
不要死等,可以10ms检测一次,持续500次都是按下的状态再执行,中间去干别的
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:319
  • 最近打卡:2025-05-01 20:29:25

10

主题

24

回帖

1142

积分

金牌会员

积分
1142
发表于 2024-8-28 14:52:00 | 显示全部楼层
Debu*** 发表于 2024-8-28 12:16
不要死等,可以10ms检测一次,持续500次都是按下的状态再执行,中间去干别的 ...

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

点评

用if判断一个标志位,状态为1才执行,状态为0不执行  详情 回复 发表于 2024-8-28 14:54
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-28 14:54:10 | 显示全部楼层
摇滚*** 发表于 2024-8-28 14:52
中断是立即执行的,我的意思是中断结束后如何跳转?首页问题内容我重新编辑了一下 ...

用if判断一个标志位,状态为1才执行,状态为0不执行
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:319
  • 最近打卡:2025-05-01 20:29:25

10

主题

24

回帖

1142

积分

金牌会员

积分
1142
发表于 2024-8-28 14:58:14 | 显示全部楼层
Debu*** 发表于 2024-8-28 14:54
用if判断一个标志位,状态为1才执行,状态为0不执行

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

点评

用定时器,不能死等  详情 回复 发表于 2024-8-28 15:48
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-28 15:48:47 | 显示全部楼层
摇滚*** 发表于 2024-8-28 14:58
延时5秒已经在执行进程中,IF不起作用了

用定时器,不能死等
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-8-28 17:02:20 | 显示全部楼层
  1. while(1)
  2. {
  3.         switch(step)
  4.         {
  5.                 case 0:命令1;step=1;break;
  6.                 case 1:命令2;step=2;break;
  7.                 case 5001:命令3;step=5002;break;
  8.                 case 5002:命令4;step=0;break;
  9.                 default:step++;break;
  10.         }
  11.         延时1毫秒
  12. }
复制代码

按键中断里step=5001;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:319
  • 最近打卡:2025-05-01 20:29:25

10

主题

24

回帖

1142

积分

金牌会员

积分
1142
发表于 2024-8-28 17:58:48 | 显示全部楼层
Lkck*** 发表于 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秒命令?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-05-01 08:13:06
已绑定手机

27

主题

341

回帖

1687

积分

金牌会员

机长

积分
1687
发表于 2024-8-28 19:19:04 | 显示全部楼层
摇滚*** 发表于 2024-8-28 17:58
while(1)
{
        switch(step)

把延时5秒改成1毫秒检查一下状态,可不能真的在那傻傻等足5秒……
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:77
  • 最近打卡:2025-02-19 19:46:19

7

主题

74

回帖

155

积分

注册会员

积分
155
发表于 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;
}

这是一个思路,供参考。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:41 , Processed in 0.159327 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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