我采用的是mega8的單片機,晶振配置為11.0592MHz,編譯器采用的是ICC AVR 7.2,軟體延時用示波器測驗過,代碼如下:
ms級的延時比較精確,us級的延時略大,100us時比較誤差在小數位。
/*******************************************
函式名稱: delay_ms
功 能: 延時指定毫秒(11.592M晶振)編譯器ICCAVR7.2
參 數: MS--延時的毫秒數
回傳值 : 無
/********************************************/
void delay_ms(unsigned int ms)
{
unsigned int i = 0;
unsigned int j = 0;
for( i=0;i<ms;i++)
{
for(j=0;j<1578;j++)
{
//asm("nop"); //1578是在11.0592MHz晶振下,通過軟體仿真反復實驗得到的數值
}
}
}
/*******************************************
函式名稱: Delay_us
功 能: 延時指定微秒(11.0592M晶振),編譯器ICCAVR7.2
參 數: US--延時的微秒數(大約,不是很精確,MS越大越準確)
回傳值 : 無
/********************************************/
void delay_us(unsigned int us)
{
unsigned int time = 0;
for(time=1; time<us; time++)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
uj5u.com熱心網友回復:
可以使用IAR的系統延時函式,還是比較準的uj5u.com熱心網友回復:
是 的。只是IAR不熟悉,專案又著急,暫時用ICC湊合的用用。uj5u.com熱心網友回復:
ms 的可以用中斷來干了,提升效率轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/119816.html
標籤:單片機/工控
上一篇:數字邏輯電路課程設計,在線求教
