完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近呢,在做一块小板子,用到了一个rtc模块,为了不使整个程序阻塞起来我使用了一路基本定时器200ms定时读取rtc的值,原本没有什么问题,但是rtc内部带有一个温度传感器,我想顺便也读了吧,考虑到温度不需要实时更新,所以我在定时器中断里设了两个标志变量(定时器10ms中断一次)变量A是读取rtc的标志变量,变量B为温度读取的标志变量,两个变量都在中断函数中自加,并在while(1)中不停的查询两个变量的值,当A为20时,首先清除A的值为0并读取rtc的数据显示到液晶,当B为500时读取温度传感器的值并更新显示到液晶,现在出现的问题是,温度传感器的值正常更新,可是rtc的显示不走时,大体程序如下
while(1) { if A == 20 //更新rtc显示到液晶,且A清0 ifB == 50 //更新温度显示到液晶,且B清0 } A,B兼在中断函数中自加,求解现在为什么只B==50这部分代码会被执行,A==20的代码不执行,调试发现A的值一直自加直到溢出,求解各位大大们,这是怎么回事 手机码字,不便之处请大家多多见谅 |
|
相关推荐
10个回答
|
|
把关于A的函数贴出来看看。。
|
|
|
|
|
|
|
|
那你的意思就是A的值乱了,,
|
|
|
|
本帖最后由 wyy0313 于 2014-12-12 09:48 编辑
应该把判断定时“if A == 20”和“ifB == 50”放在中断里面,判断成立然后设置标志,主程序里判断标志然后执行,判断定时不放在中断就改为“if A >= 20”和“ifB >= 50” |
|
|
|
songxiansheng 发表于 2019-3-11 13:28 对头,对头,您这个方法确实人效,原因是为何呢 |
|
|
|
在主程序里执行更新温度显示到液晶时,定时器还在运行,等你运行完温度显示到液晶,再去判断A时,A已经大于20了。
|
|
|
|
调试时能看到A值会一直加,直到溢出,也就是说,if A==20这话不起作用了
|
|
|
|
你在定时器中断中进行ADC转换不合理,会出现ADC未结束,定时器又进入下一次中断。其实你只要在主程序中判断定时器送出的标志位,如果为1就清除并进行ADC转换,或者在定时器中断中启动ADC,在主函数中读取ADC值,实际上我们没有必要每次中断都去读取ADC值的。
|
|
|
|
中断速度快,主程序从上往下执行过程中会错过中断数值的更新,主程序还没来得及判断定时中断的到达数值,却又被新一次中断给更新了,那就识别不到了。“if A == 20”和“ifB == 50”放在中断里面,设置一个成功的标志,主程序识别成功标志就可以了,这样才会有时效性嘛。。
|
|
|
|
嗯,嗯,感谢,我已经在各位的指导下,懂了,谢谢大家
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1148 浏览 2 评论
1497 浏览 3 评论
1129 浏览 0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1266 浏览 0 评论
1553 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 07:08 , Processed in 0.670914 second(s), Total 59, Slave 53 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号