打印

怎样跳出while()循环下的switch,但又不中止程序?

[复制链接]
4056|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1750676165|  楼主 | 2012-8-7 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从串口发送两个指令,让蜂鸣器以不同频率交替发声一定时间。下面是while循环:
while(1)                          //等待中断
{
   switch (RxValue)        //RxValue为接收数据缓存
    {
     case 0x01:
                    PTCON &=~(1<<15);   
                    PTPER=17279;         
                    PDC1= 8639;            ////频率改为100HZ,占空比改为50%
                    PTCON |=1<<15;
                    delay_ms(5000);       //延时5000
  
                   PTCON &=~(1<<15);   
                   PTPER=3455;               
                   PDC1= 863;                //频率改为100HZ,占空比改为50%
                   PTCON |=1<<15;
                   delay_ms(5000);         //延时5000
                  break;
     case 0x02:
                    PTCON &=~(1<<15);   
                    PTPER=17279;         
                    PDC1= 8639;            //频率改为100HZ,占空比改为50%
                    PTCON |=1<<15;
                    delay_ms(10000);       //延时10000
  
                   PTCON &=~(1<<15);     
                   PTPER=3455;               
                   PDC1= 863;                ////频率改为100HZ,占空比改为50%
                   PTCON |=1<<15;
                   delay_ms(15000);         //延时15000
                  break;
     }
}  
发送case 01的指令后,break停止不了蜂鸣器 一直在响,没法发送case 02的指令,用return就把程序全关了也不行。求助!
沙发
ayb_ice| | 2012-8-7 16:39 | 只看该作者
goto

使用特权

评论回复
板凳
兰天白云| | 2012-8-9 17:16 | 只看该作者
问题没看懂

使用特权

评论回复
地板
李冬发| | 2012-8-10 02:05 | 只看该作者
RxValue不变怎么到0x02?!

使用特权

评论回复
5
yewuyi| | 2012-8-10 10:38 | 只看该作者
不知所问。。。

使用特权

评论回复
6
joyme| | 2012-8-10 10:40 | 只看该作者
RxValue在中断里改变就可以实现
主要是因为你写程序的风格不好,程序里有这么长的delay函数,你的程序只做蜂鸣器控制?别的什么都用中断?

使用特权

评论回复
7
李冬发| | 2012-8-10 15:31 | 只看该作者
RxValue在中断里改变就可以实现
--------------------
不对的,RxValue在这里是作为信号量使用的,用过后就必须失效,可是你看,失效了吗?没有啊。
洗过脚的水是脏水了。

使用特权

评论回复
8
optical85| | 2012-8-24 10:08 | 只看该作者
C语言里的break不是dos里面的break暂停的意思,而是跳出switch语句。你现在已经是跳出switch语句,不终止程序了。问题很有可能是你的串口接收中断里面没有把RxValue值改变。硬件仿真一下,把断点设在串口接收中断里面,看RxValue值是否改变。

使用特权

评论回复
9
airwill| | 2012-8-27 21:54 | 只看该作者
有几个办法.
1.  在 break 前设定个标志, 在while(1) 变成 while(标志), 有条件的循环, 退出循环已重新加载 RxValue.
2.   RxValue在中断里改变, 设定 RxValue 为 volitale 类型.
3.  用 goto.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

0

粉丝