① 怎樣用單片機精確延時500ms以上
幾個精確延時程序:在精確延時的計算當中,最容易讓人忽略的是計算循環外的那部分延時,在對時間要求不高的場合,這部分對程序不會造成影響。
500ms延時子程序程序:(晶振12MHz,一個機器周期1us。)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
(1)單片機如何程序延時擴展閱讀
實現延時通常有兩種方法:一種是硬體延時,要用到定時器/計數器,這種方法可以提高CPU的工作效率,也能做到精確延時;另一種是軟體延時,這種方法主要採用循環體進行。
在電子技術中,脈沖信號是一個按一定電壓幅度,一定時間間隔連續發出的脈沖信號。脈沖信號之間的時間間隔稱為周期;而將在單位時間(如1秒)內所產生的脈沖個數稱為頻率。
頻率是描述周期性循環信號(包括脈沖信號)在單位時間內所出現的脈沖數量多少的計量名稱;頻率的標准計量單位是Hz(赫)。電腦中的系統時鍾就是一個典型的頻率相當精確和穩定的脈沖信號發生器。
51單片機的指令有單位元組、雙位元組和三位元組的,它們的指令周期不盡相同,一個單周期指令包含一個機器周期,即12個時鍾周期,所以一條單周期指令被執行所佔時間為12*(1/ 晶振頻率)= x μs。常用單片機的晶振為11.0592MHz,12MHz,24MHz。
其中11.0592MHz的晶振更容易產生各種標準的波特率,後兩種的一個機器周期分別為1 μs和2 μs,便於精確延時。
② 用單片機8051如何做一個定時器的一秒延時
使用單片機8051實現一秒延時的基本思路是通過循環等待定時器的中斷,或者通過軟體方式循環等待一定次數。這里提供一個簡單的軟體延時方法。
首先,我們需要在程序中定義兩個存放延時期數的寄存器,這里用30H和31H來表示。具體數值需要根據晶振頻率來確定。
接下來是延時程序的實現:
MOV 30H,#一個數
MOV 31H,#一個數
LOOP:DJNZ 30H,LOOP1
LOOP1:DJNZ 31H,LOOP
這段代碼的意思是先將一個延時期數寫入30H,再將另一個延時期數寫入31H。然後進入一個循環,先檢查30H中的數值是否為0,如果不為0則繼續循環,直到30H中的數值為0,跳轉到LOOP1標簽處。在LOOP1標簽處,再次檢查31H中的數值是否為0,如果不為0則繼續循環,直到31H中的數值為0,再返回到LOOP標簽處繼續循環。
這樣的設計思路是基於8051單片機的內部定時器工作原理,通過軟體循環等待的方式實現延時。
需要注意的是,具體延時期數的數值需要根據實際使用的晶振頻率來計算,通常晶振頻率為12MHz或6MHz時,可以利用8051的機器周期來計算延時期數。例如,對於12MHz的晶振,每個機器周期為1/12us,那麼要實現一秒延時,就需要等待1000000個機器周期。
具體計算方法可以參考8051單片機的數據手冊,或者使用在線的單片機延時計算工具進行計算。
總之,通過上述代碼實現的延時方法雖然簡單,但適用於8051單片機的基本開發和實驗。對於更復雜的應用場景,可能需要考慮使用硬體定時器或更精確的延時演算法。