找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

89c51怎么获取从开始运行到现在的时间?

查看数: 5328 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-5-19 14:13

正文摘要:

目的是获得程序运转的时间,因为要对电机进行测速,外置了一个传感器; 现在已经能够从传感器得到了电机运转的圈数 count ,需要把count除以从通电开始到现在的时间才能得到速度。 请问这个时间要怎么做才能得到? ...

回复

ID:308979 发表于 2018-5-23 14:36
优雅的刺猬 发表于 2018-5-19 14:13
用一个定时器,50毫秒跳一次,二十次加一,主函数初始化完就开中断,就能计时了。随便设个整数变量。

时间time能得到了,计数count也有了,可是显示不出来啊

我用的是四位共阳数码管,buf[]数组的0~3分别是四个位。显示其他数据的时候例如:buf[1] = 1;display();这样就能正常显示,但是速度count/time没法显示出来,不知道是不是数据类型的问题?

while(!s5) { //TODO  显示rs??
        rs = count/time;
        buf[3] = rs/1000 ;
        buf[2] = rs%1000/100;
        buf[1] = rs%100/10 ;
        buf[0] = rs%10;
        display();
}
ID:308979 发表于 2018-5-23 13:59
优雅的刺猬 发表于 2018-5-22 23:43
用一个定时器,50毫秒跳一次,二十次加一,主函数初始化完就开中断,就能计时了。随便设个整数变量。

按回复结合另一个分享的帖子弄好了
ID:335307 发表于 2018-5-23 00:01
你可以设置一个中断,非常好用
ID:137653 发表于 2018-5-22 11:58
弄一个标志位,开始的时候标志位等于0,然后再进入main函数初始化的时候标志位置1,然后到定时器判断标志位为1了就开始计时,就好了
ID:295783 发表于 2018-5-22 08:27
设置开始到结束两个标志位 然后计算时间
不过我个人感觉不用算从开始的时间 没有什么必要
希望对你有帮助
ID:334622 发表于 2018-5-21 09:35
用DS1302;也只能这样了……你想,单片机里面就定时器而已
ID:334565 发表于 2018-5-21 00:53
需要计时的话,直接对单片机内部脉冲计数不就好了么,用一个整数的晶振,然后输出转换成时间不就是单片机开始到结束的时间了么
ID:313895 发表于 2018-5-20 23:05
电机开始 设置一个标志位  定时器定时  关闭标志位 。之后计算
ID:334309 发表于 2018-5-20 17:09
在10ms的中断服务程序中,增加一个计数器,就可以得到时间。那么电机打开的时候,记下这个起始的时间,用当前时间减去起始时间就可以得到运行时间
ID:302650 发表于 2018-5-20 15:36
不用从运行开始算时间,你可以计算比如一秒时间内的圈数,开启计数器,同时开启计圈传感器,1秒后定时器溢出,引发中断,再关闭定时器,关闭计圈传感器。不就解决了。
ID:302650 发表于 2018-5-20 15:30
为什么要从开始算哪?
ID:336165 发表于 2018-5-19 14:13
用一个定时器,50毫秒跳一次,二十次加一,主函数初始化完就开中断,就能计时了。随便设个整数变量。

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

Powered by 单片机教程网

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