標(biāo)題:
MSP430單片機臨界代碼
[打印本頁]
作者:
51hei單片
時間:
2016-3-14 19:54
標(biāo)題:
MSP430單片機臨界代碼
本程序是《MSP430系列單片機系統(tǒng)工程設(shè)計與實踐》書里面的源碼,(包含工程文件(例3.9.10) )完整例程下載:
http://www.torrancerestoration.com/bbs/dpj-46245-1.html
關(guān)于本程序的詳細(xì)解說大家可以點擊上圖下載電子書
#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) // 只對最外層操作。
{
SR_Val=__get_SR_register(); // 保存當(dāng)前中斷狀所在的態(tài)寄存器
_DINT(); // 關(guān)中斷
}
DINT_Count ++; // 嵌套層數(shù)計數(shù)+1
}
void ExitCritical() /*退出臨界代碼區(qū)*/
{
DINT_Count--; // 嵌套層數(shù)計數(shù)-1
if((DINT_Count==0)&&(SR_Val & GIE)) _EINT(); // 只對最外層操作。
} // 根據(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; // 才會執(zhí)行到這一句(亮燈)
}
}
}
#pragma vector = BASICTIMER_VECTOR // BasicTimer定時器中斷(1/4秒)
__interrupt void BT_ISR(void) //
{
Flag^=1;
if(Flag) Val=123.4; // Val在123.4與56.78之間切換
else Val=56.78;
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1