本帖最后由 DebugLab 于 2024-11-12 22:40 编辑
大佬们问下,我用Ai8A8K64D4单片机串口2与ESP32通信,能够单独发送和接收数据,但是将两个功能合在一起接收发送数据,单片机就卡死了,这是什么原因呢
下面是程序:
void Uart2() interrupt 8 using 1
{
IE2=0X00;
if (S2CON & S2RI)//串口2接受数据
{
S2CON &=0x50;
RX_buffer[RX_num] = S2BUF;
if(RX_buffer[0]=='+')//当第0个数据位是+号时,开始接受数据
{
RX_num++;
if(RX_buffer[RX_num-1]=='-')//如果最后一个数据为-号时,就表示结束
{
flag1=1;
}
}
else {RX_num=0;flag1=0;} ////当第0个数据位不是+号时,不接受数据
if(RX_num>30) //当数据的长度超过30个,RX_num = 0
RX_num = 0;
}
if (S2CON & S2TI)//串口2发送数据
{
S2CON &=0x50;
busy2 = 0;
}
IE2=0X01;
}
主程序
for(;;)
{
if(flag1==1)//flag1=1表示数据接受完毕,将接受的数据显示在液晶屏1602上
{
Print(0,0, RX_buffer[0]);
Print(1,0, RX_buffer[1]);
Print(2,0, RX_buffer[2]);
Print(3,0, RX_buffer[3]);
Print(4,0, RX_buffer[4]);
Print(5,0, RX_buffer[5]);
Print(6,0, RX_buffer[6]);
Print(7,0, RX_buffer[7]);
Print(8,0, RX_buffer[8]);
Print(9,0, RX_buffer[9]);
Print(10,0, RX_buffer[10]);
Print(11,0, RX_buffer[RX_num-5]);
Print(12,0, RX_buffer[RX_num-4]);
Print(13,0, RX_buffer[RX_num-3]);
Print(14,0, RX_buffer[RX_num-2]);
Print(15,0, RX_buffer[RX_num-1]);
RX_num = 0;
flag1=0;
}
sprintf(dataBuf,"Temp:%3.1fC\r\n",32.5);
PrintString("AT+CIPSEND=0,12\r\n",17); //通过ESP32发送数据到手机APP上
DelayMs(1000);
PrintString(dataBuf,12);
}
|