清除中断标志的问题

[复制链接]
2035|7
 楼主| chen3bing 发表于 2012-9-30 11:55 | 显示全部楼层 |阅读模式
我用VALUE LINE开发板调试程序,程序如下:
#include<msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW+WDTHOLD;         //设置密码位,禁止看门狗
P1DIR=0X41;                     //P1.6输出
P1OUT=0X01;
BCSCTL3|=LFXT1S_0+XCAP_3;              //使能晶体时钟LFXT1,12.5pF
//IFG1&=~OFIFG;                  //清掉时钟故障标志
while(IFG1&OFIFG)
{
  IFG1&=~OFIFG;
  _delay_cycles(100000);
}
P1OUT=0;
_bis_SR_register(SCG1+SCG0);     //置位SCG1,SCG0,关掉DCO时钟产生,关掉SMCLK
BCSCTL2|=SELM_3+DIVM_3;         //选择LFXT1CLK作为时钟源,8分频
while(1)
{
  P1OUT=0X40;
  _delay_cycles(5000);
  P1OUT=0;
  _delay_cycles(5000);
}
}
发现在while循环处死循环,OFIFG标志位清不掉。
这是什么情况,请高手赐教。谢谢!
 楼主| chen3bing 发表于 2012-9-30 13:11 | 显示全部楼层
高手支招啊!
hawksabre 发表于 2012-9-30 17:56 | 显示全部楼层
while(1)
{
  P1OUT=0X40;
  _delay_cycles(5000);
  P1OUT=0;
  _delay_cycles(5000);
}
你这句话根本就没有跳出循环的条件   

while(1)
任何情况下都是真   当然是死循环    自己在写循环式  必须要有跳出循环的条件   一直为真写循环语句的大忌
hawksabre 发表于 2012-9-30 17:57 | 显示全部楼层
你再看看  别人的意见   这只是我的个人看法   希望对你有所帮助  呵呵
 楼主| chen3bing 发表于 2012-9-30 18:06 | 显示全部楼层
while(IFG1&OFIFG)
{
  IFG1&=~OFIFG;
  _delay_cycles(100000);
}
楼上,我是说上面这个while循环呀!
lzbq 发表于 2012-9-30 18:39 | 显示全部楼层
坐等指教。
 楼主| chen3bing 发表于 2012-9-30 21:11 | 显示全部楼层
就这么沉下去了吗?
芳草萋萋 发表于 2013-2-21 20:48 | 显示全部楼层
我今天也遇到了,TI官方原代码如下,我仿真试了,死活跳不出循环!只要一打开XT1 OFIFG就自动置位了,死活请不了!百死不得其解!
WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT

  P7SEL |= 0x03;                            // Select XT1
  UCSCTL6 &= ~(XT1OFF);                     // XT1 On
  UCSCTL6 |= XCAP_3;                        // Internal load cap

  // Loop until XT1,XT2 & DCO stabilizes
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2538

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0