請問微控制器高手們這個軟體延時延時了多長時間?謝謝

2021-07-30 22:17:18 字數 4115 閱讀 8740

1樓:匿名使用者

有一個很簡單而且很準確的方法:用keilc**,在keilc主介面的左面有一個微控制器執行時間的引數。但是必須設定好晶振和微控制器型號,否者會出誤差。

2樓:

迴圈了100萬次 可根據使用的晶振來計算指令週期,再來計算出延時時間

3樓:匿名使用者

彙編啊,這個不怎麼了解啊

請問有誰懂微控制器的延時程式,幫我看看延時子程式具體延時多長時間,求詳細步驟

4樓:匿名使用者

mov指令需要兩個機器週期;djnz執行一次也需要兩個機器週期。djnz總共執行了r3*r4個機器週期,r3=7*16+15=114+15=129,r4=15*16+15=255, nop一個機器週期,總計執行機器週期為r3*r4+1nop+2個mov=32895+1+4=32900,加入12mhz晶體,一個機器週期1微秒,大概延時32.9毫秒。

延時過程就是類似失眠了數羊,耗費時間而已

5樓:匿名使用者

你看哈你的cpu頻率或者晶振頻率是多少 算出時鐘週期 這樣就好辦多了

我剛學微控制器的,我需要編寫延時40ms的子程式,但不懂如何入手.麻煩高手們幫幫忙!謝謝

6樓:匿名使用者

首先需要確定晶振頻率,然後可以採用軟體延時和硬體延時兩種方法。

軟體延時就是靠編寫迴圈程式讓其迴圈執行來達到延時目的,另一種方法是硬體延時,用微控制器內部的定時器來產生延時效果,這種方法不佔用cpu資源,推薦用此方法。

首先需要確定晶振頻率,然後可以採用軟體延時和硬體延時兩種方法。

軟體延時就是靠編寫迴圈程式讓其迴圈執行來達到延時目的,另一種方法是硬體延時,用微控制器內部的定時器來產生延時效果,這種方法不佔用cpu資源,推薦用此方法。

假設晶振頻率12mhz,那麼一個機器週期為12/12mhz=1us軟體延時40ms:

mov r3,#200

diy1:mov r2,#100

diy:djnz r2,diy;執行一次2us,共執行20000次djnz r3,diy1

硬體延時涉及到定時器,需要計算定時初值,40ms可以採用定時器的模式1,最大可延時65ms,這個涉及到的東西較多,我就不具體說了,你可以檢視微控制器的相關書籍,上面講的很詳細。

7樓:匿名使用者

告訴我你的晶振頻率。還有你是要彙編還是c?都說一下。

51微控制器延時的問題

8樓:

硬體**,然後設定斷點,看一下前後的時間。要是非得準確求得,那就得反彙編一下,然後看彙編語句,每條彙編語句的時間累加,然後求得時間!

按照我的專案經驗的話,有時候我們不需要那麼精確的延時時間。軟體延時由於編譯器的原因,還有編譯器優化的原因,不同的的編譯軟體,同樣的程式,延時時間也有點差別。

9樓:匿名使用者

把**編譯出來,反彙編看看就認得了嘛

10樓:微享樂

1x142x2x機器週期 機器週期由你的晶振決定

11樓:安科瑞王凱鋒

光看程式是不可能看出來的!!!要對應具體的晶振是多少的!!!!

請問怎樣在微控制器中延時一年?延時程式。

12樓:匿名使用者

for(a=0;a<10000;a++)

for(b=0;b<10000;b++)

for(c=0;c<10000;c++)

..............後面自己算

13樓:海角之約

利用定時器的週期進行計數即可,例如定時器是100ms,記100次是10秒,600次是1分,依次類推可延遲一年。

請問微控制器c語言中延時函式的延時時長怎麼計算啊????

14樓:3d裝號

這個是說不出來的,不同的微控制器,不同的晶振都有不同的效果,一般地可以用軟體或者硬體**看,軟仿可以看時間差,硬體仿就直接寫入微控制器,然後用示波器去看,逐步調整到需要的值。

15樓:匿名使用者

延時的長短只有通過軟體**觀察

同一段延時的**在不同情況有不同延時時間

一:與你用的晶振有關

二:與你的**技術有關 有的採用8級流水線速度超快

16樓:匿名使用者

通過**軟體來觀察延時時間,我用過at89s52,12m晶振的

for(int z)

這個我測過幾乎就是1ms。

17樓:義劍霸天

