标题: 小白在单片机中断程序中关于if使用的问题 [打印本页]

作者: Axes    时间: 2020-6-14 11:55
标题: 小白在单片机中断程序中关于if使用的问题
整个程序是对外部脉冲进行一个计数
图1是一开始写的代码,是可以直接运行,对外部脉冲的计数也是正常的,由于所测信号是非周期信号,为了减小误差我决定测3次取均值,就写了图2的代码,可以编译通过,但仿真的时候计数就明显不正常了。还望个位大佬能帮助小白,怎么改才行。

批注 2020-06-14 114915.jpg (226.52 KB, 下载次数: 51)

图2

图2

批注 2020-06-14 114907.jpg (120.23 KB, 下载次数: 49)

图1

图1

作者: 码不止    时间: 2020-6-14 16:20
建议你去找本书看看,可能是此处的量增多,在其它地方也应该跟着进行变动
作者: hhh402    时间: 2020-6-14 18:32
正常情况下if()语句的判断要使用>或<,不要用==,用==有风险,比如if(time==60),如果有高等级中断的话有可能错过,改成if(time>=60)比较好。
作者: yzwzfyz    时间: 2020-6-16 16:20
思路正确。
注意一下:每次的起点、终点如何界定。
作者: xqleft    时间: 2020-6-16 22:31
这三个if可以同时运行, 也可以说只运行第一个.为什么这杨说呢?你这个time++,适用于下面三个,也就是说等于60 ,120,180的时候就会清零对吧. 但是.重点来了.这个time+到60之后就被你清零了,也就是说后面的120 ,180.永远到不了.明白了不? 所以这个time永远在60的时候就没有了,就从新开始计数了.我不知道你这个计时3s 6s 9s是怎么样才算是计满了.所以不知道你的思路. 只能说帮你解决你这个计数的问题
作者: SKYLAR123    时间: 2020-6-17 09:53
66行下count没有清零,当你在开始下一个的时候总是在累加,导致运行过程中count,而且需要添加一个time=0;这相当与三个周期结束下一个三次采样,time从0开始计数,cout也从零计数,认为楼上说的不对,没有见过你把time到结束清零
作者: 橘温旧茶    时间: 2020-6-17 11:17
C语言书上有讲解用法和举例
作者: f556    时间: 2020-6-17 14:30
hhh402 发表于 2020-6-14 18:32
正常情况下if()语句的判断要使用>或=60)比较好。

同感,有些人不注重这些细节,bug在哪里自己找不出来。
作者: wufeng391    时间: 2020-6-17 21:04
如果三个相等的判断的话,可以用switch……case……,或者if……else if……else,试下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1