当前位置:首页 > msp430g2553学习笔记
压的高低,有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),用中断控制程序运行。
共分享92篇相关文档