|
本人这几天才接触MSP430,板子上芯片是MSP430F149,把书上一个例子稍作改动想用看门狗定时功能产生一个方波(周期性取反P1.0),下面是代码- #include <msp430x14x.h>
- void main(void)
- {
- unsigned int i ;
- WDTCTL = WDT_MDLY_8 ; //看门狗定时器定时周期设为8ms
- IE1 |= WDTIE ; //使能WDT中断
- P5DIR |= 0X10 ; //P5.4输出
- P5SEL |= 0X10 ; //P5.4用作MCLK输出
- P1DIR |= 0X01 ; //P1.01输出
- BCSCTL1 &= ~XT2OFF ; //xt2有效
- do
- {
- IFG1 &= ~OFIFG ; //清除振荡器失效标志
- for(i = 0xff ; i > 0; i--) ; //适当延时
- }
- while((IFG1 & OFIFG) != 0) ; //
- BCSCTL2 |= SELM1+SELS ; //设置MCLK=SMCLK=XT2CLK
- BCSCTL2 |= DIVM0+DIVM1 ; //设置8分频
- _EINT() ; //系统中断允许
- while(1)
- {
- _BIS_SR(CPUOFF) ; //进入LPM0
- _NOP() ;
- }
- }
- //看门狗中断服务子程序
- #pragma vector = WDT_VECTOR
- __interrupt void watchdog_timer(void)
- {
- P1OUT ^= 0X01 ; //P1.0取反
- }
复制代码 结果示波器在P1.0口啥也没看到 ,更奇怪的是用示波器观测P5.4口是,发现一会是1MHZ一会又是695KHZ,两频率之间跳变,
实在想不明白为什么。后来查看资料得知,将MCLK设置为LFXT1或XT2时,顺序应如下:
1.复位OscOff
2.清除OFIFG
3.延时等待至少50us
4.再次检查OFIFG,如果仍然置位,则继续2,3步骤,直到OFIFG=0为止。
然道是没有复位OSCOFF吗?因为是初学者,还不知道怎么去用C语言复位OSCOFF,特向论坛高手请教。我的单片机是MSP430F149,XT2接8M晶振。谢谢了。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|