天天看點

MSP430 實作精準延時

對于大多數單片機我們在進行操作時都需要一定的延時

對于51系列常使用_NOP_( );指令進行1us延時或者更簡單粗暴一些直接使用for循環for(i=0;i<1000;i++)做一MS的延時

大多數的單片機執行+1運算時間為1US,但是這種延時并不準确

下面實作精準延時

IAR 軟體430的編譯器裡面我們可以利用它内部的延時子程式來實作我們想要的高精度軟體延時,方法如下:

(1):将以下這段代碼複制到你的.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))

(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(100),就延時100個時鐘周期.

使用者指導手冊

晶片管腳手冊

推薦教學視訊

https://www.bilibili.com/video/BV1cE411Z79d?from=search&seid=15656799615629348503

https://www.bilibili.com/video/BV1rE41167yG?from=search&seid=6968580456886645765

MSP430 C語言例程

連結:https://pan.baidu.com/s/1z-q4JGVUzTmJrgeurAExYw

提取碼:t2qa

連結:https://pan.baidu.com/s/12bALa0_v6j4bAIcULMtzJQ

提取碼:0xv9

TI官網提供例程

連結:https://pan.baidu.com/s/1GBXAUFL5opM9LbreQ7zsNw

提取碼:1gn6