加啊不就對了嗎! 笨蛋!

求微控制器高手幫我解決一下這個程式,時間能顯示,但是隻要一按鍵盤時,分就會不停的亂跳,請問是怎麼回事

18樓:做而論道

按鍵程式中的,延時函式,應該使用顯示函式,否則,顯示,就會停頓。

按鍵程式中,缺少等待釋放的環節,按一下,就可能會出現幾

十、幾百次的操作。

微控制器延時程式具體怎麼計算?

19樓:

1,你的微控制器時鐘是多少。2,你的微控制器一條指令是幾個時鐘週期。這樣就可以算啦

20樓:

不要考試的話~推薦使用微控制器小精靈~別下最新版本的那個要錢……

21樓:喻清懿

這個要看你用的什麼微控制器了,他的時鐘週期與他的振盪頻率有關,每一個語句的執行時間還有他的指令週期有關,查下微控制器相關資料,應該是都有的.

為什麼這個微控制器延時子程式用了push和pop?

22樓:

請你參考:

高手們喜歡這樣寫,看懂了就沒有那麼可怕了,其實就是一種儲存資料的方法。

下面逐句分析,先說明一下吧:push與pop必須成對出現,否則就亂了;另外誰跟誰是一對也得弄清。

delay:

mov r2,#30h    //以下3行不解釋了

acall delay0

retdelay0: push 02h   //把02h單元的資料入棧,就是把r2的資料存入堆疊。

//用的是第一組暫存器(m1m0=00)

//把堆疊看作蓋樓,現在蓋了一層

delay1: push 02h    //還是把r2 的資料入棧,這是大樓的第二層了

delay2: push 02h    //還是把r2 的資料入棧,這是大樓的第三層了

delay3: djnz r2, delay3    //在這一行迴圈,直到r2為0

pop 02h    //第三層出棧,把棧內的資料彈給02h單元,就是裝入r2。

//第三層拆了,不存在了。

djnz r2, delay2    //r2不為0,返回delay2,重新蓋第三層。

//r2為0,往下執行,第三層不蓋了,第三層不存在了。

pop 02h    //第二層出棧,棧內資料彈給r2,第二層拆了

djnz r2, delay1    //r2不為0,返回delay1,重蓋第二層。

//r2為0,往下執行,第二層不蓋了,第二層不存在了。

pop 02h    //第一層出棧,第一層拆了

djnz r2, delay0    //r2不為0,返回delay0,重蓋第一層。

//r2為0,往下執行,第一層不蓋了,整個大樓消失了。

ret3.看懂沒有,好好看看,仔細想想,相信你能弄懂!!!!

23樓:匿名使用者

為什麼用?其實呢,就是隻想用r2,不想用其它的暫存器了,可能是因為其它的暫存器都被用了。只用一個暫存器,延時的時間比較短,可是又要延時很長時間,就用這種方法了,入棧,再出棧。

讓人看了發懵。確實很少有人這麼寫,特立獨行吧。

每個人的程式設計習慣和想法是不同的,但,不管用什麼指令,只要能達到延時的目的就行。

所以,不必要去追糾別人程式,只要按自己的想法就好了。

這就是彙編寫程式的缺陷,用c語言寫程式就非常好理解了。

微控制器延遲程式詳解,微控制器延時程式的延時時間怎麼算的?

如果是51,晶振是12m,你的程式可延遲4ms左右。如果一定要用它延遲40ms,那就把晶振換成1m左右的吧!晶振12m時,一條djnz花的時間是2us,mov r5,108h 花的時間是1us ret 花的時間是2us 你算一下它們執行了幾次,把他們花掉的時間加起來,就是延遲時間了。你可以參巧延遲算...

求微控制器高手解惑,微控制器問題求解答

建議你採用定時中斷的方式實現。一般的做法舉例,比如你有20ms,30ms,50ms三種延時 1 取這些延時的最大公約數時間,此例中就是10ms,以10ms做為定時中斷的定時時間。其實這個10ms就是一個時標。2 定義3個char型全域性計數變數 uc20ms uc30ms uc50ms,初值為0。在...

微控制器用for迴圈編延時程式時uint i,j for

這是一個for的巢狀語句,你注意到沒有,因為兩個語句之間沒有分號,所以編譯器預設第二個for語句是第一個for語句的內部語句,怎麼理解呢?就是說你第一個for中的 i 減1一次,那第二個for中的語句將會執行110次,那麼這個110從 來呢?其實是根據你所用微控制器的晶振頻率來計算的,在這個程式當中...