何逸 发表于 2012-4-29 16:56:42

msp430 8M晶振问题

刚学430没多久遇到个问题不明白,听说这个网站很好。在这里发帖问问大师们。
以下程序是实验msp430单片机在8M下使P2.0口输出方波。但是烧进单片机里发现P2.0口频率很低(接led ;可以看见led在那里闪)。照理P2.0口输出频率很高才对啊50000/8M=0.00625 秒才对啊 ;    还有如果改BCSCTL2|=SELM_2+DIVM_3;led闪烁根本就没有分频
那位高手帮我分析下为什么啊。

#include<msp430x14x.h>
#include"BoardConfig.h"

void main(void)
{
unsigned int i;
WDTCTL=WDTPW+WDTHOLD;      //停止看门狗
BoardConfig(0xf0);
P2DIR|=0xFF;               //P5.4输出
P2OUT|=0xFF;               //P5.4用作MCLK输出
BCSCTL1&=~XT2OFF;          //XT2有效
do
{
    IFG1&=~OFIFG;             //清除振荡器失效标志
    for(i=0xFF;i>0;i--);   //稳定时间
}
while((IFG1&OFIFG)!=0);    //如果振荡器失效标志存在
BCSCTL2|=SELM_2;            //MCLK=XT2         +DIVM_3
TACTL=TASSEL_2+TACLR;
CCTL0=CCIE;
CCR0=50000;

TACTL|=MC0;
_EINT();

for(;;)
{

}
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P2OUT^=0x01;
}

liuzs09 发表于 2012-4-29 20:54:42

你给定时器A的时钟比较低,#define TASSEL_2            (2*0x100u) /* Timer A clock source select: 2 - SMCLK */;这说明了你给定时器A的频率来自SMCLK ,而不是MCLK,而你的SMCLK 是使用DCOCLK,你可以这样设置试试看 BCSCTL2 |= SELM_2 + SELS ;             // MCLK= SMCLK = XT2= (safe)
希望对你有帮助

何逸 发表于 2012-4-29 23:09:18

F:\123.jpg非常感谢你的回答看了你回答我终于知道为什么了。   原来是我写程序时看书寄存器写的而书上是错误的书上是说TASSEL_2是系统主时钟看了你回答在去看头文件果然是错的。   嗨   害我研究了一整天啊。写错书也会害死人的 。

何逸 发表于 2012-4-29 23:25:18

本帖最后由 何逸 于 2012-4-29 23:28 编辑

这本书是北京航空航天大学出版社的。 msp430单片机原理与应用实例详解146页特此告诉大家希望大家别走我之路啊

wangkangming 发表于 2012-5-25 14:45:57

最好是看TI提供的user guide和datasheet                  
页: [1]
查看完整版本: msp430 8M晶振问题