标题: 89c51怎么获取从开始运行到现在的时间? [打印本页]

作者: tjtlm    时间: 2018-5-19 14:13
标题: 89c51怎么获取从开始运行到现在的时间?
目的是获得程序运转的时间,因为要对电机进行测速,外置了一个传感器;
现在已经能够从传感器得到了电机运转的圈数 count ,需要把count除以从通电开始到现在的时间才能得到速度。
请问这个时间要怎么做才能得到?


已有定时器程序如下:

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

按回复结合另一个分享的帖子弄好了
作者: tjtlm    时间: 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();
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1