void USART3_IRQHandler()
{
char DATA=' ' ;
DATA=USART_ReceiveData(USART3);
USART_SendData(USART3,DATA);
switch(DATA)
{
case 'g': Go_Straight();break;
case 'o': Go_Opposite();break;
case 'l': PEout(5)=0; break; //LED灯亮
default : PEout(5)=1; //LED灯灭
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
}
}
这个中断服务函数的功能是,当我接收到数据时触发该中断,将接收到的数再通过串口发送出来,然后执行下面的switch语句。然后我用串口助手发送 ‘ l ’,发现能够返回数据给串口助手,但是灯不会亮。然后我把下面的default语句注释掉发现灯亮了 ,我就怀疑是case ‘ l ’后面的语句和default语句同时执行了,所以LED灯不会亮。接着我将default后面的语句改了一下,看看是不是同时执行。我改成default :PEout(6)=0;就是将另一个LED灯也点亮,发现当我这样之后再发送一个数据给单片机后,两个灯全部亮了。也就是说case ‘ l ’后面的语句和default后面的语句在我发送一个 l 后全部都执行了。我很想知道为什么会这样。
最后为了实现原本的功能我又尝试将default语句改成 default:PEout(5)=!PEout(5);发现当我输入 ‘ l ’后灯会亮,再输入其它字符例如 s ,灯就会灭掉。求大神帮我解释一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>