最近学习MSP430单片机,用16M的晶体振荡器怎么产生精准的8M时钟信号输出供外围电路使用?

时钟的控制字该怎么写?谢谢高手指点

据我所知:
一个时钟周期=MCLK 晶振的倒数。如果MCLK是8M,则一个时钟周期为1/8us;
一个机器周期 =一个时钟周期,即430每个动作都能完成一个基本操作;
一个指令周期 = 1~6个机器周期,具体根据具体指令而定。
msp430的平均指令周期为差不多为3个时钟周期。说这些主要也就是告诉你像楼上那样用while语句或者类似的语句是无法实现8M时钟信号的,更谈不上精准。
注意一点,MSP430F1系列的最高外接晶振好像是450K~8M,2系列以后才提高到16M或者更高。下面说正题:
1,首先你要知道MCLK,SMCLK,ACLK的设置。也就是设置主系统时钟,子系统时钟和辅助系统时钟。如果会,那么接着看,如果不会,那么就先学会了。
2,16MHz的晶振接在XT2 上,启动XT2,设置SMCLK的时钟源选择XT2(即选择16MHz的晶振),同时2分频(得到8MHz的频率)。即SMCLK的频率是8MHz。至于MCLK,ACLK,你随意。
3,找到你所用型号的MSP430芯片SMCLK的输出引脚,设置该引脚为功能引脚输出。这样就可以输出SMCLK了,也就是8MHZ的时钟信号,可以供外围电路使用。追问

谢谢,非常同意你的观点。我用的是2系列的,按照你的说法设置DIVS的值为1进行二分频就可以了。我测试了一下确实可以,不过频率稍微有点波动。谢谢指点~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-02
我看出来你是最近才学的。
晶振是16M
你知道机器周期是多少么?
指令周期呢?
一个机器周期包含12个晶振周期,
大多数指令周期由一个到两个机器周期不等。虽然有极少数单片机可以做到更快。
但430不是这极少数。所以最乐观的情况来看你能产生的是16/12M=1.3M,
以下列代码产生信号(这是我能想到最简洁的)
while(1)
{
P1_0=!P1_0;
}
至少要占2个指令周期,端口才会取反一次。
4个指令周期,才算一个完整的方波。
所以是1.3/4=0.33M。

当然如果你想用中断只怕占用的指令周期数更多,所以不管你怎么算,不会超过500K的!追问

谢谢,你的这种方法我也想到过,不过有很大的缺陷,单片机只能执行这条语句而不能做其他的操作,换句话说这个430单纯的用作方波信号发生器,屈才。用中断方式将反复地执行中断也不行。

第2个回答  2019-09-27
我看出来你是最近才学的。
晶振是16M
你知道机器周期是多少么?
指令周期呢?
一个机器周期包含12个晶振周期,
大多数指令周期由一个到两个机器周期不等。虽然有极少数单片机可以做到更快。
但430不是这极少数
第3个回答  2011-08-02
我也是刚开始学。 430的时钟系统不是有分频器的嘛追问

关于时钟分频我看过一些参考书,都说的不清楚,我自己也测试过几次,P5.5总输出16M的方波,P5.4和P5.6输出几十到几百千赫兹的方波。

大家正在搜