找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机数值运算时的一点疑问

[复制链接]
跳转到指定楼层
楼主
ID:159419 发表于 2023-4-20 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   最近在练习做一个51单片机的小程序,是一个以秒为单位的倒计时程序,时间是24H内(对应86400秒),其中计算部分代码如下:
   if(tim >= 3600)
         {
           h = tim/3600;
          t1 = tim - (h*3600);
                   if(t1 >= 60)
                         {
                                 s = t1/60;
                                 t2 = t1 - (s * 60);
                                 m = t2;
                         }
                          else
                                {
                                  s = 0;
                                        m = t1;
                                }
         }
         
          else if(tim >=60 && tim < 3600)
                {
                  h = 0;
                        s = tim/60;
                        m = tim - (60 * s);
                }
               
                else
                {
                  h = 0;
                        s = 0;
                        m = tim;
                }
H是小时,S是分,M是秒,T1与T2是过渡用的,测试时出现一个问题,如果设置成19小时(68400秒)内的任意数值这个倒计时程序不会有问题,只要大于等于20小时就会出现异常,后来检测发现问题出在这个T1,如果用  t1 = tim - (h*3600);会得到一个65536的溢出值,但写成
       t1 = h * 36;
          t1 = t1 * 100;
          t1 = tim - t1;
这样就不会有问题,我又用t1 =86400 - 1也能正常显示出T1值,只要用乘法运算取值大于65535就会得到溢出值,可是T1我设置的是LONG整型,为什么会是这个结果?这个问题我咨询了以前的一个大佬,不过由于很久没回论坛了,目前也没回信息,不知道大佬还在不在论坛,所以麻烦大家帮忙指点一二。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1045628 发表于 2023-4-20 14:08 | 只看该作者
最好把数据类型一起贴出来,不然靠猜实在是。。。
一般m是分s是秒,你这倒好,反过来
这种计时这样写不更好:
hour = tim / 3600;
min = tim % 3600 / 60;
sec = tim % 60;
回复

使用道具 举报

板凳
ID:883242 发表于 2023-4-20 15:51 | 只看该作者
你这个问题的关键点在于变量的定义,而你恰好没有把最关键的东西贴出来。
回复

使用道具 举报

地板
ID:1034262 发表于 2023-4-20 16:10 | 只看该作者
楼主想多了,其实就是如下即可:
unsigned long tim;
unsigned char hour, minute, second;

hour = (unsigned char)(tim / 3600);
min  = (unsigned char)((tim % 3600) / 60);
sec  = (unsigned char)(tim % 60);
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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