智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4318|回复: 10
打印 上一主题 下一主题

定时器中计数器计数问题

[复制链接]

6

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
963
威望
435
贡献
438
兑换币
0
注册时间
2010-1-11
在线时间
45 小时
跳转到指定楼层
1#
发表于 2010-4-7 22:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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的原因,但是想不明白,各位大虾帮小弟解解惑吧!谢谢了!

19

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
919
QQ
威望
487
贡献
284
兑换币
0
注册时间
2009-11-4
在线时间
74 小时
2#
发表于 2010-4-15 22:26:16 | 只看该作者
你if 语句进入之后,count变为0,之后while()语句一直是成立的,成立了之后,一直在做分号,就做不下去了
回复 支持 反对

使用道具 举报

6

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
963
威望
435
贡献
438
兑换币
0
注册时间
2010-1-11
在线时间
45 小时
3#
 楼主| 发表于 2010-4-16 11:21:42 | 只看该作者
你if 语句进入之后,count变为0,之后while()语句一直是成立的,成立了之后,一直在做分号,就做不下去了
justing88 发表于 2010-4-15 22:26



    但是不是在中断里count一直在计数加1,当加到400后不是就退出while()了吗?但是就退不出去,想不明白这里!
回复 支持 反对

使用道具 举报

19

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
919
QQ
威望
487
贡献
284
兑换币
0
注册时间
2009-11-4
在线时间
74 小时
4#
发表于 2010-4-16 14:12:07 | 只看该作者
回复 3# 时代还怪


    你永远也无法加到400的,因为当你加到300的时候,你就进入IF语句,然后执行count=0;把count变为0了,之后在中断里加,加到300后又重复相同的动作,所以while语句一直是成立的,因此就一直在做分号

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

0

主题

302

帖子

0

精华

高级会员

Rank: 4

积分
591
威望
475
贡献
62
兑换币
0
注册时间
2010-3-19
在线时间
27 小时
5#
发表于 2010-4-18 19:35:25 | 只看该作者
楼上的说的对
回复 支持 反对

使用道具 举报

4

主题

207

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
QQ
威望
1255
贡献
688
兑换币
0
注册时间
2009-11-12
在线时间
25 小时
6#
发表于 2010-4-19 19:58:28 | 只看该作者
学习
回复 支持 反对

使用道具 举报

6

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
963
威望
435
贡献
438
兑换币
0
注册时间
2010-1-11
在线时间
45 小时
7#
 楼主| 发表于 2010-4-21 21:24:51 | 只看该作者
谢谢,只是不明白,程序不是一条一条执行的吗?在执行while语句时不是在等待count计数吗?怎么会跳到执行if语句呢?就是不明白这里!
回复 支持 反对

使用道具 举报

6

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
963
威望
435
贡献
438
兑换币
0
注册时间
2010-1-11
在线时间
45 小时
8#
 楼主| 发表于 2010-4-21 21:25:35 | 只看该作者
回复  时代还怪


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



    谢谢,只是不明白,程序不是一条一条执行的吗?在执行while语句时不是在等待count计数吗?怎么会跳到执行if语句呢?就是不明白这里!
回复 支持 反对

使用道具 举报

19

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
919
QQ
威望
487
贡献
284
兑换币
0
注册时间
2009-11-4
在线时间
74 小时
9#
发表于 2010-4-21 22:39:54 | 只看该作者
回复 8# 时代还怪


    while语句是在if语句里面,请问:你是如何进入到while里面的??是不是要先满足if 语句
回复 支持 反对

使用道具 举报

6

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
963
威望
435
贡献
438
兑换币
0
注册时间
2010-1-11
在线时间
45 小时
10#
 楼主| 发表于 2010-4-24 21:50:42 | 只看该作者
回复  时代还怪


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



    但是不是在进入了while语句里面之前就不是已经判断了if的条件吗?此时就应该判断while里的条件吧!怎么还会返回判断if呢?难道是count作为计数器递增的时候先判断根据程序里面的先后语句判断后执行的而不是停在while语句里面只判断while里面的语句??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-22 07:17 , Processed in 0.101508 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表