msp430时钟选择

本人初学430对时钟源和系统时钟不太懂程序中默认使用的是MCLK,SMCLK还是ACLK作为其运算的时钟?eg:一个流水灯程序#include<msp430x14x.h>... 本人初学430对时钟源和系统时钟不太懂

程序中默认使用的是MCLK,SMCLK还是ACLK作为其运算的时钟?
eg:一个流水灯程序
#include<msp430x14x.h>
char led[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
void delay()
{
unsigned int i;
for(i=0;i<50000;i++);
}
void main()
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BCSCTL1 &=0xc0;
P2DIR = 0xff;
P6DIR = 0xfc; //设置P6口方向为输出
P6OUT = 0xff;
for(;;)
{
for(int k=0;k<8;k++)
{
P2OUT = led[k];
delay();
}
}
}
请问BCSCTL1 &=0xc0;这句话有什么作用?我试验过后发现这句话使流水灯速度变得很慢,但按我的理解因为BCSCTL2采用的是默认设置所以MCLK用的是DCO的时钟源,那流水灯的速度应该很快才对,难道系统运行的时钟是ACLK?
这一点我很是疑惑
忘高手能给我解答,谢谢
回答的好绝对加分
展开
 我来答
killervs401
2009-08-07 · TA获得超过1898个赞
知道大有可为答主
回答量:2526
采纳率:50%
帮助的人:687万
展开全部
不选择的话,默认是DCO
BCSCTL1 &=0xc0说明LFXTCLK工作在高频模式,比32768高。同时关闭XT2OFF
但是如果是默认的DCO的话应该是800K左右
你再加句BCSCTL2 |= SELM1+SELM0; //选ACLK做系统时钟
试验下

//MSP430F14时钟模块操作
/*************************************************************************/
//以下是结合MC430F14开发板来实验的时基应用例程,程序运行后可用示波器观察各时钟源输出.
//F14系列的时钟源为三个:
//LFXT1(XT1): 低速,频率精确,功耗低
//XT2:高速,频率精确.通讯应用于高速的处理.但带来的相对功耗较大.
//DCO:高速,频率不稳定.频率与芯片的温度,电压等因素有关.且容易漂移.但功耗低.
//应用目标板:www.Microcontrol.cn MC430F14开发板
/*************************************************************************/
#include <msp430x14x.h>
void main(void)
{unsigned char i;
WDTCTL = WDTPW + WDTHOLD; //先关闭看门狗,对单片机初始化.
//时基模块的时钟设置
//单片机上电时,MCLK主时钟的源默认选择为DCO提供.F1系列DCO默认800KHZ.
//ACLK辅助时钟默认为XT1,XT1一般接32768HZ晶体.
//SMCLK子时钟默认为DCO,同样是800KHZ.
//XT2需要人为开启,并要检测其开启是否成功.
BCSCTL1 &= ~(XT2OFF + XTS); //启动XT2高速时钟模块
BCSCTL2 |= SELM1; //MCLK主时钟选XT2为时钟源.TX2输入不分频.
BCSCTL2 &= ~SELS; //SMCLK选为DCO为时钟源.(参考)

//刚才开启了XT2,需要一定时间XT2才进入稳定状态.所以需要等待并检测稳定状态.
//通常采用do...for语法,这是TI推荐的程序写法
do
{
IFG1 &=~OFIFG; //清OSCFault 标志
for(i=0xff;i>0;i--) //延时等待其开启稳定
;
}
while((IFG1 & OFIFG) !=0); //检查OSCFault标志位是否为0,若为0则表示XT2开启稳定.
//否则一直等下去...

//-----------------------------------------------
//以下我们来检测各个时钟信号的输出.
//在MSP430单片机中,大部的IO是有复用功能.而基础模块的时钟就可以通过IO设置使其输出.
P1DIR |= BIT4; //P1.4 IO口设置为输出.
P1SEL |= BIT4; //P1.4 IO口设置为SMCLK.

P2DIR |= BIT0; //P2.0 IO口设置为输出.
P2SEL |= BIT0; //P1.4 IO口设置为ACLK.

P5DIR |= BIT4; //P5.4 IO口设置为输出.
P5SEL |= BIT4; //P5.4 IO口设置为ACLK.

//-----------------------------------------------
//同样,内部其它模块也选择不同的时钟.可以在相关模块的控制寄存器中设置.例如:
//定时器A 选用SMCLK子系统时钟=DCO=~800KHZ,当然也可以选择其它时钟源.
TACTL = TASSEL1 + TACLR ; //注意转换其它时钟源的同时要清定时器内容.
//.......

//USART选用ACLK=XT1-32khz
UTCTL1 = SSEL0; //串口模块的时钟源选择为ACLK=32768HZ,

//当前程序的MCLK主时钟为TX2=8MHZ
while(1);
}
/*************************************************************************/
Tom1987
2009-08-17 · TA获得超过1311个赞
知道小有建树答主
回答量:325
采纳率:0%
帮助的人:319万
展开全部
运算时钟也就是cpu时钟吧,都是MCLK,不过这个MCLK可以经过设置,分别可以由低频振荡器,高频振荡器,内置数字振荡器三者之一提供。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zaoshen14
2009-08-21 · TA获得超过240个赞
知道答主
回答量:245
采纳率:0%
帮助的人:148万
展开全部
我说简单点
BCSCTL1 &=0xc0 关振荡器 将LFTX1置成高频

DCO并不快,可以用DCOCTL控制字改变其频率试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式