小白求助,写了一个小程序,怎么才能跳出中断啊,求各位大佬解惑!代码如下:

2019-07-15 15:48发布

#include <msp430.h>
void GPIO_Init();
void P1_IODect();
void P2_IODect();
void TURN_Left();
void TURN_Right();
void tiMER_A0_1();
void TIMER_A1_1();
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;
    GPIO_Init();
    TIMER_A0_1();
    TIMER_A1_1();
    _enable_interrupts();
}
void GPIO_Init(){
P1DIR |= BIT0+BIT1;
P1OUT |= BIT1;
P1OUT &= ~BIT0;
P1SEL |= BIT6;
P1DIR |= BIT6;
P2DIR |= BIT0+BIT1;
P2OUT |= BIT1;
P2OUT &= ~BIT0;
P2SEL |= BIT2;
P2DIR |= BIT2;
P1REN |= BIT3;
P1OUT |= BIT3;
P1DIR &=~ BIT3;
P1IES |= BIT3;
P1IE |= BIT3;
P2REN |= BIT3;
P2OUT |= BIT3;
P2DIR &=~ BIT3;
P2IES |= BIT3;
P2IE |= BIT3;
}
void TIMER_A0_1(){
TA0CTL=0;     //清除以前的设置
TA0CTL |= TASSEL_1+MC_1; //使用子系统时钟,帧计数模式,不倍频
TA0CTL|=ID_0;    //使用子系统时钟,帧计数模式,不倍频
    TA0CCTL1 = OUTMOD_7;
TA0CCR0 = 1000;             //时钟频率为32768HZ,100HZ
TA0CCR1 = 400;             //占空比CCR1/CCR0=1/3
TA0CTL |= TACLR;
}
void TIMER_A1_1(){
TA1CTL=0;     //清除以前的设置
TA1CTL |= TASSEL_1+MC_1; //使用子系统时钟,帧计数模式,不倍频
TA1CTL|=ID_0;    //使用子系统时钟,帧计数模式,不倍频
TA1CCTL1 = OUTMOD_7;
TA1CCR0 = 1000;             //时钟频率为32768HZ,100HZ
TA1CCR1 = 400;             //占空比CCR1/CCR0=1/3
TA1CTL |= TACLR;
}
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
P1_IODect();
    P1IFG=0;
}
void P1_IODect()
{
unsigned int Push_Key=0;
Push_Key=P1IFG&(~P1DIR);
if((P1IN&Push_Key)==0)
   {
  switch(Push_Key){
  case BIT3:
   TURN_Right();
   P1IN ^= BIT3;
   break;
  default:       break;
  }
   }
}
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
P2_IODect();
    P2IFG=0;
}
void P2_IODect()
{
unsigned int Push_Key=0;
Push_Key=P2IFG&(~P2DIR);
if((P2IN&Push_Key)==0)
   {
  switch(Push_Key){
  case BIT3:  TURN_Left();
                 P2IN ^=BIT3;
                 break;
  default:       break;
  }
}
}
void TURN_Left(){
unsigned int MILL1=400;
unsigned int MILL2=400;
while((P2IN&0x04)==0){
  MILL1=MILL1+40;
  MILL2=MILL2-40;
  TA0CCR1=MILL1;
        TA1CCR1=MILL2;
}
}
void TURN_Right(){
unsigned int MILL1=400;
unsigned int MILL2=400;
    MILL1=MILL1-40;
    MILL2=MILL2+40;
    while((P1IN&0x04)==0){
        MILL1=MILL1-40;
        MILL2=MILL2+40;
        TA0CCR1=MILL1;
        TA1CCR1=MILL2;
     }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
人中狼
2019-07-15 22:40
中断里用了太多的while,那么只要条件符合,肯定就跳不出来了,不过,当while的条件不符合的时候,也应该能跳出来才对。
所以,对你的问题不是很明白,而且中断所起的作用也没有说明。

一周热门 更多>