TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F5529: 外部中断配置及使用问题

Part Number:MSP430F5529

串口初始化函数

void USART0_Init(void)
{
P3SEL |= BIT3 + BIT4; //USCI_A0 TXD/RXD 接到CH340 3.3接RX 3.4接TX 4.4TX 4.5 RX

UCA0CTL1 |= UCSWRST; //模块处于复位状态
UCA0CTL1 |= UCSSEL_1; //选择时钟源AMCLK
UCA0BR0 = 3; //分频系数:32768Hz 9600
UCA0BR1 = 0; //分频系数:32768Hz 9600

UCA0MCTL |= UCBRS_3 + UCBRF_0; //调整模块:UCBRSx=3,UCBRFx=0
UCA0CTL1 &= ~UCSWRST; //启用模块

UCA0IE |= UCRXIE; //使能中断USCI_A0 RX
}

串口中断函数

//串口中断
#pragma vector = USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0: break; //vector 0 – 无中断
case 2:
//等待TXBUF为空,将接收到的数据读回后发出
while(!(UCA0IFG&UCTXIFG));
//UCA1TXBUF = UCA0RXBUF;
//buff = UCA0TXBUF;
buff=UCA0RXBUF;
if(buff == '1')
{
Velocity_Kp+=1;
}
else if(buff == '2')
{
Velocity_Kp-=1;
}
else if(buff == '3')
{
Velocity_Ki += 0.01;
}
else if(buff == '3')
{
Velocity_Ki -= 0.01;
}//电脑串口发送
break;
case 4: break; //vector 4 – TXIFG
default:break;
}
}

编码器初始化函数

void Encoder_Init(void)
{
P2DIR &= ~(ENCODER_A_PIN | ENCODER_B_PIN);
P2REN |= ENCODER_A_PIN | ENCODER_B_PIN;
P2OUT |= ENCODER_A_PIN ;

// 配置外部中断
P2IES &= ~(ENCODER_A_PIN | ENCODER_B_PIN); // 下降沿触发
P2IE |= ENCODER_A_PIN | ENCODER_B_PIN ; // 启用中断
P2IFG &= ~(ENCODER_A_PIN | ENCODER_B_PIN ); // 清除中断标志
}

//外部中断
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
if((P2IN & ENCODER_A_PIN)==0)
{
if((P2IN & ENCODER_B_PIN) == 0)
{
pulseCount1++;
pulseCount2++;
}
else
{
pulseCount1–;
}
}
P2IFG &= ~ENCODER_A_PIN; // 清除中断标志并启用中断
if((P2IN & ENCODER_B_PIN)==0)
{
if((P2IN & ENCODER_A_PIN) == 0)
{
pulseCount1–;
}
else
{
pulseCount1++;
}
}
P2IFG &= ~ENCODER_B_PIN; // 清除中断标志并启用中断
}

使用这个后无论是正转还是反转 pulseCount2都会++

Ben Qin:

你好,你这里pulsecount2只有++的情况?

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5529: 外部中断配置及使用问题
分享到: 更多 (0)