MSP430的軟硬件C延時程序設(shè)計
發(fā)布時間:2008/6/3 0:00:00 訪問次數(shù):1137
    
    
    來源:單片機(jī)及嵌入式系統(tǒng)應(yīng)用 作者:太原理工大學(xué) 賀虎 秦建敏
    
    msp430是超低功耗16位單片機(jī),越來越受到電子工程師親睞并得到廣泛應(yīng)用。c程序直觀,可讀性好,易于移植和維護(hù),已被很多單片機(jī)編程人員所采用。msp430集成開發(fā)環(huán)境(如iar embedded workbench和aq430)都集成了c編譯器和c語言級調(diào)試器c—spy。但是c語言難以實現(xiàn)精確延時,這一直困擾著很多msp430單片機(jī)程序員。筆者在實際項目開發(fā)過程中,遇到很多需要嚴(yán)格時序控制的接口器件,如單總線數(shù)字溫度傳感器dsl8820、實時時鐘芯片pcf8563(需要用普通]/o模擬12c總線時序)、三線制數(shù)字電位器ad8402、cf卡(compact flash card)等都需要μs級甚至納ns級精確延時;而一些慢速設(shè)備只需要ms到s級的延時。為此,筆者提出了適合于不同延時級別需要的軟件或硬件精確延時方法,并已實際應(yīng)用,效果良好,大大縮短了開發(fā)周期。
    
    1 硬件延時
    
    msp430單片機(jī)系統(tǒng)程序多采用事件驅(qū)動機(jī)制,即在沒有外部事件觸發(fā)的情況下cpu休眠于低功耗模式中。當(dāng)外部事件到來時,產(chǎn)生中斷激活cpu,進(jìn)入相應(yīng)的中斷服務(wù)程序(isr)中。中斷響應(yīng)程序只完成兩個任務(wù),一是置位相應(yīng)事件的標(biāo)志,二是使mcu退出低功耗模式。主程序負(fù)責(zé)使mcu在低功耗模式和事件處理程序之間切換,即在主程序中設(shè)一個無限循環(huán),系統(tǒng)初始化以后直接進(jìn)入低功耗模式。mcu被喚醒后,判斷各標(biāo)志是否置位。如果是單一標(biāo)志置位,那么mcu執(zhí)行相應(yīng)的事件處理程序,完成后轉(zhuǎn)入低功耗模式;若是有多個標(biāo)志同時置位,主程序按照事先排好的消息隊列對它們依次判別并進(jìn)行處理,所有事件處理完畢以后mcu休眠,系統(tǒng)進(jìn)入低功耗狀態(tài)(該消息隊列的順序是按照任務(wù)的重要性設(shè)定的優(yōu)先級)。在這種前后臺系統(tǒng)中,由于主程序是無限循環(huán),就必須關(guān)閉看門狗,與其閑置,不如用其定時器的功能作硬件延時。使用msp430單片機(jī)看門狗定時器實現(xiàn)任意時長精確延時,既滿足了系統(tǒng)實時低功耗的要求,也彌補(bǔ)了使用無限循環(huán)延時的時間難確定和占用cpu時間長的缺點。通過下例,講解在同一wdt isr中完成不同時長延時的技巧。
    
     #pragma vector=wd_r_vector
    
     interrupt void wdt_delay(void){
    
    //看門狗中斷服務(wù)程序
    
    if((delaytime&delay500ms)==delay500ms){
    
    //判斷需要500 ms延時的標(biāo)志是否置位
    
    static unsigned int n250ms=o;
    
    n250ms++;
    
    if(n250ms==2){//延時250ms×2=500ms
    
     n250ms=0;//清零計數(shù)器
    
     delaytime&=~delay500ms;//復(fù)位標(biāo)志位
    
    wdtctl=wdthold+wdtpw;
    
    1el&=~wdtle;//關(guān)閉看門狗定時器并禁止其中斷
    
     }
    
    }
    
    if((delaytime&delay30s)==delay30s){
    
    //判斷需要的30 s延時標(biāo)志是否置位
    
    static unsigned int ns=0;
    
    ns++;
    
    if(ns==30){//延時1 s×30=30 s
    
    ns=0;//清零計數(shù)器
    
    delaytime&=~delay30s;//復(fù)位標(biāo)志位
    
    wdtctl=wdthold+wdtpw;
    
    iel&=~wdtle; //關(guān)閉看門狗定時器并禁止其中斷
    
    }
 
    
    
    來源:單片機(jī)及嵌入式系統(tǒng)應(yīng)用 作者:太原理工大學(xué) 賀虎 秦建敏
    
    msp430是超低功耗16位單片機(jī),越來越受到電子工程師親睞并得到廣泛應(yīng)用。c程序直觀,可讀性好,易于移植和維護(hù),已被很多單片機(jī)編程人員所采用。msp430集成開發(fā)環(huán)境(如iar embedded workbench和aq430)都集成了c編譯器和c語言級調(diào)試器c—spy。但是c語言難以實現(xiàn)精確延時,這一直困擾著很多msp430單片機(jī)程序員。筆者在實際項目開發(fā)過程中,遇到很多需要嚴(yán)格時序控制的接口器件,如單總線數(shù)字溫度傳感器dsl8820、實時時鐘芯片pcf8563(需要用普通]/o模擬12c總線時序)、三線制數(shù)字電位器ad8402、cf卡(compact flash card)等都需要μs級甚至納ns級精確延時;而一些慢速設(shè)備只需要ms到s級的延時。為此,筆者提出了適合于不同延時級別需要的軟件或硬件精確延時方法,并已實際應(yīng)用,效果良好,大大縮短了開發(fā)周期。
    
    1 硬件延時
    
    msp430單片機(jī)系統(tǒng)程序多采用事件驅(qū)動機(jī)制,即在沒有外部事件觸發(fā)的情況下cpu休眠于低功耗模式中。當(dāng)外部事件到來時,產(chǎn)生中斷激活cpu,進(jìn)入相應(yīng)的中斷服務(wù)程序(isr)中。中斷響應(yīng)程序只完成兩個任務(wù),一是置位相應(yīng)事件的標(biāo)志,二是使mcu退出低功耗模式。主程序負(fù)責(zé)使mcu在低功耗模式和事件處理程序之間切換,即在主程序中設(shè)一個無限循環(huán),系統(tǒng)初始化以后直接進(jìn)入低功耗模式。mcu被喚醒后,判斷各標(biāo)志是否置位。如果是單一標(biāo)志置位,那么mcu執(zhí)行相應(yīng)的事件處理程序,完成后轉(zhuǎn)入低功耗模式;若是有多個標(biāo)志同時置位,主程序按照事先排好的消息隊列對它們依次判別并進(jìn)行處理,所有事件處理完畢以后mcu休眠,系統(tǒng)進(jìn)入低功耗狀態(tài)(該消息隊列的順序是按照任務(wù)的重要性設(shè)定的優(yōu)先級)。在這種前后臺系統(tǒng)中,由于主程序是無限循環(huán),就必須關(guān)閉看門狗,與其閑置,不如用其定時器的功能作硬件延時。使用msp430單片機(jī)看門狗定時器實現(xiàn)任意時長精確延時,既滿足了系統(tǒng)實時低功耗的要求,也彌補(bǔ)了使用無限循環(huán)延時的時間難確定和占用cpu時間長的缺點。通過下例,講解在同一wdt isr中完成不同時長延時的技巧。
    
     #pragma vector=wd_r_vector
    
     interrupt void wdt_delay(void){
    
    //看門狗中斷服務(wù)程序
    
    if((delaytime&delay500ms)==delay500ms){
    
    //判斷需要500 ms延時的標(biāo)志是否置位
    
    static unsigned int n250ms=o;
    
    n250ms++;
    
    if(n250ms==2){//延時250ms×2=500ms
    
     n250ms=0;//清零計數(shù)器
    
     delaytime&=~delay500ms;//復(fù)位標(biāo)志位
    
    wdtctl=wdthold+wdtpw;
    
    1el&=~wdtle;//關(guān)閉看門狗定時器并禁止其中斷
    
     }
    
    }
    
    if((delaytime&delay30s)==delay30s){
    
    //判斷需要的30 s延時標(biāo)志是否置位
    
    static unsigned int ns=0;
    
    ns++;
    
    if(ns==30){//延時1 s×30=30 s
    
    ns=0;//清零計數(shù)器
    
    delaytime&=~delay30s;//復(fù)位標(biāo)志位
    
    wdtctl=wdthold+wdtpw;
    
    iel&=~wdtle; //關(guān)閉看門狗定時器并禁止其中斷
    
    }
 
熱門點擊
- 利用單片機(jī)I/O口直接驅(qū)動LCD
- MSP430的軟硬件C延時程序設(shè)計
- 8051單片機(jī)中DPTR的擴(kuò)展設(shè)計
- 利用SoC單片機(jī)的多功能數(shù)據(jù)采集卡
- 基于單片機(jī)通用引腳的軟件UART設(shè)計
- C8051F020的音頻峰值采集和網(wǎng)絡(luò)傳送
- 數(shù)字圖像盲水印算法與LDPC碼的聯(lián)合方案
- 用SPMC75F2313A實現(xiàn)LIN結(jié)點
- 基于SVM和sigmoid函數(shù)的字符識別自適
- 小尺寸單片機(jī)在便攜式設(shè)備中的應(yīng)用
推薦技術(shù)資料
- AMOLED顯示驅(qū)動芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計
- GB300 超級芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究