利用MSP430调采集脉冲程序(疑问+解答)
从而程序先后执行了下面两条语句:
BCSCTL1 &= ~XT2OFF;
BCSCTL1 = divA_1; //对ACLK进行2分频;
执行以上两句确实实现了2.4s的准确定时,但同时引入问题是:执行第二句时,是对其赋值0X10, 以至于把默认的RSELX = 4改为0,从而DCO由800K降为50K左右,从而采集到的数据大大减少,
而正确的语句应为:BCSCTL1 | = divA_1; //对ACLK进行2分频;
从实际测试数据反推:(((2400/124)/272)/8) 其倒数再乘以1000得114526,即114K,
从DATASHEET图可以看出当DCOX=3 RSELX=4时,选取的是近110K的时钟,从而上面的奇怪现象得以解释。
并且要使外部晶体正确起振:
After a PUC, the basic clock module uses DCOCLK for MCLK. If required,
MCLK may be sourced from LFXT1 or XT2.
The sequence to switch the MCLK source from the DCO clock to the crystal
clock (LFXT1CLK or XT2CLK) is:
1) Switch on the crystal oscillator
2) Clear the OFIFG flag
3) Wait at least 50 µs
4) Test OFIFG, and repeat steps 1-4 until OFIFG remains cleared.
; Select LFXT1 (HF mode) for MCLK
BIC #OSCOFF,SR ; Turn on osc.
BIS.B #XTS,&BCSCTL1 ; HF mode
L1 BIC.B #OFIFG,&IFG1 ; Clear OFIFG
MOV #0FFh,R15 ; Delay
L2 DEC R15 ;
JNZ L2 ;
BIT.B #OFIFG,&IFG1 ; Re?test OFIFG
JNZ L1 ; Repeat test if needed
BIS.B #SELM1+SELM0,&BCSCTL2 ; Select LFXT1CLK
其C语言为:
Do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); // 等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); // 晶振失效标志仍然存在?
在调试程序中加入以上判别语句后,一切都下常起来。
结论:一切不合理的现象皆是有原因的,发现它,找到它,掌握它。
- μC/OS-Ⅱ在MSP430F149上的移植(03-01)
- MSP430与I2C总线接口技术的研究(06-14)
- 基于MSP430单片机的超声波倒车雷达监测报警系统设计(08-14)
- 2010年中国(成都)电子展胜利闭幕(08-15)
- 基于MSP430单片机的电子汽车限速器的研究(08-20)
- 基于MSP430的微功耗数据采集系统的开发应用(10-16)