Interrupt iexternal中断函数dspic33f的意外行为
就微控制器编程而言,我正在拼命完成的项目相当简单。我使用的dspic33fj128mc802基本上要做3件事:Interrupt iexternal中断函数dspic33f的意外行为,interrupt,microchip,mplab,dspic,Interrupt,Microchip,Mplab,Dspic,就微控制器编程而言,我正在拼命完成的项目相当简单。我使用的dspic33fj128mc802基本上要做3件事: 通过UART接收数据并将其转换为伺服电机的PWM信号 定期唤醒其ADC以检查电池电量 当输入外部中断时,更改其波特率工作值 这是引起问题的最后一点。在我的电路中我有一个开关。一个位置对应波特率值,另一个位置对应第二个值。我没有找到任何关于如何在任何电压电平变化时触发中断的文档,所以我使用上升沿和下降沿触发器,并检查我为中断选择的引脚的当前状态 此外,我的代码中还有另外两个中断
- 通过UART接收数据并将其转换为伺服电机的PWM信号
- 定期唤醒其ADC以检查电池电量
- 当输入外部中断时,更改其波特率工作值
void __attribute__((interrupt, auto_psv)) _INT0Interrupt( void )
{
IEC0bits.INT0IE = 0; // disable INT0 interrupt
if(IFS0bits.INT0IF){
if (PORTBbits.RB7 == 1){ //if pin at high logic level
INTCON2bits.INT0EP = 1; //falling edge trigger
LATAbits.LATA0 = 1;
U1BRG = 23;
}
else{ //if pin at low logic level
INTCON2bits.INT0EP = 0; //rising edge trigger
LATAbits.LATA0 = 0;
U1BRG = 1;
}
}
IFS0bits.INT0IF = 0; //clear INT0 flag
IEC0bits.INT0IE = 1; // enable INT0 interrupt
}
奇怪的行为现在->当引脚拉低时,波特率被设置在正确的值,UART通信工作正常。当拉高时,先前的通信不再工作,证明波特率已更改,但将新通信设置为新波特率也不起作用。LED状态更改也可以正常工作
需要注意的是,这个项目的所有不同部分都经过多次测试,每个部分都工作得很好,只是添加了这个外部中断,整个项目就崩溃了。微控制器工作正常,波特率值良好,电路经过测试,没有问题。。。。我不认为我不知道如何正确使用外部中断。我想你不能动态地改变波特率。因此,关闭UART模块,更改波特率,然后再次打开。这并没有改变任何事情,但感谢您的帮助!最后我在dspic上使用了两个不同的uart模块,效果很好。我想你不能动态更改波特率。因此,关闭UART模块,更改波特率,然后再次打开。这并没有改变任何事情,但感谢您的帮助!最后,我在dspic上使用了两个不同的uart模块,效果很好。