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