Ai8A8K64D4串口相关问题
本帖最后由 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 = S2BUF;
if(RX_buffer=='+')//当第0个数据位是+号时,开始接受数据
{
RX_num++;
if(RX_buffer=='-')//如果最后一个数据为-号时,就表示结束
{
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);
Print(1,0, RX_buffer);
Print(2,0, RX_buffer);
Print(3,0, RX_buffer);
Print(4,0, RX_buffer);
Print(5,0, RX_buffer);
Print(6,0, RX_buffer);
Print(7,0, RX_buffer);
Print(8,0, RX_buffer);
Print(9,0, RX_buffer);
Print(10,0, RX_buffer);
Print(11,0, RX_buffer);
Print(12,0, RX_buffer);
Print(13,0, RX_buffer);
Print(14,0, RX_buffer);
Print(15,0, RX_buffer);
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);
}
接收
S2CON &=0x52;
发送
S2CON &=0x51;
试一下行不? 邮箱 发表于 2024-11-12 17:39
接收
S2CON &=0x52;
发送
不行哦{:5_358:} 没有联动过{:4_168:}{:4_168:} 本帖最后由 邮箱 于 2024-11-12 19:47 编辑
EA = 1; 写了???
发完整一点程序
仿真看卡在哪了
邮箱 发表于 2024-11-12 19:45
EA = 1; 写了???
发完整一点程序
EA=1在程序初始化时,就打开了 欢迎哈哈哈3 发表于 2024-11-12 20:39
EA=1在程序初始化时,就打开了
完整程序,只有等下了,我明天再传的 zhange 发表于 2024-11-12 19:42
没有联动过
好吧{:5_358:} wnagming 发表于 2024-11-12 20:41
发送接收同时执行,中断方式会强行停止未完成的操作,考虑将波特率设置小一点,或者使用串口DMA。 ... 欢迎哈哈哈3 发表于 2024-11-12 21:11
程序中已经设置过,当进入中断就关闭串口中断的,中断程序结束后再串口中断的
页:
[1]
2