|
|
void Delay(unsigned int a)//0~65535
{
unsigned char b;for(;a>0;a--)
{
for
(b=110;b>0;b--); }
}
比如上邊這樣一個延時程序,
void Delay(unsigned int a)//0~65535 這里邊的unsigned int是無符號整數(shù)的意思,也就是a的取值范圍是0-65535
那么就可以按照需要在函數(shù)里寫void Delay(3)這樣的數(shù)字,這個數(shù)字的作用下邊說。
unsigned char b;這句是定義個無符號字符型的數(shù)字b
for(;a>0;a--) 這句,沒有寫a=幾這個初始值,因為是在上邊void Delay(unsigned int a)括號里給的,這里只要a比0大,那就-1,直到減到a=0
接下來的
for
(b=110;b>0;b--);
也是一樣的但是他在a-1的函數(shù)里,他是先給b個值110,然后只要b比0大,就做b-1的運算,直到a=0,于是上邊的程序就是
不斷的進行這樣的計算:
先看看a等不等于0,不等于那就a-1
然后
b-1=110 110-1=109 109-1= 108
一直這樣減到b=0也就是原地做了110次減法,單片機在這里運行110個周期,
然后b=0了又回去看a的值,
假如void Delay(unsigned int a) 這里a取值500
在主程序里延時子函數(shù)寫作:
void main(){
while(1)
{
LED1=0;//點亮
Delay(500);
LED1=1;
Delay(500);
}
};
那就是讓單片機做500次的110-1-1-1-1-1-1減到0的運算,
那么也就是機器自己原地玩了500 × 110 = 55000次,
如果單片機是12M的晶振,那單片機每秒鐘運行12M次,用這12M次除以55000次,就可以計算出他原地計算這么多次用的時間,也就是這個延時函數(shù)所能延遲的時間。
|
評分
-
查看全部評分
|