|
楼主 |
发表于 2013-3-12 18:09:35
|
显示全部楼层
cbing2000 发表于 2013-3-11 20:44
_BIS_SR(CPUOFF) ; -----等效于进入LPM0.
进入LPM0就是关闭MCLK。这时候你还要去测量MCLK输出? 当然不 ...
首先,谢谢你啊。
今天我有把程序改成了这样
- #include <msp430x14x.h>
- void main(void)
- {
- unsigned int i ;
- WDTCTL = WDT_MDLY_8 ; //看门狗定时器定时周期设为8ms
- IE1 |= WDTIE ; //使能WDT中断
- P1DIR |= BIT4 ; //P1.4输出
- P1SEL |= BIT4 ; //P1.4用作SMCLK输出
- P1DIR |= BIT0 ; //P1.0输出
- BCSCTL1 &= ~XT2OFF ; //xt2有效
- do
- {
- IFG1 &= ~OFIFG ; //清除振荡器失效标志
- for(i = 0xff ; i > 0; i--) ; //适当延时
- }
- while((IFG1 & OFIFG) != 0) ; //
- BCSCTL2 |= SELS ; //设置SMCLK=XT2CLK
- BCSCTL2 |= DIVS_3 ; //设置8分频,SMCLK即为1M
- _EINT() ; //系统中断允许
- while(1)
- {
- LPM0 ; //进入LPM0
- _NOP() ;
- for(i = 0xff ; i > 0; i--) ;
- }
- }
- //看门狗中断服务子程序
- #pragma vector = WDT_VECTOR
- __interrupt void watchdog_timer(void)
- {
- LPM0_EXIT ;
- P1OUT ^= BIT0 ; //P1.0取反
- }
复制代码 测P1.4口的波形还是不对,老在700khz和1Mhz两个值之间跳变,DCO默认设置是800Khz左右,但不稳定,那个700几Khz的应该是DCO的信号,我是在想不明白?
WDTCTL = WDT_MDLY_8,这个语句好像只要SMCLK设置为1Mhz,看门狗定时器就被设为普通定时器定时8ms吧,不一定要是SMCLK=DCO=1Mhz的。
然后我有吧while里面的3条语句全注释掉,把中断服务程序里的LPM0_EXIT也注释掉,但结果还是一样跳变,没什么影响。 |
|