『壹』 51單片機中,寫個延時函數,延時1ms,該怎麼寫,為什麼
用匯編語言寫可以精確計算,但有時想拼出整數的ms或10ms也不容易,計算方法如下圖說明:
而C語言靠經驗和實驗得來的,如下面程序
如果不準(與晶振頻率有關),調K的值,,軟體模擬查看,直到大致准確,想更精確用定時器
void delay(unsigned char i)//延時程序
{
unsigned chari,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
『貳』 51單片機延時一秒函數,晶振12MHZ
我這有個函數自己實驗出來的,在KEIL里看差不多就是延時1毫秒
void delay1ms(unsigned int t)
{
unsigned x,y;
for(x=t;x>0;x--)
for(y=124;y>0;y--);
}
把t 改為你要延時的數就可以了,1毫秒就把t改為1 500毫秒就把t改為500
『叄』 單片機延時1s怎麼實現
單片機常用的編程語言有匯編語言、C語言等。以下是使用匯編語言實現延時1s的程序:
以上程序中,使用了一個8位計數器來實現延時功能。由於單片機晶振頻率為12MHz,每個指令需要執行12/4=3個機器周期(其中4代表指令周期),因此可以通過調整計數器初值來實現不同的延時時間。
具體計算過程如下:
每個指令需要執行3個機器周期;
延時1s需要多少個指令周期?答案是12,000,000(晶振頻率)/3(每個指令周期需要的機器周期)=4,000,000(每秒鍾可以執行的指令周期數),因此需要執行4,000,000條指令才能完成1秒的延時;
因為每個指令需要執行3個機器周期,所以需要執行4,000,000/3=1,333,333條指令才能完成1秒的延時;
計數器初值可以通過以下公式計算:計數器初值 = 256 - 延時所需指令數 + 2。因此,計數器初 1,333,333 + 2 = 0x0F。
以上程序中使用了一個8位計數器,所以最大可以延時255個機器周期(即85ms左右)。如果需要更長的延時時間,可以使用16位計數器或者多次調用延時函數來實現。
『肆』 51單片機求10微秒的延時函數 C語言(晶振11.0592MHz)
1、下面幾個是單片機的延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。
2、軟體延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV
72H,#100
LOOP3:MOV
71H,#100
LOOP1:MOV
70H,#47
LOOP0:DJNZ
70H,LOOP0
NOP
DJNZ
71H,LOOP1
MOV
70H,#46
LOOP2:DJNZ
70H,LOOP2
NOP
DJNZ
72H,LOOP3
MOV
70H,#48
LOOP4:DJNZ
70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延時0.5秒
AJMP
DELAY
DELAY2:MOV
R7,#14H
;;晶振12MHZ,延時1秒
DELAY:CLR
EX0
MOV
TMOD,#01H
;設置定時器的工作方式為方式1
MOV
TL0,#0B0H
;給定時器設置計數初始值
MOV
TH0,#3CH
SETB
TR0
;開啟定時器
HERE:JBC
TF0,NEXT1
SJMP
HERE
NEXT1:MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
R7,HERE
CLR
TR0
;定時器要軟體清零
SETB
EX0
RET
3、C語言延時程序:
10ms延時子程序(12MHZ)
void
delay10ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序:
(12MHZ)
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--);
}
『伍』 52單片機C語言中「Delay」是什麼意思,怎麼用
一般延時1ms的程序是:
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=120;i>0;i--);
}
}
那麼當你在別的函數中用到Delay(10000);就是延時10000ms,也就是10S
『陸』 求51單片機 延時1秒鍾的子程序(沒什麼要求)
如果使用的是11.0592MHz的晶振,那麼編寫延時子程序的方式可以如下所示:
void delay(uint xms) { int i,j; for(int i=xms;i>0;i--) for(j=148;j>0;j--); }
在上述代碼中,delay(1)代表延時1毫秒(ms),因此要實現1秒的延時,只需調用delay(1000)。這種方法基於內部循環和固定值148的外部循環來實現延時。
值得注意的是,這個延時函數的具體實現可能需要根據實際情況進行調整,以確保准確的延時時間。例如,148這個數值是基於特定晶振頻率計算得出的,如果晶振頻率不同,這個值也需要相應調整。
此外,如果你對延時子程序的編寫有更多疑問或需要進一步的幫助,可以隨時提問。
在實際應用中,這種簡單的延時方法可能不夠精確,特別是在需要高精度延時的情況下。為了提高延時的准確性,可以考慮使用更復雜的方法,如使用定時器中斷等。
如果你在編寫延時子程序時遇到困難或想要了解更多信息,不妨詳細描述你的問題,以便得到更具體的幫助。
『柒』 51單片機C語言中delay函數是怎麼定義和使用的
在51單片機的C語言編程中,我們經常需要使用延時函數來控製程序的執行速度。延遲函數通常由程序員自己編寫,其核心思想是通過執行無意義的指令來實現時間上的延遲。這是一種簡單且常見的方法,特別是在硬體資源有限的環境下。
下面,我們來探討一個經典的延時函數的實現方式。這個函數的目的是根據給定的毫秒數來產生相應的延遲。具體實現如下:
// 定義一個延時xms毫秒的延時函數
void delay(unsigned int xms) // xms代表需要延時的毫秒數
{
unsigned int x, y;
for(x = xms; x > 0; x--)
for(y = 110; y > 0; y--);
}
在這個函數中,主要包含了兩個嵌套的for循環。外部的循環變數x用於控制總的延遲時間,內部的循環變數y則用於細化每個時間單位內的延遲。通過這種方式,我們可以根據不同的需求調整延時的具體時長。
需要注意的是,這個延時函數的具體延遲時間依賴於單片機的時鍾頻率和編譯器的優化設置。在實際應用中,為了獲得更准確的延時,可能需要對循環次數進行適當的調整。
此外,這個延時函數適用於那些對延遲時間要求不是特別嚴格的應用場景。對於需要極高精度延時的應用,可能需要採用更復雜的方法,例如使用定時器中斷等。
綜上所述,通過簡單的循環結構,我們可以實現一個基本的延時功能,這對於許多小型嵌入式項目來說已經足夠。
『捌』 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)以及超級電腦等作業平台。
『玖』 (51單片機)那個大佬給講解一下這個延時函數
在C51程序中,我們常會使用宏定義來簡化代碼,比如將定義為unsigned int。這里有一個16位整型的形參變數,它實際上是一個宏定義的結果,而非C51固有的變數類型。
延時函數的基本原理是利用循環體來實現的,具體來說,就是使用while循環,通過變數自減,直到其值變為0,循環結束。這樣的操作會消耗一定的時間,從而達到延時的效果。
延時函數通常的實現方式是這樣的:
c
while(i--);
這里的`i--`表示將變數`i`減1,然後判斷`i`是否等於0,如果不等於0,則繼續循環。這個過程會重復執行直到`i`減至0,循環結束,整個過程就是一次延時。
需要注意的是,延時的時間長短取決於循環體內代碼的執行速度,如果循環體內的操作越多,延時時間就越長。因此,我們可以通過調整循環體內的操作來控制延時的長短。
總結來說,通過利用循環來實現延時,是C51編程中常見的技術手段之一。