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