大家好,
我正在 msp430f5529中进行ADC编程。 但我对我在下面所粘贴的计划有一些疑问。
每当产生中断时,CPU都会从低功耗模式0中出来并跳转到ISR,在ISR中,CPU处于活动状态,因此我们为什么要使用此指令“__BIC_SR_REGISTER_ON_EXIT (LPM0_bits)”
因为 CPU仅处于活动状态。
#include <MSP4S.h>
//unsigned int值=0;
内部主(无效)
{
WDTCTL = WDTPW + WDTHOLD; //停止WDT
ADC12CTL0 = ADC12SHT02 + ADC12ON; //采样时间,ADC12开启
ADC12CTL1 = ADC12SHP; //使用采样计时器
ADC12IE = 0x01; //启用中断
ADC12CTL0 || ADC12ENC;
P6SEL |= 0x01; // WFP 6.0 ADC选项选择
P1DIR |= 0x01; // WFP 1.0 输出
同时(1)
{
ADC12CTL0 |= ADC12SC; //开始采样/转换
__bis_sr_register(LPM0_bits + GIE); // LPM0,ADC12_ISR将强制退出
__no_operation(); //用于调试器
}
}
#pragma vector = ADC12_vector
__interrupt void ADC12_ISR(void)
{
//向量 6: ADC12IFG0
int值=ADC12MEM0;
IF (ADC12MEM0 >= 2048) // ADC12MEM = A0 > 0.5AVcc?
P1OUT |= BIT0; // WFP 1.0 = 1.
否则
P1OUT &=~BIT0; // WFP 1.0 = 0
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //退出活动CPU
}
#include <MSP430.h>//unsigned int value=0;int main(void){ WDTCTL = WDTPW + WDTHOLD; //停止WDT ADC12CTL0 = ADC12SHT02 + ADC12ON; //采样时间, ADC12CTL1上的ADC12 = ADC12SHP; //使用采样计时器 ADC12IE = 0x01; //启用中断 ADC12CTL0 |= ADC12ENC; P6SEL |= 0x01; // WFP 6.0 ADC选项选择 P1DIR |=0x01; // WFP 1.0 输出
同时(1) { ADC12CTL0 |= ADC12SC; //开始采样/转换
__bis_sr_register(LPM0_bits + GIE); // LPM0,ADC12_ISR将强制退出 __NO_operation(); //用于调试器 }
}
#pragma vector = ADC12_vector__interrupt void ADC12_ISR(void){ //向量 6: ADC12IFG0
int值=ADC12MEM0; IF (ADC12MEM0 >= 2048) // ADC12MEM = A0 > 0.5AVcc? P1OUT |= BIT0; // WFP 1.0 = 1 ELSE P1OUT &=~BIT0; // WFP 1.0 = 0
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //退出活动CPU
}