1樓:**飄渺迷人
如果是51,晶振是12m,你的程式可延遲4ms左右。
如果一定要用它延遲40ms,那就把晶振換成1m左右的吧!
晶振12m時,一條djnz花的時間是2us,mov r5,#108h 花的時間是1us
ret 花的時間是2us
你算一下它們執行了幾次,把他們花掉的時間加起來,就是延遲時間了。
你可以參巧延遲演算法:
你可以參巧指令週期:
2樓:一萬光年
r5,r6,r7是微控制器內部工作暫存器,延時時間根據,微控制器執行指令的時間計算的。
延遲時間=指令執行時間×指令執行次數。
如:40ms=250*8(指令執行次數)*20(指令執行時間)
3樓:目頭小子
用軟體寫即可,很簡單 一個叫 的小程式。
4樓:網友
要想學好,買本微控制器原理的書吧。不貴,30塊左右。
微控制器延時程式的延時時間怎麼算的?
5樓:信必鑫服務平台
微控制器的延時程式通過執行指令來達到延時效果,這個時間等於執行的指令需要的時間,而一個指令需要的時間叫做指令週期,這個時間等於若干個機器週期。
微控制器延時程式的延時時間怎麼算的?
6樓:
您好,不好意思讓您久等了,微控制器延時程式的延時時間怎麼算的微控制器的延時程式通過執行指令來達到延時效果,這個時間等於執行的指令需要的時間,而一個指令需要的時間叫做指令週期,這個時間等於若干個機器週期。希望我的對你有幫助,祝您生活愉快!
微控制器彙編程式延時0.4秒怎麼寫?
7樓:紫羅蘭
可以用軟體延時來實現。根據系統時鐘週期,計算出一個機器週期對應的時間,在算秒需要多少個機器週期,據此設定程式迴圈的次數即可,應用djnz指令即可。
微控制器延時程式的延時時間怎麼算的?
8樓:匿名使用者
微控制器的延時程式通過執行指令來達到延時效果,這個時間等於執行的指令需要的時間專,而一個指令需屬要的時間叫做指令週期,這個時間等於若干個機器週期。
9樓:文庫精選
內容來自使用者:雲海尋峰。
c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的**,在使用時應該使用unsigned char作為延時變數。以某晶振為12mhz的微控制器為例,晶振為12mhz即一個機器週期為1us。
一。 500ms延時子程式程式:
void delay500ms(void)
計算分析:程式共有三層迴圈一層迴圈n:r5*2 = 81*2 = 162us djnz 2us
二層迴圈m:r6*(n+3) =202*165 = 33330us djnz 2us + r5賦值1us = 3us
三層迴圈: r7*(m+3) =15*33333 = 499995us djnz 2us + r6賦值1us = 3us
迴圈外: 5us子程式呼叫2us +子程式返回2us + r7賦值1us = 5us
延時總時間=三層迴圈+迴圈外= 499995+5 = 500000us =500ms
計算公式:延時時間=[(2*r5+3)*r6+3]*r7+5
二。 200ms延時子程式程式:
void delay200ms(void)
三。 10ms延時子程式程式:
void delay10ms(void)
四。 1s延時子程式程式:
void delay1s(void)
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
10樓:匿名使用者
看你用什麼語言計算了,彙編延時準確,知道微控制器工作週期和迴圈次數即可專算出,但不具有可屬移植性,在不同種類微控制器中,彙編不通用。用c的話,由於各種軟體執行效率不一樣,不會太準,通常用定時器做延時或做一個不準確的延時,延時短的話,在c中使用匯編的nop做延時。
11樓:葡萄乾_紅蛋
演示程式。如果用匯編就根據指令的指令週期算時間。如果c語言,同樣是看反彙編。
微控制器怎麼能延時執行不耽誤正常運轉
12樓:和小敘
微控制器執行一條語句的速度是非常的慢的,接12m晶振其實到了微控制器內部就分到1m而已了。所以時間非常可貴,因為衡量一個cpu好壞來說,它的速度是很重要的一個指標,因此,在一個比較大的工程當中,很不提倡使用簡單的延時函式(也就是我們通常命名為delay的那個函式)來處理延時問題。就像你說的那樣,雖是延時了,但卻耽誤了正常運轉。
什麼意思呢?舉個簡單的例子,在有八個數碼管(採用動態顯示)和幾個按鍵(因需消抖,要延時)的工程當中,程式在不斷地對數碼管和按鍵進行掃描,當檢測到某個按鍵按下時,水平不高的人一般都delay(100)來延時消抖,那樣子的話,如果是細心的人會發現數碼管閃了一下(也就是滅了一下),做出這種產品的人只能說是一個二流工程師做出來的。
那如何不影響數碼管掃描,又能達到按鍵消抖的效果呢?這裡,時間把握就很重要了。
其實,按腳抖動的時間持續大約是10ms,一個發光二極體從亮到完全暗大約也是10ms,而從滅到完全亮需要1ms,因此,懂得這些以後,就好辦了。
說了那麼多,不用延時,那方法是什麼?答案是定時器中斷。是的,定時器中斷,當時間到了,再去處理按鍵動作,這樣,就不回卡住cpu時間(也就是你所說的“不耽誤正常運轉”)了。
那怎麼實現呢?通常是設一些標誌位,這裡就不詳細講了。
當然,像數碼管也是最好用定時器來延時掃描最好,大的工程都需要這麼做,本人從不提倡使用簡單的delay延時來處理一切需要延時的事例。
要做精品,並且做好,需要經驗的累加。
13樓:網友
可以借鑑系統的解決方法,比如ucos2,設計一個時間基準,看看這個帖子。
14樓:九方依秋
你這個想法若能實現,基本上99%的工程專案也就與作業系統無緣了,作業系統出現的原因80%都和怎麼處理延時有關。
15樓:匿名使用者
延時有兩種方法,一種是用軟體延時,即寫延時子程式,這種方法是讓微控制器執行無用的指令,就是為了延時,延時期間就不能做其他事情了,很浪費微控制器的時間。這種方法是在微控制器不忙的情況下用,反正閒著也是閒著。
第二種方法就是你要求的,即能延時,又不耽誤主程式的執行,用定時器t0或t1定時,設定定時時間後,定時器開始計時,主程式繼續執行,不用管定時器,當定時時間到,定時器就會申請中斷,微控制器就響應中斷,處理定時子程式需要完成的工作,完成後返回到主程式繼續主程式的執行,這是最合理的方法,充分利用了微控制器的資源,互不影響。
16樓:匿名使用者
1.用中斷 2.用標誌位 如if(a==0)當a!=0時跳出。
微控制器延時程式怎麼寫?是根據什麼原理寫的?有什麼方法嗎?
17樓:匿名使用者
微控制器中做延時,如果是時間比較短的情況,和微控制器的機器週期時間,或微控制器執行單個命令的時間是同一個單位時間的話,那麼用迴圈執行一些沒有動作的命令來延時,算每個命令的時間是多少,迴圈了多少次,那延時時間就可以算出來的了。
另外一種延時,時間相對機器週期的單位時間來說比較大,好像要ms,s 以上,那麼可以用微控制器的定時器來做,那就比較準確的時間的了,
18樓:匿名使用者
1、比較死板的方法是自己寫一個delay函式,裡面用for,while等做一些迴圈,下面是1ms的延時函式。
void delay1ms(void)
具體演算法是//(3j+2)*i=(3×33+2)×10=1010(us),但精確度不高,如果想準確點可以調節相應的引數用示波器來實。
現,上面的函式適用於程式簡單,對時間性要求不高,如:點led燈,單個按鍵操作等等。
2,就是用定時器中斷裡面設定標誌位來產生延時的方法,比如你可以把定時器設定為每1ms進一次中斷,在中斷裡面。
把一個標誌位(如flag)置一。
當你需要1ms延時的時候你可以先初始化定時器,然後查詢標誌位是否置一,置一則執行if後面的語句,即if(fla{};
當你需要10ms延時時,你可以把flag設定為uchar,中斷裡面flag++;外面查詢用if(10==flag){}
以此類推,上面的方法精確度高適用地方。
微控制器用for迴圈編延時程式時uint i,j for
這是一個for的巢狀語句,你注意到沒有,因為兩個語句之間沒有分號,所以編譯器預設第二個for語句是第一個for語句的內部語句,怎麼理解呢?就是說你第一個for中的 i 減1一次,那第二個for中的語句將會執行110次,那麼這個110從 來呢?其實是根據你所用微控制器的晶振頻率來計算的,在這個程式當中...
求51微控制器程式,求一個51微控制器程式
需要樓主給出64個不同顏色led的連線圖。手動,也要有電路圖。18b20溫度感測器,當然了。沒有電路,求程式?先求一個電路吧。求個51微控制器程式 10 組合語言可以嗎?org 0000h jmp start org 000bh mov th0,4ch 定時50ms 11.0592mhz djnz ...
微控制器程式分析題微控制器程式分析題求解答
設r0 20h,r1 25h,20h 70h,21h 80h,22h a0h,22h a0h,25h a0h 26h 6fh,27h 76h,下列程式執行後,clr c cy 0 mov r2,3 r2 03h r2 02h r2 01h loop mov a,r0 a 70h a 80h a a0...