完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这是一个PWM输出占空比一直变化的方波,控制一个发光二极管实现呼吸灯的效果。
我的问题是:为啥定时器判定if(highv>100)不能改成if(highv==100),改后就没有呼吸灯的效果了,原因是什么?
|
|
相关推荐
18个回答
|
|
fashaoyou01 发表于 2016-10-27 17:46 这个我知道,我遇到过,最后解决了,原因就是因为定时器是在不停地工作计时的,也就是highv在一直加加,但当加到100时并不能立刻被主程序检测到,所以造成了已经加到了100多了,而你的程序才开始检测highv,此时highv已经大于100,所以if语句就不执行了,就是这原因,望采纳。
最佳答案
|
|
|
|
自己顶下!有没有大神支持下!
|
|
|
|
有没有地方执行时间过长,导致 进中断继续++超过100了,但是主程序里还没有执行到那个if语句。导致以后没法清零了
|
|
|
|
说的有点道理,但是,不是应该单片机定时时间大于语句执行时间或者延时时间就行了吗?我定时100us,一个语句执行需要1us,应该符合要求的! |
|
|
|
占空比要维持一定的时间再改变,不然不太明显有呼吸效果
|
|
|
|
你好,这个程序是可以实现呼吸灯的但是不明白为啥定时器判定if(highv>100)不能改成if(highv==100),改后就没有呼吸灯的效果了,原因是什么? |
|
|
|
可以试下是不是没有赋初值的原因
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一般进入定时器中断,我会关掉定时器,重设值之后再打开计时器。
|
|
|
|
刚算了下,你的while循环比定时器溢出中断快多了,会导致已经跑过规定值了还没有判断到 |
|
|
|
这个是定时1us,定时时间比较短! |
|
|
|
你的意思是不是说我定时1us进入一次中断时间太短,我应该定时几百US或者更长时间进入中断,是不是这样的意思? |
|
|
|
|
|
|
|
|
|
|
|
你可以写highv>=100,你就写==100,会造成++超了,根本就没法再玩下去了
|
|
|
|
你这个是定时1us进入一次中断,而判断命令的执行时间是大于1us(一个时钟周期)的,这就导致判断的时候不一定能够刚好是等于100.把定时时间延长一点试试,50us为(65535-50+1)
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1330 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1263 浏览 3 评论
2430 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1416 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1847 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 20:13 , Processed in 0.834953 second(s), Total 76, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号