1348|1

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP430单片机临界代码 [复制链接]

#include

float Val=123.4;
char Flag=0;

unsigned int SR_Val;
unsigned char DINT_Count=0;
void EnterCritical()                                        /*进入临界代码区*/
{
if(DINT_Count==0)                                         // 只对最外层操作。
{
SR_Val=__get_SR_register();   // 保存当前中断状所在的态寄存器
_DINT();                                                // 关中断
              }
    DINT_Count ++;                                                // 嵌套层数计数+1
}

void ExitCritical()                                         /*退出临界代码区*/
{
  DINT_Count--;                                                // 嵌套层数计数-1
if((DINT_Count==0)&&(SR_Val & GIE)) _EINT();  // 只对最外层操作。
}                                                                                                  // 根据保存的状态恢复中断
/*

void EnterCritical(unsigned int *SR_Val)
{
   *SR_Val = __get_SR_register();//保存中断状态
   _DINT();
}

void ExitCritical(unsigned int *SR_Val)
{
   if(*SR_Val & GIE)   _EINT();  //恢复中断状态
}
*/


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;                   // 才会执行到这一句(亮灯)
     }   
   }
}

#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;
}

最新回复

虽然暂时看不懂,但是感觉很有用,谢谢楼主又让我知道了代码还有临界这种操作   详情 回复 发表于 2022-10-9 10:22
 
点赞 关注

回复
举报

4

帖子

1

TA的资源

一粒金砂(中级)

沙发
 

虽然暂时看不懂,但是感觉很有用,谢谢楼主又让我知道了代码还有临界这种操作

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表