日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 注意: __delay_cycles(x),x必須是常量或則是常量表達式,如果是變量則編譯報錯!在用單片機的時候常常會用到延時函數(shù),430也不例外,常見的形式有:void delay(unsigned int ms){unsigned int i,j;for

注意: __delay_cycles(x),x必須是常量或則是常量表達式,如果是變量則編譯報錯!

在用單片機的時候常常會用到延時函數(shù),430也不例外,常見的形式有:
void delay(unsigned int ms)
{
unsigned int i,j;

for( i=0;i
for(j=0;j<1141;j++); //8MHz晶振時
}

復(fù)制代碼//以上程序段在要求延時精度不高的場合可以用。

但在 IAR 軟件430的編譯器里面我們可以利用它內(nèi)部的延時子程序來實現(xiàn)我們想要的高精度軟件延時,方法如下:

(1):將以下這段代碼復(fù)制到你的.C源文件中。

#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

復(fù)制代碼(2):修改

在 #define CPU_F ((double)8000000) 語句里 8000000 修改成你當前MSP430 CPU的主頻頻率,即CPU的MCLK。

單位為HZ。本例中的8000000為MCLK=8MHZ 的意思。

(3):使用范例

delay_us(1); //1 微秒的延時

delay_ms(1); //1 毫秒的延時

delay_us(3.5); //延時3.5微秒

delay_ms(3.5); //延時3.5毫秒

delay_ms(1000); //延時1秒

原因:

__delay_cycles()是編譯系統(tǒng)"涵數(shù)",IAR編譯時會替換成相應(yīng)的循環(huán)代碼

看圖片,要求delay 100的指令(時鐘)周期,編譯后剛好100周期

結(jié)果是:(1+2)*33 + 1 = 100


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