MSP430F449单片机时钟配置详细举例(自己总结的)
- 格式:wps
- 大小:22.00 KB
- 文档页数:4
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。
用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){。
随着生活水平的不断提高以及城市老龄化比例的提高,医疗电子设备的家庭化逐渐成为了趋势。
其中家用电子血压计就是典型的家庭医疗检测设备之一。
目前血压计大致上可分为两种:一是水银式血压计,其优点为数值稳定,其缺点为无法一个人自行操作,必须专业医护人员操作,且肉眼观察误差极大,主观性强,体积较大不易携带。
二是电子式血压计,其优点为:使用简易,可一人独自操作;测量值便于记录,体积轻巧便于携带。
电子式血压计具备了诸多优点,越来越受到普通家庭的欢迎。
本文介绍了以MSP430F449为控制核心,辅以BP01型压力传感器与MCU之间模拟信号处理电路以及LCD显示、语音提示,实现家用电子血压计的设计。
血压测量原理血压的概念就是血液流经血管壁时的压力。
由心脏出来的血液,需要有推力,才能绕行身体一周,心脏就是借着不停的收缩、放松,将血液推送前进。
血压有两种,一是收缩压:是当心脏收缩将血液打到血管所测得的血压,另一是舒张压:是心脏在不收缩所测得的压力。
当袖带的压力等于血压时,血液开始可以流通而产生所谓的袖带声,这时候表现为收缩压,从这一刻开始做记录,直到最后袖带声音消失的时候,记录此点即为舒张压。
电子血压计工作原理系统框图如图1所示。
系统由恒流源、压力传感器、放大电路、带通滤波、二次放大、血压脉冲触发、液晶驱动器、键盘语音电路和单片机组成。
图1电子血压计原理图单片机主要原理为:PWM输出控制气泵充气漏气调整袖带内气压;一路ADC采样袖带内气压直流分量以便取得收缩压和舒张压;一路ADC采样袖带内气压交流分量经分析计算后确定收缩压和舒张压的瞬态时间位置;接收血压脉冲信号触发ADC工作;将计算出的收缩压和舒张压结果输出至LCD显示并进行数值的语音提示。
硬件设计1MSP430FF449D单片机主控电路本系统主控电路如图2所示,主要由MSP430F449芯片、JTAG接口电路、时钟发生电路、时钟输出电路、复位电路、PWM波输出电路、供电电路等组成。
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单片机来设计一款电子时钟。
电子时钟
可以用来显示当前的时间,比如时、分、秒;同时还具有闹钟功能,即可
以设置每天一些时刻提醒用户,提醒用户做件事情。
设计时,要注意以下
几个方面:
1、时间流逝的准确性:电子时钟的核心功能是准确显示当前的时间,即时针、分针、秒针在正确地流逝;同时也要考虑时间的准确性,用户可
以设置任意时间,时钟计时要按照设置的时间进行计时。
2、系统稳定性:电子时钟的系统稳定性极其重要,不能因为短暂的
停电等扰动,导致系统失去稳定,时间乱跳。
3、外观设计:在外观设计方面,电子时钟要求具有精美、简约的外观,而且要求清晰显示时间内容,用户可以视觉上感受时间的运行,同时
操作简单,操作界面友好;同时,为了满足用户的要求,要能够设置闹钟,并且有红色指示灯和蜂鸣器来提醒。
二、设计要求
1、MSP430单片机:采用MSP430F169作为主控制器,芯片的16位CPU具有较强的数据处理能力,可以有效调整时间性能,满足电子时钟计
时要求。
2、时间及闹钟设置:采用4×4键盘模块作为时间及闹钟设置。
中国计量学院实验报告实验课程: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-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
}。