① 51單片機C語言程序中延時函數delay的原理是什麼
原理:只是執行一些所謂的「無實際意義的指令」,如縮放或執行一個int自加,簡單地說,就像高中數學中的「乘法原理」一樣,很容易迅速增加上面提到的「無意義指令」的數量
關於大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數情況下,程序員是經驗值。
當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數量的機器周期,你當然可以根據所有指令使用的總時間來計算特定延遲的總時間。
(1)單片機delay擴展閱讀:
定義延遲XMS毫秒的延遲函數
Voiddelay(unsignedintXMS)//XMS表示需要延遲的毫秒數
{
無符號intx,y;
For(x=XMS;X0;X-)
For(y=110;Y」0;Y-);
}
使用:
VoidDelay10us(ucharMs)
{
Uchar數據我;
(;女士「0;------Ms)
對於(I = 26)我> 0;我-);
}
I=[(延遲值-1.75)*12/ms-15]/4
② 51單片機匯編的延時DELAY怎麼算的
;以下按12M晶振計算,#後面的數最大可以是255
DELAY:MOV R7,#10 ;1
MOV R6,#100 ;10*1
MOV R5,#200 ;10*100*1
DJNZ R5, $ ; 10*100*200*2
DJNZ R6, $ - 4 ;10*100*2
DJNZ R7, $ - 8 ;10*2
RET ;2
Total=1+10*1+10*100*1+10*100*200*2+10*100*2+10*2+2=403033微秒
③ 51單片機delay延時
通常這個延時函數所能帶的參數為兩位元組的,超出這個范圍的參數值就無效了;
所以,不是你想要什麼數值都可以的。
④ 51單片機C語言中delay函數是怎麼定義和使用的
delay函數是一般自己定義的一個延時函數。
c語言定義延時函數主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函數。
// 定義一個延時xms毫秒的延時函數
void delay(unsigned int xms) // xms代表需要延時的毫秒數
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
⑤ 51單片機delay()函數
delay函數是一般自己定義的一個延時函數。
C語言定義延時函數主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函數。
// 定義一個延時xms毫秒的延時函數
void delay(unsigned int xms) // xms代表需要延時的毫秒數
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
⑥ 51單片機C語言中delay函數是怎麼定義和使用的
定義一個延時xms毫秒的延時函數
void delay(unsigned int xms) // xms代表需要延時的毫秒數
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延時值-1.75)*12/Ms-15]/4
1、在C51中進行精確的延時子程序設計時,盡量不要或少在延時子程序中定義局部變數,所有的延時子程序中變數通過有參函數傳遞。
2、在延時子程序設計時,採用do…while,結構做循環體要比for結構做循環體好。
3、在延時子程序設計時,要進行循環體嵌套時,採用先內循環,再減減比先減減,再內循環要好。
⑦ 單片機delay的用法
void delay(int z) //延時函數
{
int x,y; //定義兩16位無符號變數
for(x=0;x<125;x++) //從X=0開始,直到X=125,執行
for(y=0;y<z;y++); //從Y=0開始,直到Y=Z
}
⑧ 單片機:delay(100)是什麼意思啊
delay通常是延時程序,其參數為100,一般這個參數都是delay基本延時的倍數,也就是100倍,至於基本延時時長需要給出具體程序,例如:
delay(int time)
{ int i;
for (i=0;i<time;i++);
}
(8)單片機delay擴展閱讀:
函數名: delay
功 能: 將程序的執行暫停一段時間(毫秒)
(該函數是TC下特有的函數,VC下應使用Sleep()函數)
用 法: void delay(unsigned milliseconds);
單片機在電子技術中的開發,主要包括CPU開發、程序開發、 存儲器開發、計算機開發及C語言程序開發,同時得到開發能夠保證單片機在十分復雜的計算機與控制環境中可以正常有序的進行。
⑨ 請問單片機中的delay()的單位時間是什麼
單片機中的delay()的單位時間不是系統提供的,而是用戶自己編制的。
如果用循環語句實現的循環,沒法計算,但是可以通過軟體模擬看到具體時間,但是一般精精確延時是沒法用循環語句實現的。
如果想精確延時,一般需要用到定時器,延時時間與晶振有關系,單片機系統一般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第一種更容易產生各種標準的波特率,後兩種的一個機器周期分別為1 μs和2 μs,便於精確延時。本程序中假設使用頻率為12 MHz的晶振。
最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值佔用2個機器周期)。
(9)單片機delay擴展閱讀
單片機C語言程序中延時函數delay的原理是:僅僅執行一些,沒有實質性影響的所謂「無意義指令」,比如做比大小啊,做某個int的自加運算啊之類的。
單片機的有些程序需要調用延時程序,合理的安排循環次數以及空操作的個數方法:用匯編的話就根據你的當前晶振頻率去推算你的指令周期,然後結合需要延遲的時間。
編寫延遲程序,用C的話還是要看最後生成的匯編碼是什麼樣的了。最簡單的方法就是寫好程序以後再編譯器里軟模擬看時間。
單片機C語言延時需注意的問題:
標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在匯編語言中很容易實現,寫幾個nop就行了。
在keil C51中,直接調用庫函數:
#include // 聲明了void _nop_(void);
_nop_(); // 產生一條NOP指令
作用:對於延時很短的,要求在us級的,採用「_nop_」函數,這個函數相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。對於延時比較長的,要求在大於10us,採用C51中的循環語句來實現。
⑩ 51單片機c語言延時函數 Void delay 1ms(unsigned int ms){un
C程序中可使用不同類型的變數來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變數。 以某晶振為12MHz的單片機為例,晶振為12MHz即一個機器周期為1us。
void delay_ms(unsigned int ms_number) // ms延時函數 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a<?;a++)
for(b=0;b<?;b++)
for(c=0;c<?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
拓展資料
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。