找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5338|回復: 12
收起左側(cè)

89c51怎么獲取從開始運行到現(xiàn)在的時間?

[復制鏈接]
ID:308979 發(fā)表于 2018-5-19 14:13 | 顯示全部樓層 |閱讀模式
200黑幣
目的是獲得程序運轉(zhuǎn)的時間,因為要對電機進行測速,外置了一個傳感器;
現(xiàn)在已經(jīng)能夠從傳感器得到了電機運轉(zhuǎn)的圈數(shù) count ,需要把count除以從通電開始到現(xiàn)在的時間才能得到速度。
請問這個時間要怎么做才能得到?


已有定時器程序如下: 捕獲.PNG

最佳答案

查看完整內(nèi)容

用一個定時器,50毫秒跳一次,二十次加一,主函數(shù)初始化完就開中斷,就能計時了。隨便設(shè)個整數(shù)變量。
回復

使用道具 舉報

ID:336165 發(fā)表于 2018-5-19 14:13 | 顯示全部樓層
用一個定時器,50毫秒跳一次,二十次加一,主函數(shù)初始化完就開中斷,就能計時了。隨便設(shè)個整數(shù)變量。
回復

使用道具 舉報

ID:302650 發(fā)表于 2018-5-20 15:30 | 顯示全部樓層
為什么要從開始算哪?
回復

使用道具 舉報

ID:302650 發(fā)表于 2018-5-20 15:36 | 顯示全部樓層
不用從運行開始算時間,你可以計算比如一秒時間內(nèi)的圈數(shù),開啟計數(shù)器,同時開啟計圈傳感器,1秒后定時器溢出,引發(fā)中斷,再關(guān)閉定時器,關(guān)閉計圈傳感器。不就解決了。
回復

使用道具 舉報

ID:334309 發(fā)表于 2018-5-20 17:09 | 顯示全部樓層
在10ms的中斷服務(wù)程序中,增加一個計數(shù)器,就可以得到時間。那么電機打開的時候,記下這個起始的時間,用當前時間減去起始時間就可以得到運行時間
回復

使用道具 舉報

ID:313895 發(fā)表于 2018-5-20 23:05 | 顯示全部樓層
電機開始 設(shè)置一個標志位  定時器定時  關(guān)閉標志位 。之后計算
回復

使用道具 舉報

ID:334565 發(fā)表于 2018-5-21 00:53 | 顯示全部樓層
需要計時的話,直接對單片機內(nèi)部脈沖計數(shù)不就好了么,用一個整數(shù)的晶振,然后輸出轉(zhuǎn)換成時間不就是單片機開始到結(jié)束的時間了么
回復

使用道具 舉報

ID:334622 發(fā)表于 2018-5-21 09:35 | 顯示全部樓層
用DS1302;也只能這樣了……你想,單片機里面就定時器而已
回復

使用道具 舉報

ID:295783 發(fā)表于 2018-5-22 08:27 | 顯示全部樓層
設(shè)置開始到結(jié)束兩個標志位 然后計算時間
不過我個人感覺不用算從開始的時間 沒有什么必要
希望對你有幫助
回復

使用道具 舉報

ID:137653 發(fā)表于 2018-5-22 11:58 | 顯示全部樓層
弄一個標志位,開始的時候標志位等于0,然后再進入main函數(shù)初始化的時候標志位置1,然后到定時器判斷標志位為1了就開始計時,就好了
回復

使用道具 舉報

ID:335307 發(fā)表于 2018-5-23 00:01 來自觸屏版 | 顯示全部樓層
你可以設(shè)置一個中斷,非常好用
回復

使用道具 舉報

ID:308979 發(fā)表于 2018-5-23 13:59 | 顯示全部樓層
優(yōu)雅的刺猬 發(fā)表于 2018-5-22 23:43
用一個定時器,50毫秒跳一次,二十次加一,主函數(shù)初始化完就開中斷,就能計時了。隨便設(shè)個整數(shù)變量。

按回復結(jié)合另一個分享的帖子弄好了
回復

使用道具 舉報

ID:308979 發(fā)表于 2018-5-23 14:36 | 顯示全部樓層
優(yōu)雅的刺猬 發(fā)表于 2018-5-19 14:13
用一個定時器,50毫秒跳一次,二十次加一,主函數(shù)初始化完就開中斷,就能計時了。隨便設(shè)個整數(shù)變量。

時間time能得到了,計數(shù)count也有了,可是顯示不出來啊

我用的是四位共陽數(shù)碼管,buf[]數(shù)組的0~3分別是四個位。顯示其他數(shù)據(jù)的時候例如:buf[1] = 1;display();這樣就能正常顯示,但是速度count/time沒法顯示出來,不知道是不是數(shù)據(jù)類型的問題?

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();
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表