MSP430F5529A中断相应程序的退出

2019-03-24 10:04发布

大家好,我又来问愚蠢的问题了。

下面是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);

  }





此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
okhxyyo
2019-03-24 18:32
< 记得好像是进入中断程序后有个标记位会被标记表示响应中断,中断跑完后是要清的,不然就认为一直处于要响应中断的状态。学艺不精加好久没碰这些东西了记不清啦。你朝这个方向查查芯片资料看看吧。

一周热门 更多>

相关问题

    相关文章