㈠ 單片機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微秒*/
㈡ 單片機中c編程的流水燈中關於延時~~~~
while(1)
{
delayms(250);
.......
.......
}調用延時函數給他傳遞一個250的參數、
當第一次執行時
ms=250,
執行250--時,此時執行:
for(i
=
0;
i
<
120;
i++);
直到i>=250時候才接下來執行
ms--(即249--);
也就是說
250每次自減
1
都要執行
120次
i++;
如果你把120
改成300
只是掃描時間變長了,也就是延時的更長了,可能第一個LED點亮時間比較長,影響了你的正常看現象。你等一段時間可能就會流動了。這個就是設置的問題。
㈢ 51單片機C語言程序中延時函數delay的原理是什麼
原理:只是執行一些所謂的「無實際意義的指令」,如縮放或執行一個int自加,簡單地說,就像高中數學中的「乘法原理」一樣,很容易迅速增加上面提到的「無意義指令」的數量
關於大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數情況下,程序員是經驗值。
當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數量的機器周期,你當然可以根據所有指令使用的總時間來計算特定延遲的總時間。
(3)單片機c延時擴展閱讀:
定義延遲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
㈣ 單片機C語言延時程序,如何計算延時時間(高分懸賞!!)代碼如下:
我記得keil裡面有時間的,好久不用了,單位好像是微秒吧!就是那個分步執行,按一下執行一步的..
比如前面那個箭頭指到你的調用函數delay(200);假設執行到此部用時1110。
按一下執行,箭頭指到下一「;」前的那一句了,如果此時用時顯示變成了1510,說明延時函數延時了400us
要注意選擇對的晶振頻率
㈤ 單片機c語言帶參數延時怎麼寫
在循環里判斷是否滿足跳出的條件,滿足則跳出循環,不滿足就繼續延時直到延時結束。
具體的條件要有程序的要求來,比如說某個io口的電平的狀態。
sbit
state=p1^7;
delay(uint)
{
uint
x,y;
for(x=1000;x>0;x--)
for(y=1200;y>0;y--)
{
if(state==1)
return
;//當p1.7口為高時跳出循環
}
}
//由於加入了一條語句,延時要重新計算
㈥ 單片機C語言編程關於延時函數
單片機的C語言關於延時函數主要有兩種
一種是用for循環,通過單片機執行空指令達到延時的目的
如:
for(i=0;i<100;i++)
{
;
}
這個簡單的語句會執行100次空指令
每一次指令的時間可以大概確定
因此這個是最簡單的延時函數
第二種是通過定時器的方式來實現
定時器是通過對單片機的晶振進行計數
然後在定時器中斷服務函數裡面實現定時時間的計算及設置
51單片機的定時器0中斷服務函數為
void
time0()
interrupt
1
{
...
}
㈦ 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語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(8)單片機c延時擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈨ 單片機C語言中怎麼實現微秒級延時
可以用_nop_( )函數來實現微秒級的延時。
_nop_();//直接當成一條語句使用,產生一條NOP指令
NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。
註:使用該函數時,需要將頭文件#include<intrins.h>包含進源文件中。