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從 來呢?其實是根據你所用微控制器的晶振頻率來計算的,在這個程式當中...