打印

单片机c语言,关于if 语句的一些问题。

[复制链接]
11936|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
angler001|  楼主 | 2011-10-31 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char pwm_base = 0;
while(1)
{
      pwm_base++;

      if(pwm_base<51)   //当基值小于阈值时,pwm输出高电平,
      {  
           pwm_out0=1;
       }  
       if(pwm_base>=51)
      {
           pwm_out0=0;        //否则,当基值大于或等于阈值时,输出pwm的低电平
       }
}

这段程序,每次循环到if 语句时就会加1, 也就是说每个循环pwm_base  加2,这是为什么呢,是if括号里比较语句的问题吗?

相关帖子

沙发
jianghuoo00| | 2011-10-31 17:06 | 只看该作者
1# angler001
你把第二个if改为else试一下

使用特权

评论回复
板凳
w522930954| | 2011-10-31 17:15 | 只看该作者
确定这是你的全程序吗?如果是的话你是怎么确定它每个循环加2了呢?如果不是的话 是不是有其他地方加过呢。

使用特权

评论回复
地板
w522930954| | 2011-10-31 17:15 | 只看该作者
确定这是你的全程序吗?如果是的话你是怎么确定它每个循环加2了呢?如果不是的话 是不是有其他地方加过呢。

使用特权

评论回复
5
angler001|  楼主 | 2011-10-31 17:48 | 只看该作者
恩,这是写在主函数里的,keil中设置断点,每次到if   pwm_base就加1,

使用特权

评论回复
6
huang1shan| | 2011-10-31 17:51 | 只看该作者
pwm_base++;

使用特权

评论回复
7
angler001|  楼主 | 2011-10-31 17:55 | 只看该作者
估计是别的地方有干扰,而且在第二个if出来后又变回原来的数值了,0x32  (50)

使用特权

评论回复
8
schwarzenggar| | 2011-10-31 17:57 | 只看该作者
你这IF语句不专业啊,有else不用还非得用两个IF》》》》》

使用特权

评论回复
9
angler001|  楼主 | 2011-10-31 18:06 | 只看该作者
else也是一样的,都是在判断的时候,自动加1,而且在大于51后,pwm_base就又会跳到50

使用特权

评论回复
10
liang7143| | 2011-10-31 18:31 | 只看该作者
从这个 片段
看不出有 +2 的道理

使用特权

评论回复
11
angler001|  楼主 | 2011-10-31 18:33 | 只看该作者
恩,可能是别的组干扰的,把全部程序弄到一个文件里了,现在不加2了

使用特权

评论回复
12
angler001|  楼主 | 2011-10-31 18:38 | 只看该作者
另外看下这个

bit a = 0;
if(a==0)
{  
   a = 1;
    ...
}

if(a==1)
{
   a = 0;
  ...
}

这段不行,实际上不能进入第二段


而改成

bit a = 0;
if(a==0)
{  
   a = 1;
    ...
}

if(a!=0)         //改了一下这
{
   a = 0;
  ...
}

这样就可以了,这是为什么呢?

使用特权

评论回复
13
反质子| | 2011-10-31 21:46 | 只看该作者
火星问题

使用特权

评论回复
14
ayb_ice| | 2011-11-1 08:02 | 只看该作者
本帖最后由 ayb_ice 于 2011-11-1 08:34 编辑

程序本身没有问题,只要其它地方(中断)中不对pwm_base变量进行改写
可能只是调试的问题,只是假象
修改成下面这样再测试
unsigned char pwm_base = 0;
extern void _nop_(void);

while(1)
{
      pwm_base++;

      if(pwm_base<51)   //当基值小于阈值时,pwm输出高电平,
      {  
           pwm_out0=1;
       }  
       if(pwm_base>=51)
      {
           pwm_out0=0;        //否则,当基值大于或等于阈值时,输出pwm的低电平
       }

     _nop_();     // 此处设断点测试
}

使用特权

评论回复
15
opyy125689| | 2011-11-1 08:32 | 只看该作者
学习学习

使用特权

评论回复
16
jianweixu| | 2011-11-1 14:32 | 只看该作者
拜读

使用特权

评论回复
17
lyz6118| | 2011-11-1 15:47 | 只看该作者
“if(a!=0)         //改了一下这”
因为这里A!=1;也!=0;跟踪下a的值看下哈

使用特权

评论回复
18
wangwang3008| | 2011-11-1 16:23 | 只看该作者
没看出问题 不过 BIT 那段是不变成死循环了 没意义~~

使用特权

评论回复
19
token| | 2011-11-3 21:05 | 只看该作者
不会。。。。。。。

使用特权

评论回复
20
zenweidong| | 2011-11-3 23:02 | 只看该作者
学习

使用特权

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

本版积分规则

0

主题

34

帖子

1

粉丝