|
本程序是《MSP430系列單片機(jī)系統(tǒng)工程設(shè)計(jì)與實(shí)踐》書里面的源碼,(包含工程文件(例3.9.10) )完整例程下載:http://www.torrancerestoration.com/bbs/dpj-46245-1.html

關(guān)于本程序的詳細(xì)解說大家可以點(diǎn)擊上圖下載電子書
- #include <msp430x42x.h>
- float Val=123.4;
- char Flag=0;
- unsigned int SR_Val;
- unsigned char DINT_Count=0;
- void EnterCritical() /*進(jìn)入臨界代碼區(qū)*/
- {
- if(DINT_Count==0) // 只對(duì)最外層操作。
- {
- SR_Val=__get_SR_register(); // 保存當(dāng)前中斷狀所在的態(tài)寄存器
- _DINT(); // 關(guān)中斷
- }
- DINT_Count ++; // 嵌套層數(shù)計(jì)數(shù)+1
- }
- void ExitCritical() /*退出臨界代碼區(qū)*/
- {
- DINT_Count--; // 嵌套層數(shù)計(jì)數(shù)-1
- if((DINT_Count==0)&&(SR_Val & GIE)) _EINT(); // 只對(duì)最外層操作。
- } // 根據(jù)保存的狀態(tài)恢復(fù)中斷
- /*
- void EnterCritical(unsigned int *SR_Val)
- {
- *SR_Val = __get_SR_register();//保存中斷狀態(tài)
- _DINT();
- }
- void ExitCritical(unsigned int *SR_Val)
- {
- if(*SR_Val & GIE) _EINT(); //恢復(fù)中斷狀態(tài)
- }
- */
- void main( void )
- { float Temp;
- unsigned int GIE_Val;
- WDTCTL= WDTPW +WDTHOLD;
- P2OUT=0;
- P2DIR|=BIT0; // P2.0指示燈
- BTCTL = BT_ADLY_250; // 中斷周期250ms
- IE2 |= BTIE; // 允許BasicTimer中斷
- _EINT(); // 允許總中斷
- while(1)
- {
- EnterCritical();
- Temp=Val;
- ExitCritical();
- if((Temp!=123.4)&&(Temp!=56.78)) //如果既非123.4也非56.78
- {
- P2OUT|=BIT0; // 才會(huì)執(zhí)行到這一句(亮燈)
- }
- }
- }
- #pragma vector = BASICTIMER_VECTOR // BasicTimer定時(shí)器中斷(1/4秒)
- __interrupt void BT_ISR(void) //
- {
- Flag^=1;
- if(Flag) Val=123.4; // Val在123.4與56.78之間切換
- else Val=56.78;
- }
復(fù)制代碼
|
|