找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3870|回复: 8
打印 上一主题 下一主题
收起左侧

小白在单片机中断程序中关于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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:773058 发表于 2020-6-14 16:20 | 只看该作者
建议你去找本书看看,可能是此处的量增多,在其它地方也应该跟着进行变动
回复

使用道具 举报

板凳
ID:491577 发表于 2020-6-14 18:32 | 只看该作者
正常情况下if()语句的判断要使用>或<,不要用==,用==有风险,比如if(time==60),如果有高等级中断的话有可能错过,改成if(time>=60)比较好。
回复

使用道具 举报

地板
ID:123289 发表于 2020-6-16 16:20 | 只看该作者
思路正确。
注意一下:每次的起点、终点如何界定。
回复

使用道具 举报

5#
ID:548551 发表于 2020-6-16 22:31 | 只看该作者
这三个if可以同时运行, 也可以说只运行第一个.为什么这杨说呢?你这个time++,适用于下面三个,也就是说等于60 ,120,180的时候就会清零对吧. 但是.重点来了.这个time+到60之后就被你清零了,也就是说后面的120 ,180.永远到不了.明白了不? 所以这个time永远在60的时候就没有了,就从新开始计数了.我不知道你这个计时3s 6s 9s是怎么样才算是计满了.所以不知道你的思路. 只能说帮你解决你这个计数的问题

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:636538 发表于 2020-6-17 09:53 | 只看该作者
66行下count没有清零,当你在开始下一个的时候总是在累加,导致运行过程中count,而且需要添加一个time=0;这相当与三个周期结束下一个三次采样,time从0开始计数,cout也从零计数,认为楼上说的不对,没有见过你把time到结束清零
回复

使用道具 举报

7#
ID:781819 发表于 2020-6-17 11:17 | 只看该作者
C语言书上有讲解用法和举例
回复

使用道具 举报

8#
ID:282850 发表于 2020-6-17 14:30 | 只看该作者
hhh402 发表于 2020-6-14 18:32
正常情况下if()语句的判断要使用>或=60)比较好。

同感,有些人不注重这些细节,bug在哪里自己找不出来。
回复

使用道具 举报

9#
ID:782419 发表于 2020-6-17 21:04 | 只看该作者
如果三个相等的判断的话,可以用switch……case……,或者if……else if……else,试下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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