MSP430F149 时钟源选择
MSP430F149的内部Flash

MSP430F149的内部FlashMSP430F149 内部的memory 结构,60K Flash+2K RAM。
Flash 分为主存储区和信息存储区,操作都一样,只是主存储区每个段512 字节,而信息存储区为128 字节,方便擦写。
当我们有数据要保存到Flash 存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH 存储器变成全1。
应当注意的是,此flash 的操作频率为257 kHz 到476 kHz,时钟源可选择,因此我们做时钟分频时应当保证频率在这之间,以下为我编写的参考程序。
void Flash_erase(uint addr){//段擦除,512bytes 一段uchar s; s=__get_interrupt_state();//保存当前中断状态__disable_interrupt(); while(FCTL3&BUSY); FCTL3=FWKEY;FCTL1=FWKEY+ERASE; *(uchar*)addr=0; while(FCTL3&BUSY); FCTL3=FWKEY+LOCK; __set_interrupt_state(s);//恢复中断状态}void Flash_write(uint addr,uchar dat){//单字节写入uchar s; s=__get_interrupt_state(); __disable_interrupt(); while(FCTL3&BUSY); FCTL3=FWKEY; FCTL1=FWKEY+WRT; *(uchar*)addr=dat; while(FCTL3&BUSY); FCTL1=FWKEY; FCTL3=FWKEY+LOCK;__set_interrupt_state(s);}void Flash_read(uint addr,uint len){//读取到数组,此处堆栈应改大uint i; for(i=0;i *(R+i)=*(uchar*)(addr+i);}。
第二章 MSP430F149基本时钟系统

DCOR DIVS0 DIVS1 SELS DIVM0 DIVM1 SELM0 SELM1
(0x01) /* DCO 外部电阻使能 */ (0x02) /* SMCLK 2 分频 */ (0x04) /* SMCLK 4 分频*/ (0x08) /* SMCLK 时钟源选择 0:DCOCLK / 1:XT2CLK/LFXT1CLK */ (0x10) /* MCLK 2 分频 */ (0x20) /* MCLK 4 分频 */ (0x40) /* MCLK 时钟源选择 01:DCOCLK*/ (0x80) /* MCLK 时钟源选择 10:有 XT2 则选择 XT2CLK 否则选择 LFXT1CLK*/
/*************************************************
*BCSCTL2 控制位定义
**************************************************/
#define #define #define #define #define #define #define #define
/* Modulation Bit 0 */ /* Modulation Bit 1 */ /* Modulation Bit 2 */ /* Modulation Bit 3 */ /* Modulation Bit 4 */ /* DCO Select Bit 0 */ /* DCO Select Bit 1 */ /* DCO Select Bit 2 */
0——禁止中断
1——允许中断
说明:IE1 中其余位可能被其它模块使用。
5、IFG1:中断标志寄存器 1
7
6
5
4
第四章 MSP430F149看门狗定时器

#include <msp430x14x.h> void main(void) {
WDTCTL=WDT_ADLY_1000;//1000ms 定时 //WDT_ADLY_1000=WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL
P6DIR |=BIT0;//P6.0 输出 P6OUT |=BIT0;//P6.0 输出高电平关闭 LED 灯 IE1 |=WDTIE;//允许 WDT 中断 _EINT();//开放系统中断 while(1) {
例:设置看门狗间隔定时器模式,选择 ACLK(32768Hz)时钟源,定时 1s。
WDTCTL=WDTPW + WDTTMSEL + WDTCNTCL + WDTSSEL;
口令
定时工作模式 清除计数器
选择 ACLK
思考:
选择 ACLK(32786Hz)时钟源,定时 250ms/16ms/1.95ms,如何设置 WDTCTL?
说明:
WDTPW——口令,固定格式。
WDTCNTCL——计数器清零
WDTCTL.2(WDTSSEL)——WDTCTL 第二位时钟源选择位,
0:选择 SMCLK
1:选择 ACLK
WDTISx——定时间隔选择控制位,T 为时钟源时钟周期。
WDTISx=00,定时间隔 T×215 WDTISx=01,定时间隔 T×213
2、IE1 中断使能寄存器 1
7
6
5
4
3
2
1
0
NMIIE
WDTIE
rw-0
rw-0
NMIIE:非屏蔽中断允许控制位。
NMIIE=0,禁止 NMI 中断
MSP430F149的USART0的UART方式

MSP430F149的USART0的UART方式MSP430F149 的USART0 的UART 方式(UCTL0 中的SYNC 位清0)用于串口通信,以下是一段初始化过程:P3SEL |= 0x30;P3DIR |= BIT4;ME1 |= UTXE0 + URXE0; //允许USART0 接受和发送UCTL0 |= CHAR;U0TCTL|=SSEL1;UBR00 = 0x68;//波特率9600UBR10 = 0x00;UMCTL0 = 0x40;UCTL0 &= ~SWRST;IE1|=URXIE0;__enable_interrupt();首先是设置引脚的方向,RX 为输入,TX 为输出,所以TX 的DIR 位应设为1。
ME1 是功能模块,即允许UART 的接收和发送,CHAR 置1 是设置数据为8 位,SSELx 选择UART 的时钟源,波特率的设置可以用MSP430 波特率计算器来算。
IE1 中的UTXIE0 和URXIE0 分别用来使能接收和发送中断,中断标志分别为UTXIFG0 和URXIFG0,UTXIFG0 置1 表示等待新的数据写入发送寄存器,即上一次发送已完成,而URXIFG0 置1 表示已接收到数据并装入接收缓存寄存器中void main(){Init();while(1){for(num=0;num{//发数组TXBUF0=T[num];//数据被写入发送缓冲寄存器,发送中断标志清0while ((IFG1 & UTXIFG0)!=0x80);//等待中断标志置1,即等待接收完成}num=0;while(1);}}#pragma vector=USART0RX_VECTOR__interrupt void UART0RX (void){R[num]=RXBUF0;//当读接收寄缓冲存器时,接收中断标志清0num++;if(num==5) num=0;}tips:感谢大家的阅读,本文由我司收集整编。
MSP430时钟配置

MSP430 频率(时钟)配置MSP430时钟:1、在MSP430单片机中一共有四个时钟源:(1)LFXT1CLK,为低速/高速晶振源,通常接晶振(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、BCSCTL3DCOCTL,DCO控制寄存器,地址为56H,初始值为60HDCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。
MOD0~MOD4: Modulation Bit,频率的微调。
一般不需要DCO的场合保持默认初始值就行了。
BCSCTL1,地址为57H,初始值为84HRSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。
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)。
MSP430时钟分析

MSP430时钟分析最近开始学习MSP430,在所有单片机学习中,时钟的设置无疑是最基本的一项工作!尤其对于现在的单片机,外部有低速,高速两种晶振,内部还有PLL 的内部时钟源,设置好系统工作的时钟则是工作完美开始的表现。
我一共用了两种系列的430 单片机,MSP430F149 和MSP430F437,系列的不同,时钟的设置也略有不同,下面从149 的时钟一步一步来说吧!在f149 中,基础时钟是被叫做basic clock module,其一共有三个时钟源:一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz)一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz)还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。
在430 内部一共有三个时钟系统一个为ACLK,通常由LFXT1CLK 作为时钟源,可以通过软件控制改时钟的分频系树。
一个为MCLK,即Main CLK,一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择,一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)DCO control register DCOCTLBasic clock system control 1 BCSCTL1Basic clock system control 2 BCSCTL2SFR interrupt enable register 1 IE1SFR interrupt flag register 1 IFG1DCOCTL 寄存器是用来配置DCOCLK 的,这里暂且不提BCSCTL1 与BCSCTL2 寄存器则显得比较重要,这两个寄存器控制了你整个系统中430 的工作时钟系统。
BCSCTL1 寄存器:7 654 3 210XT2OFF XTS DIVAx XT5V RSELxXT20FF:用来控制XT2 晶振的开启和关闭,置1 时关闭,置0 时,开启XTS:用来选择低速晶体的工作模式(可忽略)DIVAx:用来选择ACLK 的分频系数XT5V: 无用。
msp430f149 PWM

#include <msp430x14x.h>#define Exterior_8MHz 0x55 //MCLK和SMCLK选择外部8M高频晶振#define u8 unsigned char#define u16 unsigned short#define u32 unsigned longvoid Delay_ms(u16 Time) //软件ms延时,1MHz频率下{#ifdef Exterior_8MHzu16 i,j,z;for(i=0;i<Time;i++)for(j=0;j<10;j++)for(z=0;z<158;z++);#elseu16 i,j;for(i=0;i<Time;i++)for(j=0;j<200;j++);#endif}void Delay_us( u16 Time ) //软件us延时,1MHz频率下{u16 i;for(i=0;i<Time;i++){_NOP();_NOP();}}void System_Clock_Init(void) //系统时钟源配置{#ifdef Exterior_8MHz/*------选择系统主时钟为8MHz-------*/u8 z;BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器do{IFG1 &= ~OFIFG; //清除晶振失败标志for (z = 0xFF; z > 0; z--); //等待8MHz晶体起振}while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振#else/*------选择系统主时钟为DCO1MHz-------*/DCOCTL =0x00;BCSCTL1 &=~0x07; //清零DCOx,MODx,RSELx位DCOCTL |=DCO2+DCO1+MOD2+MOD1+MOD0; //DCO=6,MOD=7 BCSCTL1 |=RSEL2; //RSEL=4#endif}void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗System_Clock_Init();//设置定时器A时钟源,1MHz#ifdef Exterior_8MHzTACTL = TACLR; //清零寄存器TACTL = TASSEL_2 + ID_3 + MC_1; //SMCLK,8分频,增计数#elseTACTL = TACLR; //清零寄存器TACTL = TASSEL_2 + ID_0 + MC_1 + TACLR; //SMCLK,0分频,增计数#endifCCR0 = 10000-1; //设定周期10000*1us=10ms,100K//PWM1CCR1 = 2500; //设定脉宽2500*1us=2.5msCCTL1 = OUTMOD_7; //PWM模式7,复位/置位P1DIR |= BIT2; //P1.2 输出P1SEL |= BIT2; //P1.2 TA1//PWM2CCR2 = 7500; //设定脉宽7500*1us=7.5msCCTL2 = OUTMOD_7; //PWM模式7,复位/置位P1DIR |= BIT3; //P1.3 输出P1SEL |= BIT3; //P1.3 TA2while(1){}}。
基于MSP430F149单片机的多功能电子时钟设计

基于MSP430F149单片机的多功能电子时钟设计作者:胡彪田亚菲来源:《数字技术与应用》2015年第05期摘要:嵌入式系统设计中处于最核心的设计是嵌入式操作系统,本文采用的微处理器是MSP430F149,系统内核是μC/OS-II。
通过软件功能扩充和硬件功能扩展实现了一个较完整的嵌入式实时操作系统,并最终设计了一个多功能电子时钟。
本系统是利用MSP430F149单片机实现其具有计时、校时等多功能的数字时钟。
同时运用LCD12864液晶同时显示“时分秒、年月日、星期、温度”的现代计时装置。
关键词:微处理器MSP430F149 μC/OS-II 多功能电子时钟中图分类号:TP368.12 文献标识码:A 文章编号:1007-9416(2015)05-0000-001 引言随着电子技术的发展,微处理器在性能提升的同时功耗能够降得更低,功能也更加强大,16位和32位微处理器逐渐成为嵌入式系统设计的主流芯片。
一个较完整的系统不但要有微处理器,还需要在微处理器上运行一个比较稳定的操作系统;因此,系统要有比较良好的可移植性,能够运用于根据不同应用要求选择的微处理器中。
μCOS-II作为一个实时操作系统内核,由于其源代码公开、代码规范、价格便宜。
为了研究MSP430系列单片机支持多任务、并行、实时操作,移植的稳定性、可靠性等优越的功能。
本设计在运用MSP430单片机和μCOS-II的相关知识的基础上,设计了个多功能电子时钟。
通过软件功能扩充和硬件功能扩展设计了一个较完整的嵌入式实时操作系统,从而验证了μCOS-II操作系统移植在MSP430F149的可行性和稳定性。
2 总体电路设计与多功能时钟实现本设计采用MSP430F149作为整个电路的核心部件,运用4*4矩阵键盘作为输入设备,外接LCD12864进行显示,同时还连接一些扩展电路以便增加电子时钟功能。
本设计的硬件电路比较简单,计数、调时、译码显示等功能全部都由软件控制实现,准确性较高。