微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 菜鸟求助:如何让正在运行的单片机程序暂停

菜鸟求助:如何让正在运行的单片机程序暂停

时间:10-02 整理:3721RD 点击:
  如何让正在运行单片机程序暂停:就比如一个流水灯程序,主函数是几个动画效果flash。程序段如下:
   void main()
{ init()   // 各种初始化
   while(1)
  {    flash_1();          
         flash_2();
         flash_3();
}
}
中断函数:void time() interrupt 1{.....}//往IO口送数据。
     但是现在我想加一个按键实现暂停效果:按键按下一次程序暂停保留当前效果(就是保留着哪盏灯亮哪盏灯不亮),单按键第二次按下从当前效果继续往下运行。下面是我修改后的代码,功能却无法实现,请各位大神指点一二
  uchar keyscan() {  
        if(key==0)
        { delay(50);
                if(key==0)
                {
                        keym++;
                        TR0=0;
                       
                        if(keym=1) button=0;
                        if(keym=2) button=1;
                        if(keym>2) keym=1;
                        while(!key);
                }
        }
                        else button=1;
                        return(button);
}
void main()
{ init()   // 各种初始化
   keyscan();
   while(button)
  {    flash_1();          
         flash_2();
         flash_3();
  }
}
   中断函数未改动!暂停功能无法实现。
   此思路是否正确?如果再用一个中断来处理那么又是怎样解决呢?请大神指点一二!


完整程序贴出来看看啊,不知道你中断怎么调用的

中断嘛,就是停下当前做的事去做另一件事,当做完后接着之前的事继续运行,你就中断是把IO口的收据输出即可,这样不是暂停了吗?程序你在想想!

这是我在做光立方的的时候碰到的问题!中断完整函数如下
void time() interrupt 1
{
         uchar i;
         static uchar layer=0;
         P1=0;
         for (i=0;i<8;i++)
         {
                   P2=1<<i;
                   delay(3);
                   P0=display[layer];
                   delay(3);
         }
         P1=1<<layer;
         if (layer<7)
                   layer++;
         else
                   layer=0;
         TH0=0xc0;
         TL0=0;
}

想要暂停,一定要有个外部触发,这个触发是什么 就由你自己决定,这时候通常是进入中断处理服务函数,处理你要做的事情 比如让flash停下来

如此说来我上面的思路就是错误的了?必须得在开一个外部中断,但是在中断里面有如何让flash停下来呢

学习了,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top