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