當前位置:首頁 » 編程語言 » 單片機c語言延時程序

單片機c語言延時程序

發布時間: 2023-06-06 14:59:23

① 用c語言怎麼在單片機AT89C51上編寫一個延時10秒的程序

1、十秒對於單片機來說是很長很長的時間了,單片機十秒的時間什麼事都不能做,只在跑這延時程序,那是什麼概念,用中斷的話,單片機正常運行其他程序,只是時間到了才過來處理延時以後的程序,效率不知道高了多少 。

2、常式:

//假設晶振12MHZ

#include"reg51.h"
unsignedintYSJS=0;
voidmain(void)
{
TMOD|=0X10;//定時器1工作於方式1,16位定時器
TH1=0XFF;//定時器1定時時間=500uS
TL1=0X06;
ET1=1;//使能定時器1中斷
EA=1;//開總中斷
while(1)
{
}
}
voidTIMER1(void)interrupt3//定時器1中斷函數使用默認寄存器組
{
TH1=0XFF;//定時器1定時時間=500us
TL1=0X06;
YSJS++;
if(YSJS==20000)//500uS*20000=10000000us=10s
{
P1=P1^0X01;//P1.0十秒鍾翻轉一次
YSJS=0
}
}

② 單片機c語言的延時程序500ms

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

③ 51單片機用c語言怎麼寫延時函數

延時時間的計算與單片機的晶振頻率有關。若晶振頻率為12Mhz,那麼單片機每震動一次所需要的時間是1/12M s。那麼再來看看單片機執行一次自減所需要的振動次數是96次,假如我們對時間要求不是特別精確的話,可以約等於100來計算。現在通過上面兩個數據可以得出:單片機每執行一次自減所需要的時間是1/12M *100(s),即1/120000 s,逆向計算一下,每1ms需要自減多少次?120次對吧。所以一個簡單的延時功能就誕生了,我們只需要自減120次,就可以延時1ms,如果我們要延時50ms呢,那就自減50*120=6000次。那麼在程序上如何表達呢?我們可以用兩套for循環
void delay(int i){
int x,y;
for(x=i;x>0;x--){
for(y=120;y>0;y--)
}
}
參數 i 代表該函數延時多少ms

④ 單片機C語言延遲程序

下面的延時的基本程序(中斷加計數器)
********
void
T0_int(void)
interrupt
1
{

TH0
=
0x4C;
//重新裝載,50MS定時器初值

TL0
=
0x00;

T0_count++;

if(T0_count==20)
//1S到

{

T0_count
=
0;

//在這寫程序

}
}
main()
{

TMOD
=
0x01;//定時器0,工作方式1,16位計數

TH0
=
0x4C;
//50MS定時器初值

TL0
=
0x00;

IE
=
0x82;
//開總中斷,開T0中斷

EA
=
1;

ET0
=
1;

TR0
=
1;

T0_count
=
0;

i
=
0;
loop:

goto
loop;
}
還有:
for(us=0;us<60;us++);
/*延時500us*/
for(us=0;us<1;us++);
/*
延時15微秒*/
for(us=0;us<5;us++);
/*
延時51微秒*/

⑤ 如何用單片機的delay實現延時

單片機中的delay()的單位時間不是系統提供的,而是用戶自己編制的。

如果用循環語句實現的循環,沒法計算,但是可以通過軟體模擬看到具體時間,但是一般精精確延時是沒法用循環語句實現的。

如果想精確延時,一般需要用到定時器,延時時間與晶振有關系,單片機系統一般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第一種更容易產生各種標準的波特率,後兩種的一個機器周期分別為1 μs和2 μs,便於精確延時。本程序中假設使用頻率為12 MHz的晶振。

最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值佔用2個機器周期)。

(5)單片機c語言延時程序擴展閱讀

單片機C語言程序中延時函數delay的原理是:僅僅執行一些,沒有實質性影響的所謂「無意義指令」,比如做比大小啊,做某個int的自加運算啊之類的。

單片機的有些程序需要調用延時程序,合理的安排循環次數以及空操作的個數方法:用匯編的話就根據你的當前晶振頻率去推算你的指令周期,然後結合需要延遲的時間。

編寫延遲程序,用C的話還是要看最後生成的匯編碼是什麼樣的了。最簡單的方法就是寫好程序以後再編譯器里軟模擬看時間。

單片機C語言延時需注意的問題:

標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在匯編語言中很容易實現,寫幾個nop就行了。

在keil C51中,直接調用庫函數:

#include // 聲明了void _nop_(void);

_nop_(); // 產生一條NOP指令

作用:對於延時很短的,要求在us級的,採用「_nop_」函數,這個函數相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。對於延時比較長的,要求在大於10us,採用C51中的循環語句來實現。

熱點內容
吃解壓東西 發布:2025-02-14 08:28:02 瀏覽:767
beam文件夾 發布:2025-02-14 08:27:18 瀏覽:6
崩壞2在哪裡修改密碼 發布:2025-02-14 08:27:15 瀏覽:589
編程易經公司 發布:2025-02-14 07:59:22 瀏覽:598
編譯器出錯類型分為哪些類型 發布:2025-02-14 07:59:15 瀏覽:622
手機系統升級腳本出錯 發布:2025-02-14 07:45:13 瀏覽:821
螺絲存儲架 發布:2025-02-14 07:38:43 瀏覽:10
gtgj文件夾 發布:2025-02-14 07:28:19 瀏覽:427
貨幣交易源碼 發布:2025-02-14 07:25:04 瀏覽:67
應用ip地址寫死更換了伺服器 發布:2025-02-14 07:24:59 瀏覽:25