MSP430F449单片机时钟配置详细举例(自己总结的)
MSP430主系统时钟以及430的低功耗设置
LPM3_EXIT;//退出低功耗模式
}
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
BCSCTL1&=~XT2OFF;//~0x80
do
{
IFG1&=~OFIFG;//OFIFG为1表示外部晶体振荡器失效
for(i=0xff;i0;i--);//IFG1是InterruptFlag1
}
while((IFG1&OFIFG));//表示振荡器已经起振
BCSCTL2|=SELM_2;//#defineSELM_2(0x80)/*MCLKSourceSelect2:XT2CLK/LF
关闭外部中断:_DINIT();
430外部中断的模式
#include
main(void)
{
BCSCTL1=DIVA_2;//(0x20)/*ACLKDivider2:/4*/
WDTCTL=WDT_ADLY_1000;//直接将看门狗定时器变成定时器,定时
时间是1000毫秒
IE1=WDTIE;//打开定时器中断
P2DIR|=BIT3;
while(1)
{
unsignedinti;
_BIS_SR(LPM3_bits+GIE);//进入低功耗模式3,这种时候,cpu停止工
作,同时打开总的中断//_BIS_SR是一个本增函数,
//_BIS_SR()是一个本增函数,通过本函数可以对寄存器进行直接的操作
//这句话等价于_EINT();
//LPM3;
P2OUT&=~BIT3;//相当于把第五位输出0
for(i=180000;i0;i--);//延时
MSP430时钟系统详解
2
while(1) { P1OUT = 0x40; _delay_cycles(100); P1OUT = 0; _delay_cycles(5000); } }
// 开启 LED // 关闭 LED
2、CPU 运行在晶振(32768Hz)时钟下: 时钟下: 晶体频率为 32768 赫兹,约 3 倍的 VLO。如果我们在前面的代码中使用晶振,指示灯应闪 烁大约每秒一次。 你知道为什么 32768 赫兹是一个标准?这是因为这个数字是 2 的 15 次方, 因此很容易用简单的数字计数电路,以每秒一次获得率 ——手表和其他时间时基。认识到 ACLK 来自外部晶振时钟。 #include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器 P1DIR = 0x41; // P1.0 和 P1.6 配置输出 P1OUT = 0x01; // 开启 P1.0 BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz 晶振 while(IFG1 & OFIFG) { IFG1 &= ~OFIFG; // 清除 OSCFault 标志 _delay_cycles(100000); // 为可见的标志延时 } P1OUT = 0; // 关闭 P1 __bis_SR_register(SCG1 + SCG0); // 关闭 DCO BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = 32768/8 while(1) { P1OUT = 0x40; // 开启 LED _delay_cycles(100); P1OUT = 0; / / 关闭 LED _delay_cycles(5000); } } 3、CPU 运行在晶振(32768Hz)和 DCO 时钟下: 时钟下: 最慢的频率,我们可以运行 DCO 约在 1MHz(这也是默认速度) 。因此,我们将开始切换 MCLK 到 DCO 下。在大多数系统中,你会希望 ACLK 上运行的 VLO 或 32768 赫兹晶振。 由于 ACLK 在我们目前的代码是在晶体上运行,我们会打开 DCO 计算。
MSP430时钟配置
MSP430 频率(时钟)配置MSP430时钟:1、在MSP430单片机中一共有四个时钟源:(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz晶振(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接400kHz~16Mhz;(3)DCOCLK,数控振荡器,为内部时钟,由RC震荡回路构成,受温度和电压的影响较大;若外部不接稳定的晶振电路,直接由内部时钟工作,则会因环境变化而导致性能不稳定。
(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。
(要得到标准的12k则必须外接32768等晶振)2、在MSP430单片机内部一共有三个时钟系统:(1)ACLK:辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;(2)MCLK:主时钟,为系统内核提供时钟,它可以通过软件从四个时钟源选择或者从四个时钟源分频后选择为主时钟;(3)SMCLK:子时钟,也是可以由软件选择时钟源。
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3MOD0~MOD4: Modulation Bit,频率的微调。
一般不需要DCO的场合保持默认初始值就行了。
XT5V: 1.DIVA0~DIVA1:选择ACLK的分频系数。
DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。
XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。
正常情况下把XT2OFF复位就可以了.DCOR: 0,选择内部电阻;1,选择外部电阻DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。
msp430f149定时器
用msp430实现计数器的功能,在1602第一行显示时钟,第二行显示”***TIMER***”--------------------------------------------------main-------------------------------------------------------#include <msp430x14x.h>#include "Display.h"#include "Common.h"unsigned char sec,min,hour;//定时器A初始化函数void Init_TimerA(){TACTL=TASSEL0+TACLR;//选择ACLK,32768HzTACCTL0=CCIE;CCR0=32768; //1sTACTL |=MC0;//增计数模式}//Init IOvoid Port_Init(){P4SEL = 0x00;P4DIR = 0xFF;P5SEL = 0x00;P5DIR|= BIT5 + BIT6 + BIT7; //控制口设置为输出模式}void main( void ) //主函数{unsigned char i,*p;WDT_Init();Clock_Init();Port_Init();Init_TimerA();_EINT();Delay_Ms(100);LCD_Init();LCD_Clear();while(1){i=2;p="***TIMER***";LCD_Pos(6);LCD_write_data(':'); LCD_Pos(9);LCD_write_data(':'); LCD_Writesfm(10,sec); LCD_Writesfm( 7,min); LCD_Writesfm( 4,hour); while(*p){LCD_Writechar(i,1,*p); i++;p++;Delay_Ms(1);}}}/***********定时器A中断服务程序**************/ #pragma vector=TIMERA0_VECTOR__interrupt void TimerA_ISR(void){sec++;if(sec==60){min++;sec=0;if(min==60){hour++;min=0;if(hour==24)hour=0;}}}-------------------------------------------------Display.c,要添加到工程中-------------------------------------/****************************************************fun: Display.cfunction:input:ouput:auther:*****************************************************/#include "Display.h"//***************************************************************** ******// 1602显示屏初始化函数//***************************************************************** ****** void LCD_Init(void){LCD_write_com(0x38); //显示模式设置Delay_Ms(5);LCD_write_com(0x08); //显示关闭Delay_Ms(5);LCD_write_com(0x01); //显示清屏Delay_Ms(5);LCD_write_com(0x06); //显示光标移动设置Delay_Ms(5);LCD_write_com(0x0C); //显示开及光标设置Delay_Ms(5);}//***************************************************************** ****** // 1602显示屏清空显示//***************************************************************** ******void LCD_Clear(void){LCD_write_com(0x01); //清屏幕显示Delay_Ms(5);}//***************************************************************** ***// 1602显示屏命令写入函数//***************************************************************** ******void LCD_write_com(unsigned char com){RS_CLR;RW_CLR;EN_SET;DataPort = com; //命令写入端口Delay_Ms(5);EN_CLR;}//***************************************************************** ****** // 1602显示屏数据写入函数//***************************************************************** ******void LCD_write_data(unsigned char data){RS_SET;RW_CLR;EN_SET;DataPort = data; //数据写入端口Delay_Ms(5);EN_CLR;}//***************************************************************** ****** // 显示屏字符串写入函数//***************************************************************** ******void LCD_Writestr(unsigned char x,unsigned char y,unsigned char *s) {if (y == 0){LCD_write_com(0x80 + x); //第一行显示}else{LCD_write_com(0xC0 + x); //第二行显示}while (*s){LCD_write_data( *s);s ++;}}//***************************************************************** ****** // 显示屏单字符写入函数//***************************************************************** ******void LCD_Writechar(unsigned char x,unsigned char y,unsigned char data){if (y == 0){。
关于MSP430的时钟问题的简介
需要调整 DCO 频率,即 MCLK=1
MHz,只需进行如下设置:
BCSCTLl=XT20FF+RSEL2;
//关闭 XT2 振荡器,设定 DCO 频率为 1 MHmp;mu;s
MSP430 的时钟周期(振荡周期)、机器周期、指令周期之间的关系
(2)LFXT1 接低频振荡器。典型为接 32768HZ 的时钟振荡器,此时振 荡器不需要接负载电容。也可以接 450KHZ~8MHZ 的标准晶体振荡器,此时需 要接负载电容。 (3)XT2 接 450KHZ~8MHZ 的标准晶体振荡器。此时需要接负载电 容,不用时可以关闭。
关于 MSP430 的时钟问题的简介
单片机上电后,如果不对时钟系统进行设置,默认 800
kHz 的
DCOCLK 为 MCLK 和 SMCLK 的时钟源,LFXTl 接 32768 Hz 晶体,工作在
低频模式(XTS=O)作为 ACLK 的时钟源。CPU 的指令周期由 MCLK 决定,
所以默认的指令周期就是 1/800 kHz=1.25μs。要得到 lμs 的指令周期
通用知识时钟周期也称为振荡周期:定义为时钟脉冲的倒数(时钟周
期就是直接供内部 CPU 使用的晶振的倒数,例如 12M 的晶振,它的时钟周 期就是 1/12us),是计算机中的最基本的、最小的时间单位。在一个时钟周期 内,CPU 仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控 制着计算机的工作节奏。时钟频率越高,工作速度就越快。机器周期:在计 算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项 工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为 机器周期。8051 系列单片机的一个机器周期由 6 个 S 周期(状态周期)组成。 一个 S 周期=2 个时钟周期,所以 8051 单片机的一个机器周期=6 个状态周期 =12 个时钟周期。指令周期:执行一条指令所需要的时间,一般由若干个机 器周期组成。指令不同,所需的机器周期也不同。专用知识:在 430 中,一 个时钟周期 = MCLK 晶振的倒数。如果 MCLK 是 8M,则一个时钟周期为 1/8us;一个机器周期 = 一个时钟周期,即 430 每个动作都能完成一个基本操 作;一个指令周期 = 1~6 个机器周期,具体根据具体指令而定。另:指令长 度,只是一个存储单位与时间没有必然关系。 MSP430 根据型号的不同最多 可以选择使用 3 个振荡器。我们可以根据需要选择合适的振荡频率,并可以在 不需要时随时关闭振荡器,以节省功耗。这 3 个振荡器分别为: (1)DCO 数控 RC 振荡器。它在芯片内部,不用时可以关闭。DCO 的 振荡频率会受周围环境温度和 MSP430 工作电压的影响,且同一型号的芯片所 产生的频率也不相同。但 DCO 的调节功能可以改善它的性能,他的调节分为 以下 3 步:a:选择 BCSCTL1.RSELx 确定时钟的标称频率;b:选择 DCOCTL.DCOx 在标称频率基础上分段粗调;c:选择 DCOCTL.MODx 的值进 行细调。
msp430设置基本时钟系统
/* DCOCTL 的位定义 */ #define MOD0 (0x01) /* Modulation Bit 0 */ #define MOD1 (0x02) /* Modulation Bit 1 */ #define MOD2 (0x04) /* Modulation Bit 2 */ #define MOD3 (0x08) /* Modulation Bit 3 */ #define MOD4 (0x10) /* Modulation Bit 4 */ #define DCO0 (0x20) /* DCO Select Bit 0 */ #define DCO1 (0x40) /* DCO Select Bit 1 */ #define DCO2 (0x80) /* DCO Select Bit 2 */ /* BCSCTL1 的位定义 */ #define RSEL0 (0x01) /* Resistor Select Bit 0 */ #define RSEL1 (0x02) /* Resistor Select Bit 1 */ #define RSEL2 (0x04) /* Resistor Select Bit 2 */ #define XT5V (0x08) /* XT5V should always be reset */ #define DIVA0 (0x10) /* ACLK Divider 0 */ #define DIVA1 (0x20) /* ACLK Divider 1 */ #define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ #define XT2OFF (0x80) /* Enable XT2CLK */ /* BCSCTL1 的 DIVA 的功能定义 */ #define DIVA_0 (0x00) /* ACLK Divider 0: 0x20) /* MCLK Divider 2: /4 */ #define DIVM_3 (0x30) /* MCLK Divider 3: /8 */ /* BCSCTL1 的 SELM 的功能定义 */ #define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */ #define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */ #define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */ #define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */ #endif ///////////////////////////////////////////////// ///////////////////////////////////////////////// //////////////// #include; #include "BoardConfig.h" #include "SetClock.h" // 时钟设置函数// 系统时钟设定 void BCSInit (void) {
基于MSP430F449的电子血压计设计(附原理图)
随着生活水平的不断提高以及城市老龄化比例的提高,医疗电子设备的家庭化逐渐成为了趋势。
其中家用电子血压计就是典型的家庭医疗检测设备之一。
目前血压计大致上可分为两种:一是水银式血压计,其优点为数值稳定,其缺点为无法一个人自行操作,必须专业医护人员操作,且肉眼观察误差极大,主观性强,体积较大不易携带。
二是电子式血压计,其优点为:使用简易,可一人独自操作;测量值便于记录,体积轻巧便于携带。
电子式血压计具备了诸多优点,越来越受到普通家庭的欢迎。
本文介绍了以MSP430F449为控制核心,辅以BP01型压力传感器与MCU之间模拟信号处理电路以及LCD显示、语音提示,实现家用电子血压计的设计。
血压测量原理血压的概念就是血液流经血管壁时的压力。
由心脏出来的血液,需要有推力,才能绕行身体一周,心脏就是借着不停的收缩、放松,将血液推送前进。
血压有两种,一是收缩压:是当心脏收缩将血液打到血管所测得的血压,另一是舒张压:是心脏在不收缩所测得的压力。
当袖带的压力等于血压时,血液开始可以流通而产生所谓的袖带声,这时候表现为收缩压,从这一刻开始做记录,直到最后袖带声音消失的时候,记录此点即为舒张压。
电子血压计工作原理系统框图如图1所示。
系统由恒流源、压力传感器、放大电路、带通滤波、二次放大、血压脉冲触发、液晶驱动器、键盘语音电路和单片机组成。
图1电子血压计原理图单片机主要原理为:PWM输出控制气泵充气漏气调整袖带内气压;一路ADC采样袖带内气压直流分量以便取得收缩压和舒张压;一路ADC采样袖带内气压交流分量经分析计算后确定收缩压和舒张压的瞬态时间位置;接收血压脉冲信号触发ADC工作;将计算出的收缩压和舒张压结果输出至LCD显示并进行数值的语音提示。
硬件设计1MSP430FF449D单片机主控电路本系统主控电路如图2所示,主要由MSP430F449芯片、JTAG接口电路、时钟发生电路、时钟输出电路、复位电路、PWM波输出电路、供电电路等组成。
MSP430单片机课程设计-实时时钟与键盘控制
MSP430单片机课程设计实时时钟与键盘控制一、设计思路该算法的流程简图如下:由于LCD无法完全显示时间日期,故采用page翻页的方式设计,每页6位显示。
设定page为奇数时表示当前在时间页面,page为偶数时表示当前在日期页面。
在修改时间时,采用的是输入字符串进行修改的方式。
1、显示当前时间time=hour*10000+min*100+sec。
在page为偶数时,前两位显示小时,中间两位显示分钟,最低两位显示秒。
2、显示当前日期date=year*10000+mon*100+day,并能与时间切换。
在page为奇数时,前两位显示年份,中间两位显示月份,最低两位显示天。
键盘上的up、down修改page的值,实现两页显示的切换。
2、能够读取键盘值进行修改键盘通过中断的方式读取键值,每个键都有相应的操作。
具体的方案如下:键值在0~F之间为对应的十六进制数。
按下UP键,page加1。
按下DOWN键,page加1,以上两键能使page奇偶变化。
按下L键,p加1,用于修改数据时修改位置的更改。
按下R键,p减1,用于修改数据时修改位置的更改。
按下ESC键,使set置1,进入修改模式,并在首位显示E。
按下START键,修改的数据生效,set置0。
按下STOP键,取消修改,set置0,清除首位显示。
按下ENTER键,确认当前位的修改,注意是单个位的修改。
3、体现430系列单片机的超低功耗的特性。
在中断处理结束,以及循环结束,或者等待键盘按键时,会进入低功耗工作模式,同时编程时也尽量减少函数的调用,并将一些变量定义为寄存器变量,提高运行效率。
二、参数计算设计时钟时,应能做到分秒的60进1,时的24进1 ,年以两位数表示满100进1 ,月满12进1;关于天的计数较为复杂:先根据年月判断该月的最大天数,实现进位。
三、编程步骤1、编写时间显示函数,测试以确认函数功能正常。
2、设置初始值为04年2月28日。
利用定时器A控制秒信号的自加,并用LCD显示判断算法是否正确。
基于MSP430单片机的电子时钟设计说明
基于MSP430单片机的电子时钟设计说明
一、需求分析
本设计的目标是基于MSP430单片机来设计一款电子时钟。
电子时钟
可以用来显示当前的时间,比如时、分、秒;同时还具有闹钟功能,即可
以设置每天一些时刻提醒用户,提醒用户做件事情。
设计时,要注意以下
几个方面:
1、时间流逝的准确性:电子时钟的核心功能是准确显示当前的时间,即时针、分针、秒针在正确地流逝;同时也要考虑时间的准确性,用户可
以设置任意时间,时钟计时要按照设置的时间进行计时。
2、系统稳定性:电子时钟的系统稳定性极其重要,不能因为短暂的
停电等扰动,导致系统失去稳定,时间乱跳。
3、外观设计:在外观设计方面,电子时钟要求具有精美、简约的外观,而且要求清晰显示时间内容,用户可以视觉上感受时间的运行,同时
操作简单,操作界面友好;同时,为了满足用户的要求,要能够设置闹钟,并且有红色指示灯和蜂鸣器来提醒。
二、设计要求
1、MSP430单片机:采用MSP430F169作为主控制器,芯片的16位CPU具有较强的数据处理能力,可以有效调整时间性能,满足电子时钟计
时要求。
2、时间及闹钟设置:采用4×4键盘模块作为时间及闹钟设置。
MSP 430 配置时钟
中国计量学院实验报告实验课程:MSP430原理及其应用实验名称:实验二系统时钟与低功耗班级:13自动化学号: 1300102110 姓名:汪誉实验日期:2015-04-21一、实验目的1、掌握MSP430时钟系统的配置方法2、掌握MSP430低功耗设计原则与配置方法二、实验内容设计程序,实现以下功能与要求:(1)MCLK配置为较准确的 1.84MHz;(2)ACLK配置为较准确的 1.84MHz;(3)SMCLK配置为约10kHz;(4)系统初始化完成后进入LPM4。
三、实验步骤1、阅读例程1至4,学习时钟系统与低功耗配置方法。
2、按照实验要求编写程序并进行调试。
3、记录调试结果,完成思考题。
四、程序清单#include<msp430f6638.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP1DIR |= BIT0; // ACLK set out to pinsP1SEL |= BIT0;P3DIR |= BIT4; // SMCLK set out to pinsP3SEL |= BIT4;P7SEL |= BIT7; // mCLK set out to pinsP7DIR |= BIT7;while(BAKCTL & LOCKIO) // Unlock XT1 pins for operation BAKCTL &= ~(LOCKIO);UCSCTL6 &= ~(XT1OFF); // XT1 OnUCSCTL6 |= XCAP_3; // Internal load cap// Loop until XT1 fault flag is cleareddo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag// Initialize DCO to 2.45MHz__bis_SR_register(SCG0); // Disable the FLL control loop UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx UCSCTL1 = DCORSEL_3; // Set RSELx for DCO = 4.9 MHz UCSCTL2 = FLLD_1 + 54; // Set DCO Multiplier for 2.45MHz// (N + 1) * FLLRef = Fdco// (54 + 1) * 32768 = 1.84MHz// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLL control loop// Worst-case settling time for the DCO when the DCO range bits have been // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx // UG for optimization.// 32 x 32 x 2.45 MHz / 32,768 Hz = 76563 = MCLK cycles for DCO to settle __delay_cycles(76563);// Loop until XT1,XT2 & DCO fault flag is cleareddo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flagUCSCTL6 &= ~(XT1DRIVE_1);UCSCTL4 |= SELA_3 + SELS_0 + SELM_3;UCSCTL5 |= DIVS_2;__bis_SR_register(LPM4_bits + GIE); //低功耗模式while(1); // Loop in place}五、调试结果(程序Debug截图)六、思考题(1)MSP430系列单片机不接任何振荡器是否可以正常工作?为什么?不可以。
MSP430编写的时钟程序
void delay(uint x)//延时
{
uchar i;
while(x--)
for(i=100;i>0;i++);
}
void key_cor(void)//P2.6控制停止计数
{
if(!(P2IN&BIT6))//P2.6按键计数
{
delay(10);
delay(10);
LED[7]=~duma[sec%10];//秒为显示
LED[6]=~duma[sec/10];
for(i=0;i<8;i++)
{
P5OUT=0x10;
P4OUT=wema[i];
delay(1);
P4OUT=0xff;
}
}
else if((time%3)==2)
{
LED_h();
delay(10);
LED[1]=0xff;
LED[0]=0xff;
else if((time%3)==2)
{
LED_h();
delay(10);
LED[1]=0xff;
LED[0]=0xff;
for(i=0;i<8;i++)
{
P5OUT=0x10;
LED[3]=~duma[mit/10];
for(i=0;i<8;i++)
{
P5OUT=0x10;
P4OUT=wema[i];
delay(1);
P5OUT=0x08;
P4OUT=LED[i];
delay(1);
MSP430时钟设置及应用总结
MSP430时钟设置及应用总结********************************基于MSP430F1612****************************** 在MSP430单片机中,一个时钟周期= MCLK晶振的倒数。
如果MCLK是8MHz,则一个时钟周期为1/8us。
一个机器周期= 一个时钟周期,即430每个动作都能完成一个基本操作。
一个指令周期= 1~6个机器周期,具体根据具体指令而定。
另外,指令长度只是一个存储单位,与时间没有必然的关系。
MSP430单片机的时钟模块主要包括:三个时钟:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK三个振荡器:低频时钟源LFXT1 、高频时钟源XT2 、数字控制RC振荡器DCO 而MSP430单片机工作所需时钟就是由这些振荡器振荡后经处理产生的。
(1)ACLK:是LFXT1CLK信号经1/2/4/8分频后得到的,主要用作低速外围的时钟(2)MCLK:是LFXT1CLK,XT2CLK,DCOCLK的三者之一决定,由软件选择,然后经1/2/4/8分频后得到,主要用于CPU和系统(3)SMCLK:可由LFXT1CLK和DCOCLK,或者XT2CLK与DCOCLK决定,然后经1/2/4/8分频后得到,主要用于高速外围模块MSP430的时钟模块由DCOCTL,BCSCTL1,BCSCTL2,IE1,IFG1这五个寄存器来确定,具体的功能如下所示:DCOCTL:控制DCO振荡器BCSCTL1:控制XT2,LFXT1,DCO振荡,并控制ACLK的分频情况BCSCTL2:设置三个时钟源分别选择什么振荡器我们在程序里对寄存器的设置,也就是对三个振荡器进行设置,时钟振荡器设置好了,还要对时钟模块进行设置,也就是让三个时钟模块MCLK SMCLK ACLK选择相应的时钟振荡器以得到不同频率的时钟。
PUC信号后,系统选择内部电阻以实现频率的输出。
MSP430编程(一)—— 时钟配置
MSP430编程(一)——时钟配置geweilin 2010.03.13笔者认为这篇文章只适合msp430的初学者,如果你已经熟悉430编程,那么这篇文章对你的用途不大。
msp430的时钟非常灵活,这篇文章将以msp430x1xx为例主要介绍器件的基本时钟模块(Basic Clock Module,以下称:时基模块)及其配置方法(以下所述均是针对msp430x1xx系列,其它系列读者可以参考相应的User’s guide)。
(一) 时基模块简介msp430的时基模块支持低功耗和超低功耗。
使用3个内部时钟信号,用户可以在性能和低功耗之间找到最佳的平衡点。
这个时基模块可以被配置为不使用任何外部元件、使用一个电阻、使用一个或两个晶体振荡器或陶瓷振荡器,所有这些完全可有软件控制。
时基模块包括2个或3个时钟源:□ LFXT1CLK: 低频/高频振荡器,既可以使用低频的32768HZ的手表晶体,也可以使用450KHZ- 8MHZ的标准的晶体振荡器或者陶瓷振荡器。
□ XT2CLK: 可选的高频振荡器,可以使用标准的晶体振荡器或者陶瓷振荡器,也可以使用450KHZ- 8MHZ 的外部时钟源。
□ DCOCLK: 内部RC型数控振荡器。
可以从时基模块获得3个时钟信号:□ ACLK: 辅助时钟,ACLK由LFXT1CLK时钟源经过1、2、4或者8分频得到,他可由软件选择配置到某个特定的外设上。
□ MCLK: 系统主时钟,MCLK可由软件选择LFXT1CLK、XT2CLK(如果可用的话)、或者DCOCLK作为时钟源,经过1、2、4或者8分频后得到,它被用来供CPU和系统使用。
□ SMCLK: 系统子时钟,SMCLK可由软件选择LFXT1CLK、XT2CLK(如果有的话)、或者DCOCLK作为时钟源,经过1、2、4或者8分频后得到,他可由软件选择供某个外设使用。
时基模块的框图如图1所示:注意:对于msp430x11x和msp430x12xx系列的单片机没有XT2振荡器,而是由LFXT1CLK代替XT2CLK。
基于MSP430单片机的电子时钟设计
基于MSP430单片机的电子时钟设计电子时钟是一种使用数字显示时钟时间的设备,它通常基于单片机这样的微控制器。
本文将介绍基于MSP430单片机的电子时钟设计。
首先,我们需要确定设计的目标和功能。
电子时钟主要有如下的功能:1.显示时间:时、分、秒2.显示日期:年、月、日3.设置时间和日期4.声控灯光:根据环境光线亮度调节屏幕亮度5.闹钟功能:设定闹钟时间并响铃提醒6.温度显示:显示当前室内温度接下来,我们将逐步设计和实现这些功能。
1.选择硬件平台MSP430是一款基于16位RISC架构的低功耗单片机,它被广泛应用于嵌入式系统的开发。
我们选择MSP430单片机作为我们的硬件平台。
具体型号可以根据自己的需求进行选择。
2.硬件设计电子时钟设计中的硬件包括MSP430单片机、显示模块、温度传感器、声音传感器、时钟电路等。
通过合适的接口将这些模块连接起来。
3.软件设计电子时钟的软件设计包括两个部分:主控程序和外围设备的驱动程序。
我们将使用C语言进行编程。
主控程序主要包括以下几个功能模块:-时钟模块:通过MSP430单片机的定时器模块实现时钟的计时和显示。
-温度模块:通过温度传感器获取当前室内温度,并将其显示在屏幕上。
-日期和时间模块:通过设置模块实现对日期和时间的设置和显示功能。
-声控灯光模块:通过声音传感器检测环境光线亮度,并自动调节屏幕亮度。
-闹钟模块:设置闹钟时间并在指定的时间响铃提醒。
外围设备的驱动程序主要是对显示模块、温度传感器和声音传感器的驱动和接口设计。
4.软硬件调试和测试5.系统封装和优化完成软硬件调试测试后,我们可以将所有的电子设备安装在一起,并进行系统封装。
在封装过程中,我们需要确保电子设备的连接稳定和正确,并保持良好的通风和散热。
在封装完成后,我们还可以对系统进行一些优化,例如增加使用者友好的界面、优化显示效果等。
综上所述,基于MSP430单片机的电子时钟设计涉及硬件和软件两个方面。
通过合理的硬件连接和编写高效的控制程序,我们可以实现时钟的显示、日期和时间的设置、闹钟功能、温度显示等功能。
关于(单片机)msp430的时钟资料
关于(单⽚机)msp430的时钟资料msp430f5419/38学习笔记之时钟系统(2011-11-30 10:41:30)分类: msp430标签:msp430f541xmsp430f543xucs时钟系统注:msp5419/38中,如果你使⽤SMCLK做TIMER_A的时钟,那么进⼊低功耗3或低功耗4是不会把SMCLK关掉的,这点5系列和其他系列的不⼀样。
UCS模块是⼀个低成本超低功耗系统,通过选择使⽤3个内部时钟信号,⽤户可以得到性能和功耗的最佳平衡点。
UCS可以由软件配置其⼯作模式,如配置成:不需要任何外部器件、使⽤ 1或 2个外部晶振等。
⼀、时钟系统UCS模块具有5个时钟源:XT1CLK:低频/⾼频振荡器,既可以与低频 32768HZ钟振、标准晶振、外部振荡器,⼜可以与外部4M-32MHZ时钟源⼀起使⽤,XT1CLK可以作为FLL模块内部的参考时钟。
有些芯⽚XT1CLK只允许使⽤外部的低频晶振,具体可参考数据⼿册;XT2CLK:可选⾼频振荡器,可与标准晶振,振荡器或者 4MHZ~32MHZ外部时钟源⼀起使⽤;VLOCLK:内部低功耗、低频振荡器,频率典型值为10KHZ;REFOCLK:内部低频振荡器,典型值为 32768HZ,可作为 FLL基准时钟源;DCOCLK:可以通过 FLL来稳定的内部数字控制振荡器(DCO);DCOCLK经过 FLL分频后可得DCOCLKDIV。
UCS模块可以提供3种时钟信号:ACLK:辅时钟;MCLK:系统主时钟;SMCLK:⼦系统主时钟。
⼆、UCS操作PUC之后,UCS的默认配置模式如下:XT1CLK 选择LF模式下的XT1作为时钟源,ACLK 选择 XT1CLK 作为时钟源;MCLK 选择DCOCLKDIV作为时钟源;SMCLK 选择DCOCLKDIV作为时钟源;FLL操作使能,FLL基准时钟(FLLREFCLK)选择XT1CLK;XIN 和 XOUT作普通IO ⼝使⽤,禁⽌了 XT1 功能,直到 I/O ⼝重新配置为 XT1 模式;如果有 XT2IN 和XT2OUT,则⼀并配置为普通 IO ⼝,禁⽌ XT2 功能。
关于MSP430F449时钟
关于MSP430F449时钟SP430系列MCU的卖点是超低功耗,除了端口的低漏电流之最之外,我认为和低功耗关系最大的莫过于他的时钟模块了。
典型的430CPU一般可以在3个震荡器之中选取时钟源:低频晶体(LFXT)、高频晶体(XT)和内部的数控RC振荡器(DCO)。
前几周使用MSP430F449做产品,因为之前成功地使用过MSP430F149做过东西,心想449也是一个模子出来的换汤不换药,遂成竹在胸,殊不知,险些栽了跟头,就在这个多时钟源的时钟模块上。
449和149的时钟模块的最大区别在于449的时钟包含了可编程FLL模块,打开449的头文件,连寄存器的名字都和149完全不一样,一切均以FLL开头。
少顷,但见其内容大同小异,遂把以前的写的149的时钟初始化代码中的寄存器改了名号,直接用在了449上。
但是马上就出现了问题:在测试IFG1中的时钟失效标志位OFIFG之时,会不定期地出现OFIFG始终不复位的情况,程序就这样在这里止步不前(OFIFG置位表示至少有一个时钟源实效,如果置之不理,强行运行下面的代码的话,CPU有可能会强制使用DCO作为MCLK时钟源,这样就会使定时操作出现错误)。
我的板子上接了32K的LFXT和8M的XT2,遂怀疑匹配负载电容有问题,因为低速晶体振荡器LFXT提供了内置的匹配电容。
但是不管如何搭配内部与外部电容,始终不得解。
这之后的某日,我借出恭之便仔细研读了449文档里的时钟模块相关内容,发现OFIFG竟然是时钟模块控制寄存器FLL_CTL0中XT1OF、XT2OF、LFOF、DCOF这4的状态位相或的结果,顿时灵光一现,遂编写代码将相关状态位于几个管脚上LED关联,察看其状态,结果令我大吃一惊:我一直认为有重大嫌疑的LFXT和XT并没有任何问题,LFOF与XT2OF都会在上电后瞬间复位,而我一直觉得绝对不会有问题的DCOF却一。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//***************************************************************************** *
// MSP430-TEST44X Demo - FLL+ clock, Runs internal DCO at 2.45Mhz
//
//
//
// MSP430F449
// -----------------
// /|\| XIN|-
// | | | 32khz xtal
// --|RST XOUT|-
// | |
// | P1.1|--> MCLK = 2.4576Mhz
// | |
// | P1.5|--> ACLK = 32khz
// | |
//
//
// 程序功能:该程序是通过设置不同的时钟源输出模式,具体是P1.5=ACLK=32.768Khz;P1.1=MCLK=4.9Mhz,
// 通过本实验了解MSP430内部的时钟来源和不同频率的设置。
// 硬件连接:在必须连接P1.1、P1.5短接器,
// MSP430F449复位后,MCLK和SMCLK的驱动源为DCO,SMCLK=MCLK=32*ACLK=32*32768=1048576Hz。
//////fDCOCLK = D x (N + 1) x fACLK。
//////N的设置为SCFQCTL = N(N取值1~127);
/////D的设置为SCFI0 = D(D取值FLLD_1,FLLD_2,FLLD_4,FLLD_8,即D=1,2,4,8),默认值D 取2;
/////还要设置FLL_CTL0 |= DCOPLUS,D才会生效
//***************************************************************************** *
#include "msp430x44x.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
SCFI0 |= 2; // 可取1.2.4.8
FLL_CTL0 = XCAP18PF+DCOPLUS; // set load capacitance for xtal
SCFQCTL = 74; // (可取1~127) (74+1) x 32768*2 = 4.9Mhz
P1DIR = 0x22; // P1.1 & P1.5 to output direction
P1SEL = 0x22; // P1.1 & P1.5 to output MCLK & ACLK
while(1); // loop in place
}
//***************************************************************************** *
//
//
// MSP430F449
// -----------------
// /|\| XIN|-
// | | | 32khz xtal
// --|RST XOUT|-
// | |
// | P1.1|--> MCLK = 8Mhz
// | |
// | P1.5|--> ACLK = 32khz
// | |
//
//
// 程序功能:该程序是通过设置不同的时钟源输出模式,具体是P1.5=ACLK=32.768Khz;P1.1=MCLK=8Mhz,
// 通过本实验了解MSP430内部的时钟来源和不同频率的设置。
// 硬件连接:在必须连接P1.1、P1.5短接器,
//***************************************************************************** *
#include "msp430x44x.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
SCFI0 |= FN_2; // x2 DCO frequency, 8MHz nominal DCO SCFQCTL = 121; // (121+1) x 32768 x 2 = 7.99 Mhz
FLL_CTL0 = DCOPLUS + XCAP18PF; // DCO+ set so freq = xtal x D x N+1
P1DIR = 0x22; // P1.1 & P1.5 to output direction
P1SEL = 0x22; // P1.1 & P1.5 to output MCLK & ACLK
while(1); // loop in place
}
//***************************************************************************** *
//
//
// MSP430F44x
// -----------------
// /|\ | XIN|-
// | | | 32kHz crystal
// ---|RST XOUT|-
// | |
// | |
// | XT2IN|-
// | | HF XTAL or resonator (add capacitors)
// | XT2OUT|-
// | |
// | P1.5|--> ACLK = 32khz crystal out
// | |
// | P1.4|--> SMCLK = 1Mhz high freq xtal or resonator out
// | |
// | P1.1|--> MCLK = DCO frequency
// | |
// | |
//
// 程序功能:该程序是通过设置不同的时钟源输出模式,具体是P1.5=ACLK=32.768k;
// P1.4=SMCLK=1Mhz; P1.1=MCLK=1Mhz,通过本实验了解MSP430内部的时钟源。
// 硬件连接:在必须连接P1.1,P1.4,P1.5短接器,
//
//***************************************************************************** *
#include "msp430x44x.h"
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
FLL_CTL0 = XCAP18PF; // 系统配置
FLL_CTL1 = FLL_CTL1 & ~XT2OFF; // 使高频振荡器有效,XT2默认是关闭的
do
{
FLL_CTL0 = FLL_CTL0 & ~XT2OFF; // 清除振荡器失效标志
for (i = 50000; i; i--); // 延时等待
}
while (FLL_CTL0 & XT2OFF); // 检测振荡器是否失效
FLL_CTL1 = SELS; // 选择SMCLK = HF xtal(1 Mhz)设置MCLK FLL_CTL1 = SELM_XT2/SELM_A 。
默认都是SELM_DCO
P1DIR = 0x32; // P1.1, P1.4 & P1.5 to outputs
P1SEL = 0x32; // P1.1, P1.4 & P1.5 functions to output
// MCLK, SMCLK & ACLK
while(1); // loop in place
}。