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

[复制链接]
 楼主| 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了呢?如果不是的话 是不是有其他地方加过呢。
 楼主| angler001 发表于 2011-10-31 17:48 | 显示全部楼层
恩,这是写在主函数里的,keil中设置断点,每次到if   pwm_base就加1,
huang1shan 发表于 2011-10-31 17:51 | 显示全部楼层
pwm_base++;
 楼主| angler001 发表于 2011-10-31 17:55 | 显示全部楼层
估计是别的地方有干扰,而且在第二个if出来后又变回原来的数值了,0x32  (50)
schwarzenggar 发表于 2011-10-31 17:57 | 显示全部楼层
你这IF语句不专业啊,有else不用还非得用两个IF》》》》》
 楼主| angler001 发表于 2011-10-31 18:06 | 显示全部楼层
else也是一样的,都是在判断的时候,自动加1,而且在大于51后,pwm_base就又会跳到50
liang7143 发表于 2011-10-31 18:31 | 显示全部楼层
从这个 片段
看不出有 +2 的道理
 楼主| angler001 发表于 2011-10-31 18:33 | 显示全部楼层
恩,可能是别的组干扰的,把全部程序弄到一个文件里了,现在不加2了
 楼主| 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;
  ...
}

这样就可以了,这是为什么呢?
反质子 发表于 2011-10-31 21:46 | 显示全部楼层
火星问题
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_();     // 此处设断点测试
}
opyy125689 发表于 2011-11-1 08:32 | 显示全部楼层
学习学习
jianweixu 发表于 2011-11-1 14:32 | 显示全部楼层
拜读
lyz6118 发表于 2011-11-1 15:47 | 显示全部楼层
“if(a!=0)         //改了一下这”
因为这里A!=1;也!=0;跟踪下a的值看下哈
wangwang3008 发表于 2011-11-1 16:23 | 显示全部楼层
没看出问题 不过 BIT 那段是不变成死循环了 没意义~~
token 发表于 2011-11-3 21:05 | 显示全部楼层
不会。。。。。。。
zenweidong 发表于 2011-11-3 23:02 | 显示全部楼层
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

34

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部