智能车制作

标题: 定时器中计数器计数问题 [打印本页]

作者: 时代还怪    时间: 2010-4-7 22:07
标题: 定时器中计数器计数问题
main里面
for(;;)
{
   PORTB=0X00;
   if(count==300)
      {
         count=0;
         PORTB=0xfa;
         while(count<400);count=0;

       }
}
其中count为定时器0的中断函数中的计数变量每中断一次自加1,PB口已定义为输出
但是程序执行到while(count<400);count=0;这步就一直在中断里运行,PORTB口接出的小灯在显示0x00值之后只有显示的一直显示0xfa的值,请问为什么会这样?
while(count<400);count=0;这条语句不是当count大于400后退出吗?但是在if语句里面就不行了?
我知道是   if(count==300)这句语句中的count==300的原因,但是想不明白,各位大虾帮小弟解解惑吧!谢谢了!
作者: justing88    时间: 2010-4-15 22:26
你if 语句进入之后,count变为0,之后while()语句一直是成立的,成立了之后,一直在做分号,就做不下去了
作者: 时代还怪    时间: 2010-4-16 11:21
你if 语句进入之后,count变为0,之后while()语句一直是成立的,成立了之后,一直在做分号,就做不下去了
justing88 发表于 2010-4-15 22:26



    但是不是在中断里count一直在计数加1,当加到400后不是就退出while()了吗?但是就退不出去,想不明白这里!
作者: justing88    时间: 2010-4-16 14:12
回复 3# 时代还怪


    你永远也无法加到400的,因为当你加到300的时候,你就进入IF语句,然后执行count=0;把count变为0了,之后在中断里加,加到300后又重复相同的动作,所以while语句一直是成立的,因此就一直在做分号
作者: huachou    时间: 2010-4-18 19:35
楼上的说的对
作者: 锦芫    时间: 2010-4-19 19:58
学习
作者: 时代还怪    时间: 2010-4-21 21:24
谢谢,只是不明白,程序不是一条一条执行的吗?在执行while语句时不是在等待count计数吗?怎么会跳到执行if语句呢?就是不明白这里!
作者: 时代还怪    时间: 2010-4-21 21:25
回复  时代还怪


    你永远也无法加到400的,因为当你加到300的时候,你就进入IF语句,然后执行count ...
justing88 发表于 2010-4-16 14:12



    谢谢,只是不明白,程序不是一条一条执行的吗?在执行while语句时不是在等待count计数吗?怎么会跳到执行if语句呢?就是不明白这里!
作者: justing88    时间: 2010-4-21 22:39
回复 8# 时代还怪


    while语句是在if语句里面,请问:你是如何进入到while里面的??是不是要先满足if 语句
作者: 时代还怪    时间: 2010-4-24 21:50
回复  时代还怪


    while语句是在if语句里面,请问:你是如何进入到while里面的??是不是要先满足i ...
justing88 发表于 2010-4-21 22:39



    但是不是在进入了while语句里面之前就不是已经判断了if的条件吗?此时就应该判断while里的条件吧!怎么还会返回判断if呢?难道是count作为计数器递增的时候先判断根据程序里面的先后语句判断后执行的而不是停在while语句里面只判断while里面的语句??
作者: I08690127    时间: 2011-2-15 20:55
while(count<400);count=0;

分成两句写 不要写一行




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2