完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,51单片机中,在程序中设置两个数Settime、RunTime,比较这两个数的大小,均是unsigned long类型,其中:
SetTime = SetDay*24*60*60 + SetHour*60*60; 即:将设置的“天数”跟设置的“小时数”换算成“秒数”,再赋值给SetTime ,也就是SetTime 的单位为:秒;SetDay、SetHour均为unsigned char类型; RunTime = Day*24*60*60+Hour*60*60+Min*60+Sec; 原理同SetTime一样,也是全部换算成秒来做比较;其中Day、Hour、Min、Sec也均为unsigned char类型; RunTime是由定时器产生,具体方式如下(为了减少等待时间,数据做了处理,最终结果是:1小时相当于10秒钟): 换算完成之后,再将两个数做对比,若RunTime>SetTime,则输出一个信号: 那么问题来了: 当我设置SetDay=0;SetHour=1;时,也就是1个小时,RunTime大于10秒(之前有说明,为了缩短等待时间做的数据处理,1小时等于10秒)时就会给出一个信号; 当我设置SetDay=0;SetHour=2;时,也就是2个小时,RunTime大于20秒时就会给出一个信号; 当我设置SetDay=0;SetHour=3;时,也就是3个小时,RunTime还是大于20秒时就会给出一个信号; 当我设置SetDay=0;SetHour=4;时,也就是4个小时,RunTime还是大于20秒时就会给出一个信号; 后面的问题差不多,就不一一列出来了! 特在此求助大神! PS:经过各路大神的解答,初步判定是if(Hour>1)这个条件的问题,按照如下方式改,问题暂时解决,至于问题是否真是如此以及程序中其他的问题,还得多几天验证才能知道!感谢各路大神! 延续: 按照如上更改了之后,SetHour设置在18以下,输出等待时间是对的,设置SetHour=19或以上还是有问题,具体现象如下: 设置 19时 等待10秒输出设置 20 时 等待30秒输出设置 21时 等待50秒输出设置 22时 等待50秒输出设置 23时 等待50秒输出 而且等待的时长好像不是完全固定的,有时候10秒,有时候20秒……求解! 虽然最佳答案选择了“999”这个热心小伙伴的,也确实一开始是有这个问题,所以他的回答是正确的,至于后来我发现了另外一个问题,又不想重新发帖,于是在本帖的后面追加了问题点,其实问题的根本还是如“MOP”所说,是计算过程中数据溢出的问题:详见15楼 但是无奈啊,最佳答案只能选一个呀,所以只好委屈“MOP”同学了,按照你所说的,我试了,确实也能解决问题,不过我之前也是用的强制类型转换,如下: SetTime = (unsigned long)SetDay*24*60*60 + (unsigned long)SetHour*60*60 这样也确实解决了问题,所以最根本的问题,还是计算过程中数据溢出的问题,在此,也非常感谢MOP同学热心解答! |
|
相关推荐
20个回答
|
|
999与MOP都被楼主采纳,根据悬赏求助奖励办法,社区分别都奖励300IC币!
|
|
|
|
只有小组成员才能发言,加入小组>>
709 浏览 0 评论
1116 浏览 1 评论
2494 浏览 5 评论
2833 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2675 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
661浏览 9评论
672浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
636浏览 5评论
679浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 16:10 , Processed in 1.502081 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号