msp430g2553学习笔记 联系客服

发布时间 : 星期三 文章msp430g2553学习笔记更新完毕开始阅读dc861e7d647d27284b735165

压的高低,有CAOUT输出:

//主要功能是比较两个输入信号的大小关系

#include

void delay(void); // Software delay

void main (void) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

CACTL2 = P2CA4; // CA1/P1.1 = +comp 正输入端信号选择CA1,负输入端信号不连接外部输入信号

//其他位的设置为默认:比较器输出不滤波 , CAOUT为比较器的输出结果

CCTL0 = CCIE; // CCR0 interrupt enabled

TACTL = TASSEL_2 + ID_3 + MC_2; // SMCLK/8, cont-mode

_EINT(); // enable interrupts

while (1) // Loop {

//比较器A控制寄存器1 CACTL1采用的是默认设置:参考电压源VCAREF加到比较器的正输入端,内部参考源关,比较器关,

//中断不使能

CACTL1 = 0x00; // No reference voltage

_BIS_SR(LPM0_bits); // Enter LPM0

CACTL1 = CAREF0 + CAON; // 参考源为0.25*Vcc, Comp. on

_BIS_SR(LPM0_bits); // Enter LPM0

CACTL1 = CAREF1 + CAON; // 参考源为0.5*Vcc, Comp. on

_BIS_SR(LPM0_bits); // Enter LPM0

CACTL1 = CAREF1 + CAREF0 + CAON; //参考源为三极管的阀值电压 0.55V, Comp. on

_BIS_SR(LPM0_bits); // Enter LPM0 } }

// Timer A0 interrupt service routine

#pragma vector=TIMER0_A0_VECTOR

__interrupt void Timer_A (void) {

_BIC_SR_IRQ(LPM0_bits); // Clear LPM0 bits from 0(SR) }

7,也可以用比较器A监视供电电压,用0.25VCC和三极管的阀值电压0.55V进行比较,从而监视供电电压的高低,如果电压低于某个值时,可以做某种动作比如报警电池电量过低等。

(七),低功耗模式

1,TI msp430单片机是一个特别强调超低功耗的单片机系列。对于低功耗的实现,丰富的

中断和合理的时钟系统是必须的,另外相对独立的外设,可以不在CPU的干预下独立地工作,这样减小了CPU的工作时间,也大幅降低了系统功耗。

2,msp430能够用中断迅速把CPU从低功耗模式中唤醒,唤醒时间小于1us。这就保证了系统的低功耗。让CPU工作在脉冲状态,最大限度地让CPU处于休眠状态,只有在一些需要CPU干预的操作或计算时,才把CPU唤醒。另外,把一些无关的外围模块也都关闭,使一些需要的模块尽量单独工作,从而可以把CPU休眠。合理地利用中断,在需要的时间唤醒cpu。

3,msp430应用系统价格和电流消耗等因素会影响CPU与外围模块对时钟的需求,所以系统使用不同的时钟信号:ACLK, MCLK, SMCLK。用户通过程序可以选择低频或高频,这样可以根据实际需要来选择合适的系统时钟频率,这3种不同的频率的时钟输出给出不同的模块,从而更合理地利用系统的电源,实现整个系统的超低功耗。 4,单片机的工作模式有:活动模式是(AM),低功耗模式0(LPM0)~低功耗模式4(LPM4)。不同的低功耗模式禁止不同的模块,适应不同的需求。

5,各种低功耗模式的配置有控制位:SCG1,SCG2,OscOff, CPUOff由软件来配置。而各种低功耗模式又可通过中断的方式会到活动模式。

在CCS的编译系统中,已经做好了各种低功耗模式的宏定义,在软件中直接调用就可以了,宏定义如下:

#ifdef __ASM_HEADER__

#define LPM0 (CPUOFF)

#define LPM1 (SCG0+CPUOFF)

#define LPM2 (SCG1+CPUOFF)

#define LPM3 (SCG1+SCG0+CPUOFF)

#define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF)

#else

#define LPM0_bits (CPUOFF)

#define LPM1_bits (SCG0+CPUOFF)

#define LPM2_bits (SCG1+CPUOFF)

#define LPM3_bits (SCG1+SCG0+CPUOFF)

#define LPM4_bits (SCG1+SCG0+OSCOFF+CPUOFF)

#include \

#define LPM0 _bis_SR_register(LPM0_bits)

#define LPM0_EXIT _bic_SR_register_on_exit(LPM0_bits)

#define LPM1 _bis_SR_register(LPM1_bits)

#define LPM1_EXIT _bic_SR_register_on_exit(LPM1_bits)

#define LPM2 _bis_SR_register(LPM2_bits)

#define LPM2_EXIT _bic_SR_register_on_exit(LPM2_bits)

#define LPM3 _bis_SR_register(LPM3_bits)

#define LPM3_EXIT _bic_SR_register_on_exit(LPM3_bits)

#define LPM4 _bis_SR_register(LPM4_bits)

#define LPM4_EXIT _bic_SR_register_on_exit(LPM4_bits)

#endif

6,具体的例子就不再举了,就是在CPU不需要工作的时候进入低功耗模式,在需要工作的时候,通过中断唤醒。

下面说说一般的低功耗的原则:

(1),最大化LPM3的时间,用32KHz晶振作为ACLK时钟,DCO用于CPU激活后的突发短暂运行。

(2),用接口模块代替软件驱动功能。

(3),用中断控制程序运行。