導航:首頁 > 操作系統 > 單片機的延時程序

單片機的延時程序

發布時間:2022-07-10 00:01:10

單片機延時程序

你調用此程序的時候會給他傳遞X的值,就是while(x--)裡面的X,當while檢測到x--不等於0的時候,就執行for(j=0;j<125;j++);也就是在for(j=0;j<125;j++);這執行125次判斷不做別的,就是耗時間而已,當執行完for(j=0;j<125;j++);以後又回到while(x--)上檢測,當while檢測到x--不等於0的時候,又一次執行,知道檢測到x--等於0。函數就返回到你調用他的地方。

㈡ 單片機延時時間程序怎麼編程

舉一個例子來說明吧.比如你要編一個延時50毫秒的子程序,那麼步驟如下:
1、查看一下你的硬體環境,比如晶振大小,CPU型號,不用CPU指令的機器周期是不一樣的。
2、計算延時需要的機器周期。比如採用12M晶振,CPU採用通用8051,那麼一個機器周期為1US,50毫秒為50*1000=50000US,需要的機器周期=50000/1=50000。
3、試編程,如下:

程序代碼 指令時間 總共時間
DELAY50MS: ;2 2
MOV R7,#A ;1 1
DELAY1:
MOV R6,#B ;1 1*A
DJNZ R6,$ ;2 2*B*A
DJNZ R7,DELAY1 ;2 2*A
RET ;2 2
所以總時間=2+1+A+2*A*B+2*A+2=5+3A+2AB
4、湊數求A、B
根據2、3得到如下式子:
50000=5+3A+2AB
可以有很多種結果,不過最好是以A盡可能小,B盡可能大為原則,當然不能大於255.
我現在湊出A=110,B=225;那麼總延時時間=5+3*110+2*110*225=49835。還差165US
5、補齊不夠時間
再加一個小循環就OK了,呵呵如下:
MOV R6,#C
DJNZ R6,$
會算了吧,2*C+1=165;所以C=82。
現在完整的延時程序出來了,如下:
DELAY50MS: ;2 2
MOV R7,#110 ;1 1
DELAY1:
MOV R6,#225 ;1 1*110
DJNZ R6,$ ;2 2*225*110
DJNZ R7,DELAY1 ;2 2*110
MOV R6,#82 ;1 1
DJNZ R6,$ ;2 2*82
RET ;2 2
很圓滿:總的時間50000微妙,也就是50毫秒。這種方式編程,在該硬體環境下可以保證最大誤差為1微妙。

㈢ 單片機延遲500ms試寫出延遲程序

根據外部晶振的不同,延時1毫秒的循環次數也不一樣,一般12m晶振的話用
for(j=time;j>0;j--);延時時,1毫秒time大概為125左右,這里用110,大概晶振為11.0592m,所以這段程序,內部循環完成1毫秒延時,外部循環完成500毫秒延時。

㈣ C51單片機延時程序,需要不精確延時2小時,請問大神怎麼寫延時代碼,謝謝!

可以有很多辦法,一是調整參數,使其延時5分鍾或6分鍾,循環24次或20次。二是將延時函數的形參改為長整型(32位)延時時間擴大65536倍。三是使用定時器,每次定時50mS,累計144000次,便是2小時,使用定時器(中斷)的好處是在延時期間還可以干許多事情,例如顯示剩餘時間,檢測設備工作狀態或者調整延時時間等,而你的純軟體延時期間想干其它事情比較困難。

㈤ 單片機c語言延時程序

一般單片機在c語言中很難得到精確的延時,所以一般對時間要求高的都用計時器中斷來做了。如果時間要求不嚴格可以用for循環來做,你可以實際測試一下,把時間延時到大概一秒左右,然後燒進單片機里運行,比如一個燈亮燈滅的程序,看著燈計數,同時用秒錶計時,幾個幾十次後取平均值就能知道大概時間了。

㈥ 單片機延時程序怎麼寫是根據什麼原理寫的有什麼方法嗎

1、比較死板的方法是自己寫一個delay函數,裡面用for,while等做一些循環,下面是1ms的延時函數
void
delay1ms(void)
{
unsigned
char
i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
具體演算法是//(3j+2)*i=(3×33+2)×10=1010(us),但精確度不高,如果想准確點可以調節相應的參數用示波器來實
現,上面的函數適用於程序簡單,對時間性要求不高,如:點led燈,單個按鍵操作等等。
2,就是用定時器中斷裡面設定標志位來產生延時的方法,比如你可以把定時器設定為每1ms進一次中斷,在中斷裡面
把一個標志位(如flag)置一
當你需要1ms延時的時候你可以先初始化定時器,然後查詢標志位是否置一,置一則執行if後面的語句,即if(fla{};
當你需要10ms延時時,你可以把flag設置為uchar,中斷裡面flag++;外面查詢用if(10==flag){};
以此類推,上面的方法精確度高適用地方。

㈦ 51單片機中延時程序

1. sleep()是以毫秒計算的,延時5秒是sleep(5*1000);,延時5分是sleep(5*1000*60);

2.包含的頭文件看你用的什麼編輯軟體。

3.我用的VC++是用包含在#include<windows.h>頭文件中。

#include<stdio.h>#include<windows.h>//Sleep()的頭文件 main() { int i;

int n=10;for(i=1;i<=n;i++) {printf("%d",i);Sleep(5*1000*60);} //

這里修改延時時間,

有些人說是用#include<dos.h>做頭文件你自己試下吧。

還用Sleep的S是大寫的,不是小寫的。

㈧ 關於單片機延時程序

void timer0_zd() interrupt 1 //定時器0,定時中斷子程序
{
TL0 = 0x00; // 設置定時器初值
TH0 = 0x4C; // 設置定時器初值

a++; //開關按下延時,延時到之後,電磁閥開始動作。

if(a==20) //延時20*50毫秒 = 1秒
{
flag0=1;
}
}
很明顯進入中斷,a == 20的時候flag0標志置位,aut1 = 0;如果你a不清零的話,a++一直加加到溢出,所以出錯,如果你清零了,中斷進入一次a+1 到20請aut1就會一直輸出

㈨ 單片機延時程序是怎麼實現的

延時是靠CPU執行無關指令,把時間浪費掉。
具體來說,DJNZ指令需要2個周期,循環250次就是500個周期,兩層循環就是500*500個周期,你調用一次DELAY子程序,CPU就空轉250000個周期(注意這個計算不精確),如果晶振是12MHz,那就意味著時間過去了250ms,也就是延時250ms

閱讀全文

與單片機的延時程序相關的資料

熱點內容
安卓翻新機怎麼轉移數據 瀏覽:405
伸縮彈簧壓縮桿 瀏覽:964
新伺服器如何連接db2 瀏覽:375
界面編程書 瀏覽:943
怎麼判斷一個app是虛假炒股app 瀏覽:803
視頻背景源碼 瀏覽:862
linux系統編程視頻網盤下載 瀏覽:527
處對象徵婚app如何 瀏覽:369
優盤內置加密軟體有什麼用 瀏覽:46
黑漫君伺服器為什麼這么高 瀏覽:319
如何將app變成彩色的 瀏覽:980
反編譯文件怎麼打包apk 瀏覽:472
安卓手機音量加鍵壞了怎麼辦 瀏覽:197
為什麼解壓文件出現的是記事本 瀏覽:24
怎麼給電腦上的記事本加密 瀏覽:546
控制理論基礎pdf 瀏覽:197
app怎麼遠距離傳送 瀏覽:275
驅動伺服器為什麼這么火 瀏覽:543
教務網字元加密 瀏覽:105
androidstudio卡死 瀏覽:437