打印
[51单片机]

一个C语言小问题,但是不知道原因,求高手。

[复制链接]
1741|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
52414133|  楼主 | 2014-2-19 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                 while(c==0)
                {
                        if(warm_time>42)
                        {
                                Self_test();        //自检       
                        }
                        if(warm_time<=42)
                        {
                                warm();                //产品预热               
                        }
                        if(warm_time<=0)
                        {
                                c=1;                                //跳出循环
                        }
                       
               
                        for(channel=0;channel<3;channel++)
                        {
                               
                                cd4051();                        //多路复用器选择               
                                delay(1550);         //延时150MS
                                IRcvStrExt();                //读取AD值
                               
                                ad();       
                               
                                if(press<=28800)             //报警
                                {
                                         pump=1;  //关闭
                                }
                               
                        }
                }


我改为
        while(c==0)
                {
                        if(warm_time>42)
                        {
                                Self_test();                //自检
                        }
                        if(warm_time<=42)
                        {
                                warm();                                //预热
                        }
                        if(warm_time<=0)
                        {
                                c=1;                                //跳出循环
                        }
                       
                        channel=0;       
                        cd4051();                        //多路复用器选择               
                        delay(1550);
                        IRcvStrExt();                                        //读取AD值
                       
                        ad();                                                //处理ad值转换为浓度等               
                       
                       
                        channel++;
                        if(channel>=3)       
                        {
                                channel=0;
                        }  

                        if(press<=28800) //报警
                                {
                                         pump=1;//关闭
                                }
                      }

改完之后报警功能不执行了就是 if(press<=28800) 这个语句的功能没有了。为什么呢?,其他的都没变

相关帖子

沙发
嵌入式云终端| | 2014-2-19 18:45 | 只看该作者
press<=28800,你的press定义的是什么数值,是不是char,那样会永远运行的,这样的问题用仿真试一下就知道了,学会调试程序

使用特权

评论回复
板凳
王栋春| | 2014-2-19 21:12 | 只看该作者
楼上的为正解

使用特权

评论回复
地板
香水橙| | 2014-2-19 21:27 | 只看该作者
要看变量press与变量channel之间的关系,在while循环中,改过之后channel始终为0,不会有1、2、3的数值。

另外,如果你没有改其他地方,而修改之前程序可以按预想运行,则2楼的说法不成立。

使用特权

评论回复
5
52414133|  楼主 | 2014-2-21 08:35 | 只看该作者
香水橙 发表于 2014-2-19 21:27
要看变量press与变量channel之间的关系,在while循环中,改过之后channel始终为0,不会有1、2、3的数值。

...

为什么只能等于0啊,不是有++吗?
我设置的是uint press

使用特权

评论回复
6
52414133|  楼主 | 2014-2-21 08:35 | 只看该作者
嵌入式云终端 发表于 2014-2-19 18:45
press

恩~!不是uchar,是uint

使用特权

评论回复
7
香水橙| | 2014-2-21 10:23 | 只看该作者
52414133 发表于 2014-2-21 08:35
为什么只能等于0啊,不是有++吗?
我设置的是uint press

channel=0与channel++是平行的前后关系,在下次while循环中,channel又变成0了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
52414133 + 1 很给力!
8
shiningtome| | 2014-5-12 14:00 | 只看该作者


单双面板 5*5CM以内的,pcb打样50元/款,在线支付48元/款。
以上报价要求工艺为:FR-4,板厚0.6-1.6mm,绿油白字,有铅喷锡工艺,数量为10片内,材料均采用建滔KB顶级板材,样板免费全测!免颜色费!网银和支付宝在线支付享受9.5折扣
板材多样化:单面纸板(94V0)样板,半玻纤cem-1,铝基板等 小批量快速生产品质保证。
PCB小批量快速生产在线支付享受9折扣优惠。
深圳顺易捷科技有限公司销售联系人:韩先生
手机13480101190 /13510965133  
QQ800055586
电话:0755-84086168,传真0755-84069526
E-mail :syjpcb@163.com

使用特权

评论回复
9
moxue10| | 2014-5-13 10:40 | 只看该作者
                        if(warm_time<=0)
                        {
                                c=1;                                //跳出循环
                        }

使用特权

评论回复
10
moxue10| | 2014-5-13 10:42 | 只看该作者
有没有可能是c==1  for 循环没有运行完 就跳出大循环了

使用特权

评论回复
11
fly60000| | 2014-5-13 12:42 | 只看该作者
channel只能执行channel=0的操作,channel++失去作用了。

使用特权

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

本版积分规则

5

主题

266

帖子

0

粉丝