这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » msp430 请问msp430睡眠问题。

共2条 1/1 1 跳转至

msp430 请问msp430睡眠问题。

院士
2006-09-17 18:14:16     打赏
msp430 请问msp430睡眠问题。



关键词: msp430     请问     睡眠     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 请问MSP430睡眠后,能否在中断中将它唤醒,让它们在主程序中继续执行。#include <MSP430x41x.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
IE2 |= BTIE; // Enable BT interrupt
BTCTL = BTDIV+BTIP2+BTIP1+BTIP0; // 2s Interrupt
P1DIR = 0xFF; // All P1.x outputs
P1OUT = 0; // All P1.x reset
P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
P3DIR = 0xFF; // All P3.x outputs
P3OUT = 0; // All P3.x reset
P4DIR = 0xFF; // All P4.x outputs
P4OUT = 0; // All P4.x reset
P5DIR = 0xFF; // All P5.x outputs
P5OUT = 0; // All P5.x reset
P6DIR = 0xFF; // All P6.x outputs
P6OUT = 0; // All P6.x reset
_EINT(); // Enable interrupts

while(1)
{
int i;
_BIS_SR(LPM3_bits); // Enter LPM3
P5OUT |= 0x02; // Set P5.1 LED on
for (i = 5000; i>0; i--); // Delay
P5OUT &= ~0x02; // Clear P5.1 LED off
}
}

// Basic Timer interrupt service routine
interrupt[BASICTIMER_VECTOR] void basic_timer(void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
_BIC_SR_IRQ(LPM3_bits); 没定义
是不是 _BIC_SR_(LPM3_bits);
可改了后程序就在一直睡眠,主程序不运行了为什么? 1: 是_BIC_SR_IRQ(LPM3_bits);
如果提示没定义,请下在最新版软件。126b以后的版本才有。 2: :) 刘工我的1。26A里就有LPM3_EXIT了。 3: 对对,是126(含)及以后的。 4: 如何在中断里,把mcu 唤醒让系统在中断反回后主程序继续运行。 5: :) 1。26以上的在中断程序的最后加一个LPM3_EXIT就行了!低版本的好像要编辑一个汇编的文件,然后由c程序调用!我原来是在IAR的例子文件中找到的汇编程序!你看看你的IAR文件夹中看有没有吧! 6: 可是使用LPM_EXIT()好象没有用?(调试环境下) 7: 126b以后的版本,哪儿可以下载 8: 资料库里热门下载有306版(126b)。
看看例子的用法。
#include "MSP430x44x.h" // Standard Equations

static unsigned int ADCresult;
static unsigned long int DegC, DegF;

void main(void)
{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_6; // Setup ADC12, ref., sampling time
ADC12CTL1 = SHP; // Use sampling timer
ADC12MCTL0 = INCH_10+SREF_1; // Select channel A10, Vref+
ADC12IE = 0x01; // Enable ADC12IFG.0

for (i=0; i<0x3600; i++) // Delay for reference start-up
{
}

ADC12CTL0 |= ENC; // Enable conversions
_EINT(); // Enable interrupts

while(1)
{
ADC12CTL0 |= ADC12SC; // Start conversion
_BIS_SR(LPM0_bits); // Enter LPM0

// DegC = (Vsensor - 986mV)/3.55mV
// Vsensor = (Vref)(ADCresult)/4095)
// DegC -> ((ADCresult - 1615)*704)/4095
DegC = ((((long)ADCresult-1615)*704)/4095);
DegF = ((DegC * 9/5)+32); // Calculate DegF
_NOP(); // SET BREAKPOINT HERE
}
}

interrupt[ADC_VECTOR] void ADC12ISR (void)
{
ADCresult = ADC12MEM0; // Move results, IFG is cleared
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0
}

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]