基于MSP430时钟程序(详细版)
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单片机的数字时钟
摘要:日期时间显示器可以说是各种各样,随处可见,这里我们着重设计一款超低功耗的,显示内容较为丰富的日期时间显示器。
该日期时间显示器是基于MSP430单片机和LCD1602液晶显示器。
MSP430单片机最显著的特点是能够超低功耗运行,正是由于这一特点,用MSP430来做日期时间显示器,可以很有效地降低功耗,节约电能。
同时LCD1602是微功耗的液晶显示器,显示内容丰富。
目录摘要 (1)一、MSP430单片机最小系统 (3)二、LCD1602液晶显示器 (3)三、按键和闹铃 (6)四、主程序框图 (7)五、MSP430单片机的内部设置 (8)1、时钟系统与低功耗模式 (8)2、I/O口 (9)3、Basic Timer基础定时器 (10)一、MSP430单片机最小系统在传统的微处理器系统中,要让系统运行,至少要提供电源、时钟和复位信号,而在MSP430单片机中,内部就带有复位电路(BOR)、片内数控时钟源(DCO),因此只需外加电源即可构成可运行的最小系统。
由于内部DCO误差很大(20%),且受温度影响严重。
只适合为CPU运算提供时钟,或在对时间误图1差要求极其宽松的场合。
但是在这里我们要做日期时间显示器,就必须通过外部晶体作为时钟源。
MSP430单片机通常使用32.768kHz的手表晶振作为外部时钟。
MSP430最小系统设计如图1所示。
二、LCD1602液晶显示器LCD1602是工业字符型液晶,能够同时显示16×02即32个字符。
市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此表1HD44780写的控制程序可以很方便地应用于市场上大部分的字符型液晶。
字符型LCD通常有14个引脚线或16个引脚线,多出来的两条线是背光电源线VCC (15脚)和地线GND(16脚),其控制原理与14脚的LCD完全相同。
管脚具体定义如表1所示。
HD44780内置了DDRAM、CGROM和CGRAM。
MSP430时钟设置程序
MSP430时钟设置程序MSP430时钟设置程序1/void main (void){unsigned int i;WDTCL = WDTPW+WDTHOLD; //停止看门狗P5DIR = 0x10; //设置P5.4输出P5SEL = 0x10; //设置P5.4口为外围模块用作MCLK信号输出BCSCTL1 &= ~XT2OFF; //使TX2有效,TX2上电时默认为关闭的.do{IFG1 &= ~OFIFG; //清振荡器失效标志for(i= 0xff; i>;0; i--); //延时,待稳定.}while ((IFG1 & OFIFG)!=0); //若振荡器失效标志有效BCSCTL2 |= SELM1; //使MCLK = XT2for(;;);}2/#include ;void main(void){unsigned int i;WDTCTL = WDTPW + WDTHOLD; //停止看门狗BCSCTL1 |= XTS;//设置时基寄存器1,使ACLK = LFXT1 = HF XTAL,也就是高频模式.P2DIR|= 0x01; //设置P2.0方向寄存器为输出P2SEL |= 0x01; //设置P2.0口为外围模块用作ACLK信号输出P1DIR |= 0x02; //设置P1.1方向寄存器为输do{IFG1 &= ~OFIFG; //清振荡器失效标志for (i = 0xFF; i >; 0; i--); //延时,待稳定}while ((IFG1 & OFIFG)); //若振荡器失效标志有效? BCSCTL2 |= SELM_3;//设置时基寄存器2,使主时钟信号MCLK = LFXT1 (可靠的) for (;;) //无穷循环{P1OUT |= 0x02; // P1.1 = 1P1OUT &= ~0x02; // P1.1 = 0}}1-LFXT1CLK:低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。
MSP430 CLK配置说明(十分详细)
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
ACLK MCLK SMCLK
(手表) (三种) (两种)
第二步相当于把所有系统所有时钟全部都配置好了,ACLK配置为XT1;MCLK(三种可选);SMCLK(两种---------------------- SMCLK(来源有两个,一个8M,一个OSC)
ACLK上电默认为XT1。MCLK,SMCLK上电默认为OSC
配置时钟过程:
第一步:
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
第二步:
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
对应最简程序:(直接复制粘贴)
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
|
XT2 8M HZ ------------------------------ MCLK(来源有三个,两个晶振,一个0SC)
MSP430单片机时钟程序的设计
MSP430单片机时钟程序的设计在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的值进行细调。
(2)LFXT1 接低频振荡器。
典型为接32768HZ的时钟振荡器,此时振荡器不需要接负载电容。
也可以接450KHZ~8MHZ的标准晶体振荡器,此时需要接负载电容。
(3)XT2 接450KHZ~8MHZ的标准晶体振荡器。
此时需要接负载电容,不用时可以关闭。
低频振荡器主要用来降低能量消耗,如使用电池供电的系统,高频振荡器用来对事件做出快速反应或者供CPU进行大量运算。
当然高端430还有锁频环(FLL)及FLL+等模块,但是初步不用考虑那么多。
MSP430的3种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟。
(1)MCLK系统主时钟。
除了CPU运算使用此时钟以外,外围模块也可以使用。
MCLK 可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。
(2)SMCLK系统子时钟。
供外围模块使用。
并在使用前可以通过各模块的寄存器实现分。
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。
MSP430单片机秒表程序(完整)
MSP430单片机"秒表" 程序(完整)/*******************************************************基于MSP430F449单片机的秒表*功能:秒计时,8位数码管显示,包括小时、分钟、秒和毫秒*此程序同样适用于其他系列单片机*by:duyunfu1987******************************************************/#include "msp430x44x.h"#define DPYOUT P3OUT //数码管的段选输出口#define DPYCOM P2OUT //38译码器的ABC输入#define OPENOUT P2OUT |= BIT3 //74HC573使能锁存段选#define CLOSEOUT P2OUT &= ~BIT3//74HC573无效int hour,min,sec,ms; //缓冲区定义,小时、分钟、秒、毫秒int count = 0; //2ms计数,计到5时ms增1//共“阴”极数码管的码表unsigned char LED7CC[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//延时n(us)void delay_us(int n){ while(n-- >0)_NOP();}//延时n(ms)void delay_ms(int dms){ int i;while(dms-- >0){ for(i=0;i<250;i++);}}//初始化缓冲区与IO口void Init(){hour = 0;min = 0;sec = 0;ms = 0;P2SEL = 0;P3SEL = 0;P2DIR |= BIT0+BIT1+BIT2+ BIT3;//A B C 使能位P2DIR &= ~(BIT4+BIT5+BIT6); //按键P3DIR = 0xff;P3OUT = 0x00;}//8位数码管动态显示函数void display(){DPYOUT = 0;_NOP();DPYOUT = LED7CC[ms%10]; DPYCOM = 7;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[ms/10]; DPYCOM = 6;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[sec%10]|0x80; DPYCOM = 5;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[sec/10]; DPYCOM = 4;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[min%10]|0x80; DPYCOM = 3;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[min/10]; DPYCOM = 2;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[hour%10]|0x80; DPYCOM = 1;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[hour/10]; DPYCOM = 0;OPENOUT;CLOSEOUT;}//按键处理函数void key_deal(int key){switch(key){case 0x60: //START--开始计时{ BTCTL = BT_ADL Y_2;IE2 |= BTIE;_EINT();}break;case 0x50: //STOP -- 停止BTCTL |= BTHOLD; break;case 0x30: //CLEAR--缓冲区清零{ hour = 0;min = 0;sec = 0;ms = 0;}break;default : break;}display();}//主函数void main( void ){int key;// Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;FLL_CTL0 |= XCAP18PF;Init();while(1){if((key = P2IN & 0x70)!=0x70){delay_ms(10);if((key = P2IN & 0x70)!=0x70){ key_deal(key);}}display();}}//BT中断服务程序,2ms计时#pragma vector = BASICTIMER_VECTOR__interrupt void BT_ISR(){count ++;if(count == 5){ count = 0;ms ++;}if(ms == 100){ms = 0;sec ++;if(sec == 60){sec = 0;min ++;if(min == 60){min = 0;hour ++;if(hour == 24)hour = 0;}}}}。
基于MSP430单片机的电子时钟设计说明
基于MSP430单片机的电子时钟设计说明
一、需求分析
本设计的目标是基于MSP430单片机来设计一款电子时钟。
电子时钟
可以用来显示当前的时间,比如时、分、秒;同时还具有闹钟功能,即可
以设置每天一些时刻提醒用户,提醒用户做件事情。
设计时,要注意以下
几个方面:
1、时间流逝的准确性:电子时钟的核心功能是准确显示当前的时间,即时针、分针、秒针在正确地流逝;同时也要考虑时间的准确性,用户可
以设置任意时间,时钟计时要按照设置的时间进行计时。
2、系统稳定性:电子时钟的系统稳定性极其重要,不能因为短暂的
停电等扰动,导致系统失去稳定,时间乱跳。
3、外观设计:在外观设计方面,电子时钟要求具有精美、简约的外观,而且要求清晰显示时间内容,用户可以视觉上感受时间的运行,同时
操作简单,操作界面友好;同时,为了满足用户的要求,要能够设置闹钟,并且有红色指示灯和蜂鸣器来提醒。
二、设计要求
1、MSP430单片机:采用MSP430F169作为主控制器,芯片的16位CPU具有较强的数据处理能力,可以有效调整时间性能,满足电子时钟计
时要求。
2、时间及闹钟设置:采用4×4键盘模块作为时间及闹钟设置。
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);
MSP430F149的时钟操作详解
MSP430F149的时钟操作1)时钟图解图1 内部时钟图解2)内部时钟MSP430F149系统开启时,默认的时钟来源是内部的DCO,然后可以通过用户的软件设置切换到外部的晶体振荡器。
而MSP430F149可以选择的时钟来源可以有三个:1.来自外部高速晶振振动器。
2.来自外部的低速晶振振荡器,其实低速晶体振荡器也可以外接高速晶体振荡器跟第一个一样。
3.来自单片机内部的DCO时钟。
内部的DCO还可以通过DCOX和RSELX来选择其振荡频率。
而初始时,DCOX=3,RESLX=4。
其频率选择如下图:图2 DCO频率选择其中DCO一个为增加10%,RSEL一格增加25%。
MSP430F149内部有三种时钟:1.主系统时钟(MCLK);主系统时钟可以有三个来源。
2.子系统时钟(SMCLK);子系统时钟可以有两个来源:外部高速和DCO。
3.辅助系统时钟(ACLK);只有一个来源:外部低速。
他们都可以进行各自分频。
3)时钟的寄存器。
1.DCOCTLDCOx:选择DCO振荡频率(和RSELx共同决定)。
MODx:调制器的选择。
2.BCSCTL1XT2OFF:是否关闭高频震荡器。
0开;1关。
XTS:选择低速晶体振荡器的工作方式(其实低速晶体振荡器也可以接成高速晶体的)。
0为低;1为高。
DIVAx:选择对辅助系统时钟分频。
XT5V:无用。
RSELx:选择DCO的频率(和DCOx共同决定)。
3.BCSCTL2SELMx:选择主系统时钟的来源。
DIVMx:主系统时钟的分频。
SELS:选择子系统时钟来源。
DIVSx:选择子系统时钟的分频。
DCOR:DCO选择用片内电阻还是用外接电阻。
默认内接。
4.IE1OFIE:检测晶体振荡器是否正常工作使能控制。
0关;1开。
(产生的是非可屏蔽中断。
)5.IFG1:OFIFG:晶体振荡是否正常工作中断标志位。
(就算不打开使能端也只能置位,打开使能端只是能够进行打断CPU,使CPU进入中断程序。
MSP430单片机秒表程序(完整)
MSP430单片机"秒表" 程序(完整)/*******************************************************基于MSP430F449单片机的秒表*功能:秒计时,8位数码管显示,包括小时、分钟、秒和毫秒*此程序同样适用于其他系列单片机*by:duyunfu1987******************************************************/#include "msp430x44x.h"#define DPYOUT P3OUT //数码管的段选输出口#define DPYCOM P2OUT //38译码器的ABC输入#define OPENOUT P2OUT |= BIT3 //74HC573使能锁存段选#define CLOSEOUT P2OUT &= ~BIT3//74HC573无效int hour,min,sec,ms; //缓冲区定义,小时、分钟、秒、毫秒int count = 0; //2ms计数,计到5时ms增1//共“阴”极数码管的码表unsigned char LED7CC[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//延时n(us)void delay_us(int n){ while(n-- >0)_NOP();}//延时n(ms)void delay_ms(int dms){ int i;while(dms-- >0){ for(i=0;i<250;i++);}}//初始化缓冲区与IO口void Init(){hour = 0;min = 0;sec = 0;ms = 0;P2SEL = 0;P3SEL = 0;P2DIR |= BIT0+BIT1+BIT2+ BIT3;//A B C 使能位P2DIR &= ~(BIT4+BIT5+BIT6); //按键P3DIR = 0xff;P3OUT = 0x00;}//8位数码管动态显示函数void display(){DPYOUT = 0;_NOP();DPYOUT = LED7CC[ms%10]; DPYCOM = 7;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[ms/10]; DPYCOM = 6;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[sec%10]|0x80; DPYCOM = 5;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[sec/10]; DPYCOM = 4;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[min%10]|0x80; DPYCOM = 3;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[min/10]; DPYCOM = 2;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[hour%10]|0x80; DPYCOM = 1;OPENOUT;CLOSEOUT;DPYOUT = LED7CC[hour/10]; DPYCOM = 0;OPENOUT;CLOSEOUT;}//按键处理函数void key_deal(int key){switch(key){case 0x60: //START--开始计时{ BTCTL = BT_ADL Y_2;IE2 |= BTIE;_EINT();}break;case 0x50: //STOP -- 停止BTCTL |= BTHOLD; break;case 0x30: //CLEAR--缓冲区清零{ hour = 0;min = 0;sec = 0;ms = 0;}break;default : break;}display();}//主函数void main( void ){int key;// Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;FLL_CTL0 |= XCAP18PF;Init();while(1){if((key = P2IN & 0x70)!=0x70){delay_ms(10);if((key = P2IN & 0x70)!=0x70){ key_deal(key);}}display();}}//BT中断服务程序,2ms计时#pragma vector = BASICTIMER_VECTOR__interrupt void BT_ISR(){count ++;if(count == 5){ count = 0;ms ++;}if(ms == 100){ms = 0;sec ++;if(sec == 60){sec = 0;min ++;if(min == 60){min = 0;hour ++;if(hour == 24)hour = 0;}}}}。
基于MSP430单片机的时钟系统设计
数寻址 。它采用精 简指令集 结构 , 有 2 拥 7条 内核指 令 、 量的 大
模 拟 指 令 、 量 的 寄 存 器 以及 片 内 数 据 存 储 器 , 以 用 来 参 加 大 可
多 种 运 算 。另 外 , 有 高 效 率 的查 表 指 令 , 8MH 还 在 z晶体 的 驱 2
系统 硬 件 设 计
s j n h Fx e uei i y
塑
基于 MS 4 0单 片机 的时钟 系统设 计 P3
雷恩 思 .
( 西 省通 用技 术 工程 学 校 , 江 江西 九 江 30 0) 3 36 摘 要: 简要 介 绍 了 MS 4 0单 片机 及 利用 这 种 单 片机 进行 时钟 系统 设 计 的意 义 , 一 步详 细探 讨 了 MS 4 0 片机 时 钟 系统 的设 P3 进 P3单
上 改 变 了 传 统 的 控 制 系 统 设 计 思 想 , 以 前 必 须 由模 拟 电 路 构 如 图 1 示 。 所 和 数字 电路 实现 的大 部 分 功 能 ,现 在 都可 以用 单 片机 通 过 软 件 的 方 法 来 实 现 , 件 代 替 硬 件 逐 渐 成 为 一 种 潮 流 和 趋 软
能 力 , 和 设 计 时 的 防 水 闸 门一 致 , 且 必 须 做 到 密 封 良好 , [] 陈梁. 山井 下防水 门的结构型式 与特点 [ 矿 山机械 ,9 61 要 而 避 3 矿 力. 19 () 免漏 水。 []姚 正 宽 . 4 煤矿 开采 与井 下防 治水 [ . 刀 同煤 科 技 ,96s ) 19 (1 () 水 门一 定 要 装 有 观 测 水 压 的 设 备 , 设 置 放 水 管 和 [ ] 刁志 军 , 恩 强, 国星 . 5防 要 5 张 苏 水体 下 开采 中 防水 墙 的设计 应 用 [] J. 防水 闸门。
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单片机的实时时钟设计是一个简单而有趣的项目,可以将当前的时间以数码管的形式显示出来。
本文将介绍如何使用MSP430单片机和数码管来实现实时时钟,包括时钟芯片、显示部分的接线和编程等方面。
首先,我们需要准备的材料和工具有:1. MSP430单片机开发板(例如MSP-EXP430G2 LaunchPad)2.DS1302实时时钟芯片3.4位共阳数码管(例如TM1640)4.杜邦线若干5.面包板6.12MHz晶振7.调试器和编程软件(例如MSP-FET430UIF和MSP430-GCC)接下来,我们开始进行实时时钟的设计。
1.硬件连接:a.将MSP430单片机开发板连接到计算机,并打开编程软件。
b.将DS1302实时时钟芯片插入面包板,并根据其引脚定义连接到MSP430单片机的端口。
c.将4位共阳数码管插入面包板,并根据其引脚定义连接到MSP430单片机的端口。
2.编程设计:a.在编程软件中创建一个新的项目,选择MSP430单片机的适当型号,并设置时钟频率为12MHz。
b.导入DS1302和TM1640的相关库文件,并进行必要的初始化设置。
c.配置MSP430单片机的端口,使其与DS1302和TM1640的引脚连接匹配。
d.编写程序代码,实现实时时钟的功能,包括获取当前时间、将时间转换为数码管的显示格式以及控制数码管进行显示。
3.调试和测试:a.将MSP430单片机从计算机中断开,并将其与电源连接,确保其正常运行。
b.观察数码管是否正确显示当前时间,包括小时、分钟和秒数。
c.如果有错误或不完善的地方,重新调试和修改程序代码,直到实时时钟正常工作。
通过上述步骤,我们可以成功地设计一个基于MSP430单片机的实时时钟(数码管显示)。
这个项目可以作为学习和实践嵌入式系统和单片机编程的绝佳机会,同时也可以作为一个有用和有趣的作品展示给别人。
这个设计还可以进一步扩展和改进,例如添加日期显示功能、设置闹钟功能等。
基于MSP430单片机的电子时钟设计
基于MSP430单片机的电子时钟设计电子时钟是一种使用数字显示时钟时间的设备,它通常基于单片机这样的微控制器。
本文将介绍基于MSP430单片机的电子时钟设计。
首先,我们需要确定设计的目标和功能。
电子时钟主要有如下的功能:1.显示时间:时、分、秒2.显示日期:年、月、日3.设置时间和日期4.声控灯光:根据环境光线亮度调节屏幕亮度5.闹钟功能:设定闹钟时间并响铃提醒6.温度显示:显示当前室内温度接下来,我们将逐步设计和实现这些功能。
1.选择硬件平台MSP430是一款基于16位RISC架构的低功耗单片机,它被广泛应用于嵌入式系统的开发。
我们选择MSP430单片机作为我们的硬件平台。
具体型号可以根据自己的需求进行选择。
2.硬件设计电子时钟设计中的硬件包括MSP430单片机、显示模块、温度传感器、声音传感器、时钟电路等。
通过合适的接口将这些模块连接起来。
3.软件设计电子时钟的软件设计包括两个部分:主控程序和外围设备的驱动程序。
我们将使用C语言进行编程。
主控程序主要包括以下几个功能模块:-时钟模块:通过MSP430单片机的定时器模块实现时钟的计时和显示。
-温度模块:通过温度传感器获取当前室内温度,并将其显示在屏幕上。
-日期和时间模块:通过设置模块实现对日期和时间的设置和显示功能。
-声控灯光模块:通过声音传感器检测环境光线亮度,并自动调节屏幕亮度。
-闹钟模块:设置闹钟时间并在指定的时间响铃提醒。
外围设备的驱动程序主要是对显示模块、温度传感器和声音传感器的驱动和接口设计。
4.软硬件调试和测试5.系统封装和优化完成软硬件调试测试后,我们可以将所有的电子设备安装在一起,并进行系统封装。
在封装过程中,我们需要确保电子设备的连接稳定和正确,并保持良好的通风和散热。
在封装完成后,我们还可以对系统进行一些优化,例如增加使用者友好的界面、优化显示效果等。
综上所述,基于MSP430单片机的电子时钟设计涉及硬件和软件两个方面。
通过合理的硬件连接和编写高效的控制程序,我们可以实现时钟的显示、日期和时间的设置、闹钟功能、温度显示等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//****************************************/*基于msp430写的简易时钟程序,1602显示,可实现时间初始值设定,按键调整时间,时分秒走时等。
因为初学430,故而写个时钟熟悉一下各个模块,年月日等只用了静态数组显示,下次再用时钟芯片写个正式版,与大家分享,共同学习!*///*******************************************#include <msp430x14x.h>#include "lcd1602.h"#include "key.h"#define uint unsigned int#define uchar unsigned charuchar miaoflag=1;uchar fenflag=0;uchar shiflag=0;unsigned char table0[]="DYS-2013-08-03";//*****************定时器A初始化**************************void Timer_A_init(){TACTL=TASSEL0+TACLR;//设置定时器A控制寄存器,TASSEL0为选择辅助时钟aclk//TACLR为清除定时器A计数器CCTL0=CCIE; //设置捕获/比较控制寄存器;CCIE使能捕获比较中断CCR0=16384*2; //设置捕获/比较寄存器,初始值为16384,对于32768hz的频率来说,即为0.5s;TACTL |=MC0; //使记计模式为增模式;_EINT(); //使能中断,这是一个c编译器所支持的内部过程;}//***********************设定初始时间****************************void timeset_init()//初试时间设定11:11:11{miaoflag=11;fenflag=11;shiflag=11;}//*****************判断按键是否按下******************void anjian(void){while(1){//keyflag=0;delay2();if((P3IN&0x30)&&((P3IN&0x30)!=48)){delay2();if((P3IN&0x30)&&((P3IN&0x30)!=48)){switch(P3IN&0x30){case 16: fenflag++;//这部分可酌情添加按键以实现加减时分秒等break;case 32: shiflag++;break;default :break;}}}}}//******************主函数***************************************void main(){uchar flag;// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;lcd1602_init();Timer_A_init();key_init();display2(0x80,table0);timeset_init();anjian();}//********************中断函数*******************************#pragma vector=TIMERA0_VECTOR //430中断表达形式;__interrupt void Timer_A(void){uchar miaoge,miaoshi,fenge,fenshi,shishi,shige;miaoge=miaoflag%10+0x30;miaoshi=miaoflag/10+0x30;fenge=fenflag%10+0x30;fenshi=fenflag/10+0x30;shige=shiflag%10+0x30;shishi=shiflag/10+0x30;DisplayOneChar(7,1,miaoshi);DisplayOneChar(8,1,miaoge);DisplayOneChar(6,1,':');DisplayOneChar(5,1,fenge);DisplayOneChar(4,1,fenshi);DisplayOneChar(3,1,':');DisplayOneChar(2,1,shige);DisplayOneChar(1,1,shishi);miaoflag++;if(miaoflag==60){miaoflag=0;fenflag++;}if(fenflag==60){fenflag=0;shiflag++;}}//***************************************************8附录上述用到的几个自己写的头文件//key.h头文件#include <msp430x14x.h>#define uint unsigned int#define uchar unsigned charuchar keyflag;/*******************************************函数名称:delay功能:用于消抖的延时参数:无返回值:无********************************************/void delay2(void){uint tmp;for(tmp = 12000;tmp > 0;tmp--);}//*******************************void key_init(){P3DIR &=~(BIT5+BIT4);//按键P3.5、P3.4}//*************************************************//1602.h头文件//MSP430写的1602液晶显示程序2010-07-11 01:08//硬件连接P2 数据口P6.5---E P6.4---RW P6.3----RS#include"msp430x14x.h"#define uint unsigned int#define rw(x) P3OUT=(P3OUT&(~BIT6))|(x?BIT6:0);#define uchar unsigned char//**************延时***********************************void delay(uint z){uint t,y;for(t=z;t>0;t--)for(y=110;y>0;y--);}//*******写命令*****************************************void write_com(unsigned char com){P6OUT&=~BIT3;//作为RS选择端低电平有效rw(0);P2OUT=com;delay(1);P6OUT|=BIT5;delay(5);P6OUT&=~BIT5;}//*******写数据*************************************************** void write_data(unsigned char date){P6OUT|=BIT3;//作为RS选择端高电平有效劳rw(0);P2OUT=date;delay(1);P6OUT|=BIT5;//作为E选择端=1;delay(5);P6OUT&=~BIT5;}//********初始化******************************************void lcd1602_init(){P6DIR=0xff;//P3输出作控制口P6SEL=0;P6OUT=0x00;P6OUT&=~BIT5;//EP6OUT&=~BIT3;//RSP2DIR=0XFF;//P4输出作数据口//P2SEL=0; //P2OUT=0X00;write_com(0x38);//显示模式设置write_com(0x0c);//开显示,不显光标write_com(0x06);//数据地址指针write_com(0x01);//清屏_BIS_SR(GIE);//两个开总中断的方法随便用哪一个// _EINT();}//***************数组静态显示********************************** void display2(unsigned char x,unsigned char *p){unsigned char y=0; //y要给其初值0否则出乱码write_com(x);while(p[y]!=0x00){write_data(p[y]);y++;delay(15);}}//*************************************************void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;write_com(X);write_data(DData);}//************************结束*********************************。