專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

精確延時(shí)整理(12T單片機(jī))

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月10日   【字體:

注:1.編譯軟件為"Keil uVision3"(Keil uVision2也試用)。用其他編譯軟件的話就不準(zhǔn)了。
       2.需要包含頭文件<intrins.h>
       3.所有函數(shù)的延時(shí)時(shí)間都是在12Mhz晶振下計(jì)算的,如用其他晶振需進(jìn)行換算。
       4.函數(shù)的執(zhí)行時(shí)間為“函數(shù)的參數(shù)”乘以精確到的時(shí)間。例如delayms(unsigned char n)函數(shù),其精確度為1ms,如果寫入語句delayms(4),那就是延時(shí)4ms。
       5.計(jì)算出來的延時(shí)時(shí)間不包括函數(shù)調(diào)用與返回的時(shí)間。如果函數(shù)的精確度較高,且參數(shù)較小,那么實(shí)際延時(shí)時(shí)間就可能與計(jì)算的時(shí)間差很遠(yuǎn)。
 
(1)精確到2us的延時(shí)(12MHz)
void delayus(unsigned char n)
{ while(--n);
}
 
(2)精確到100us的延時(shí)(12MHz)
void delay100us(unsigned char n) 
{ unsigned char i;
  for(;n;n--)
   { _nop_();
     for(i=46;i;i--);
   }
}
 
(3)精確的半毫秒延時(shí)函數(shù)(12MHz)
void delay1_2ms(unsigned char n)
{ unsigned char i;
  for(;n!=0;n--)
   { _nop_();
     for(i=246u;i!=0;i--);
   }
}
 
(4)精確的毫秒延時(shí)函數(shù)(12MHz)
void delayms(unsigned char n)
{ unsigned char i;
  for(;n!=0;n--)
   { for(i=248u;i!=0;i--);
     for(i=248u;i!=0;i--);
   }
}
 

關(guān)閉窗口