大家好,我又来问愚蠢的问题了。
下面是ADC12多通道转换例程的中断响应程序:
#pragma vector = ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
results[0] = ADC12MEM0; // 保存第一通道值
results[1] = ADC12MEM1; // 保存第二通道值
results[2] = ADC12MEM2; // 保存第三通道值
results[3] = ADC12MEM3; // 保存第四通道值
}
但是程序在实际测试中会出现一个问题,当执行完一次中断响应之后,还会继续执行中断响应,results[]被不断赋值,并不会返回主程序进入休眠状态。
我现在想执行完中断响应之后回到主程序,应该如何修改代码?中断响应程序是不是需要修改?
还有,返回主程序会指向哪一句呢?
谢谢各位!
附程序如下:
void main(void)
{
do{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗
P7SEL |= 0x03; // 使能时钟端口
UCSCTL6 |= XCAP_3; // 配置晶振电容
while ( !(SFRIFG1 &OFIFG)) // 判断晶振是否起振
{
UCSCTL7 &= ~(XT1LFOFFG + DCOFFG); // 清除失效标志位
SFRIFG1 &= ~OFIFG; // 清除失效中断标志位
}
UCSCTL4 = SELM__DCOCLK + SELS__DCOCLK; // 选择时钟源
P7DIR &= ~(BIT4 + BIT5); // P6.7口A7输入
P7SEL |= (BIT4 + BIT5); // P7口第二功能
ADC12CTL2 = ADC12RES_2 + ADC12REFOUT; // AD基本配置
ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT03 + ADC12REFON + ADC12REF2_5V;
ADC12MCTL0 |= ADC12SREF_1 + ADC12INCH_10; // 采样温度
ADC12MCTL1 |= ADC12SREF_1 + ADC12INCH_11; // 采样VACC/2
ADC12MCTL2 |= ADC12INCH_12; // 通道12输入
ADC12MCTL3 |= ADC12INCH_13 + ADC12EOS; // 通道13输入
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3; // 选择转换模式
for (i=0;i<0xFFFF;i++); // 等待基准电压建立
UCSCTL8 |= MODOSCREQEN;
ADC12IE |= 0X08; // 使能通道4中断
ADC12CTL0 |= ADC12ENC; // 开启转换
_EINT(); // 打开总中断
ADC12CTL0 |= ADC12SC; // 转换开始
LPM3; // 进入低功耗3
}while(1);
}
此帖出自
小平头技术问答
一周热门 更多>