找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 18235|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

誰能給個1US延時程序啊(要求晶振是12M的51單片機(jī))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:40490 發(fā)表于 2012-7-4 15:42 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

 

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2012-7-4 16:24 | 只看該作者

這個簡單  一個 nop 就是1us

 

回復(fù)

使用道具 舉報

板凳
ID:40490 發(fā)表于 2012-7-4 16:47 | 只看該作者

我要的是一個延時程序是轉(zhuǎn)一個參數(shù)進(jìn)去 就得到想要的

 

回復(fù)

使用道具 舉報

地板
ID:7485 發(fā)表于 2012-7-4 23:53 | 只看該作者

你的問題很搞笑。

 

12兆晶體標(biāo)準(zhǔn)51片子,一個機(jī)器周期就是1us,無法再小了,沒有其他辦法。只能是nop,一周期指令。

回復(fù)

使用道具 舉報

5#
ID:7485 發(fā)表于 2012-7-4 23:54 | 只看該作者
估計你是需要1ms的吧?
回復(fù)

使用道具 舉報

6#
ID:7485 發(fā)表于 2012-7-5 08:43 | 只看該作者

如果已知屋里只有1個人,讓你給出一個計算公式,計算屋里有幾個人,你會怎么寫?

 

回復(fù)

使用道具 舉報

7#
ID:40490 發(fā)表于 2012-7-5 18:50 | 只看該作者
版主你別想的那么理所當(dāng)然 你試試就知道多難了 我目前最多控制在誤差6個US以內(nèi) 它是這樣子的 12M里面有個累計誤差 而且由于他的運(yùn)算比較慢有個累計誤差 所以我覺得是不可能的 但是呢就是有這么一個做到了
回復(fù)

使用道具 舉報

8#
ID:40490 發(fā)表于 2012-7-5 18:54 | 只看該作者
版主你別想的那么理所當(dāng)然 你試試就知道多難了 我目前最多控制在誤差6個US以內(nèi) 它是這樣子的 12M里面有個累計誤差 而且由于他的運(yùn)算比較慢有增大 時間相差就越大
回復(fù)

使用道具 舉報

9#
ID:7485 發(fā)表于 2012-7-5 22:05 | 只看該作者

聽不懂你說的是啥!你最后說的和你開始說的就不是一回事!

 

“我目前最多控制在誤差6個US以內(nèi) ”,你多長時間允許誤差6個US??

 

對使用12M晶振的51單片機(jī)來說,最小的時間單位就是1US,只要是個程序,最少要一個指令吧?對標(biāo)準(zhǔn)的89c51來說任何一個指令都等于或大于1US。

如果說在一定時間內(nèi)積累了一個或幾個微秒的+誤差,你想延遲幾個微秒,那是另外一回事。

你想延遲幾個微秒就加進(jìn)去幾個NOP,這也可以認(rèn)為就是1US的延時程序。

如果你是數(shù)小時積累了1個微秒的誤差,用程序在一定的小時后(計算出來的)或者是每天00:00:00時,一次性的在定時器的初裝值加上幾個數(shù)值即可。

積累誤差不超過1微秒是沒法調(diào)整的。

到現(xiàn)在我沒有弄明你的真正的意圖,不知道我揣摩的對與否?

回復(fù)

使用道具 舉報

10#
ID:40490 發(fā)表于 2012-7-6 09:26 | 只看該作者
就是你說這樣我要一斷長時間的累計 但是了又總是有點(diǎn)點(diǎn)岔開 這幾天來一個總結(jié)晶振稍微大點(diǎn)誤差就會少點(diǎn) 這幾天來一個總結(jié)
回復(fù)

使用道具 舉報

11#
ID:43499 發(fā)表于 2012-8-1 01:16 | 只看該作者
 現(xiàn)在晶振質(zhì)量普遍不行,
不過如果是 12T,延1uS,12M,NOP解決一切
回復(fù)

使用道具 舉報

12#
ID:43173 發(fā)表于 2012-8-1 09:05 | 只看該作者
以下是引用admin在2012-7-4 16:24:58的發(fā)言:

這個簡單  一個 nop 就是1us

 

正解。

不清楚LZ到底想要什么!

回復(fù)

使用道具 舉報

13#
ID:425175 發(fā)表于 2019-2-2 21:38 | 只看該作者
/*分享一下常用的延時函數(shù)*/
/*延時10us*/
void delay_10us()  //延時10us@12M晶振
{      
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}

/****延時n個10us****/
void delay_n10us(uint n)  //延時n個10us@12M晶振
{      
        uint i;         
        for(i=n;i>0;i--)   
        {
              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        }
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表