MSP430F149基础时钟配置

MSP430F149基础时钟配置

小小总结,完全原创。欢迎转载!请注明出处。技术交流QQ1626092784

视频教程地址:http://www.youku.com/playlist_show/id_20133778.html

相关的源程序、视频教程、电路图、开发软件打包下载:http://pan.baidu.com/share/link?shareid=1516264396&uk=471316729

一、单片机的时钟是干嘛的

单片机就是一个复杂的时序逻辑电路

时钟是整个系统的同步信号,当时钟出现故障时会带来整体的功能故障。时钟脉冲丢失会导致系统数据总线、地址总线或控制总线没有动作。时钟脉冲的速率振幅宽度、形状及相位发生变化均可能引发故障。

总之,我的理解是,就像我们按照口号跑步一样,口号不均匀或者是口号太弱太强等都会使我们乱了步调。单片机是按照时钟信号的节拍一步步有序运行的,时钟信号出问题会直接导致单片机工作异常甚至不能工作。

二、MSP430F149基础时钟简介

1、MSP430F149单片机共有三个时钟源可选

       内部RC振荡器(工作频率由内部或外部基准电阻(P2.5)确定)

       外部低速晶体(接XIN和XOUT两引脚)

       外部高速晶体(接XT2IN和XT2OUT两引脚)

每一种时钟源都可以经过分频后再被利用。其中外部低速晶体(XTIN)可作为ACLK也可作为MCLK,外部高速晶体(XT2IN)只能作为MCLK,内部RC振荡器(DCO)能够作为SMCLK或者MCLK。

 

MCLK:Master Clock,系统主时钟单元,为系统内核提供时钟

SMCLK:Sub-Main Clock,系统子时钟,也是可以由软件选择时钟源

ACLK:Auxiliary Clock,辅助时钟

时钟这样设计的重要意义:低功耗的实现(后面会讲到)

三、MSP430F149时钟设置相关的寄存器

共三个寄存器:DCOCTL、BCSCTL1、BCSCTL2

DCOCTL:Data Control Oscillator ConTroL,设置内部RC振荡器的频率和调制选择。

BCSCTL1:Basic Clock Select ConTroL 1,设置高速晶体启停、低速晶体工作模式、ACLK分频系数和内部电阻的选择。

BCSCTL2:设置MCLK时钟源、MCLK分频系数、SMCLK时钟源、SMCLK分频系数、DCO时钟源频率的确定是外部时钟还是内部时钟。

相关寄存器的具体配置方法请参阅MSP430f149用户指南。

MSP430f149用户指南115网盘下载地址:http://115.com/lb/5lbae5sh737#MSP430f149用户指南.pdf

115网盘礼包码:5lbae5sh737

MSP430F149是一款基于16位RISC架构的低功耗微控制器,它集成了实时时钟模块。下面是一个基于MSP430F149的实时时钟设计参考: 1. 定义时钟模块的引脚:VCC、GND、XTAL1和XTAL2。 2. 连接晶体振荡器:将晶体振荡器的XTAL1和XTAL2引脚分别连接到MSP430F149的P5.4和P5.5引脚。 3. 初始化时钟模块:使用MSP430F149的内部时钟源初始化时钟模块,并设置时钟模块的时钟频率。 4. 设置实时时钟:使用时钟模块提供的函数设置实时时钟的时间和日期。 5. 运行时钟:启动时钟模块,让实时时钟开始计时。 6. 读取实时时钟:使用时钟模块提供的函数读取实时时钟的时间和日期。 下面是一个示例代码,其中使用了MSP430F149的实时时钟模块: ```c #include <msp430.h> void rtc_init(void) { // 初始化时钟模块 RTCCTL01 |= RTCHOLD; // 停止实时时钟 RTCCTL01 &= ~(RTCHOLD | RTCMODE); // 使用外部晶体振荡器 RTCCTL01 |= RTCTEV_0 | RTCBCD; // 设置时钟频率和格式 RTCYEAR = 2021; // 初始化时间和日期 RTCMON = 1; RTCDAY = 1; RTCHOUR = 0; RTCMIN = 0; RTCSEC = 0; RTCCTL01 &= ~RTCHOLD; // 启动实时时钟 } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 关闭看门狗 rtc_init(); // 初始化实时时钟 while (1) { // 读取实时时钟 int year = RTCYEAR; int mon = RTCMON; int day = RTCDAY; int hour = RTCHOUR; int min = RTCMIN; int sec = RTCSEC; // 输出时间和日期 printf("%04d-%02d-%02d %02d:%02d:%02d\n", year, mon, day, hour, min, sec); __delay_cycles(1000000); // 延时1秒 } return 0; } ``` 在这个示例中,我们使用MSP430F149的实时时钟模块来读取当前时间和日期,并输出到串口。你可以根据自己的需求,修改示例代码来实现你的实时时钟设计。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值