8051單片機精確延時程序
delay(t)表示延時t ms;
也可以通過定時器中斷的方式來延時,但是每次延時的時間非常有限,對于11.0592MHz的晶振,每次中斷延時只有約71ms.
延時函數(shù)
void delay(unsigned int t)//延時t ms
{
TMOD=0x01;//設置工作模式
TR0=1;
ET0=0x00;//禁止定時中斷
while(t!=0)//循環(huán)次數(shù)t
{
TH0=0xFC;
TL0=0x66;//設置計數(shù)初值
while(TF0!=1);//查詢計數(shù)器溢出標志位
TF0=0;//溢出后清零
t--;
}
}
此外,還用excel制作了一個計算計數(shù)初值的的小工具,輸入晶振和需要延時的最小單位,就自動計算出計算初值,并轉(zhuǎn)換為16進制(用DEC2HEX函數(shù))
各種教材都喜歡用for循環(huán)再嵌套一個for循環(huán)來實現(xiàn)延時,下列是通過定時器來延時;
delay(t)表示延時t ms;
也可以通過定時器中斷的方式來延時,但是每次延時的時間非常有限,對于11.0592MHz的晶振,每次中斷延時只有約71ms.
延時函數(shù)
void delay(unsigned int t)//延時t ms
{
TMOD=0x01;//設置工作模式
TR0=1;
ET0=0x00;//禁止定時中斷
while(t!=0)//循環(huán)次數(shù)t
{
TH0=0xFC;
TL0=0x66;//設置計數(shù)初值
while(TF0!=1);//查詢計數(shù)器溢出標志位
TF0=0;//溢出后清零
t--;
}
}
此外,還用excel制作了一個計算計數(shù)初值的的小工具,輸入晶振和需要延時的最小單位,就自動計算出計算初值,并轉(zhuǎn)換為16進制(用DEC2HEX函數(shù))
評論