51单片机串口与ESP8266的通信问题
void Uart2_init(void)
{
P_SW2 &= S2_S0; // 串口用p1.1,p1.0
S2CON = 0x10; //0001_0000: 方式0,允许接受
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值//T2用作波特率发生器。
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR |= 0x14; //T2为1T模式, 并启动定时器2
IE2 = 0x01; //使能串口2中断
EA = 1;
}
STC15单片机串口2与ESP8266通信。以上函数为串口2设置。
UART 中断服务程序
-----------------------------*/
void Uart2() interrupt 8 using 1
{
IE2 = 0x00; //关闭串口中断
if (S2CON & S2RI) //接受完一帧数据//S2RI = 1 ; 接受完成标志
{
S2CON &= ~S2RI; //清除S2RI位
Rec_Uart2_Buf[index++] = S2BUF; //接受缓冲器数据存入字符数组
test = 'T';
busy = 0;
}
if (S2CON & S2TI) //发送完一帧数据//S2TI = 1 : 发送完成标志。
{
S2CON &= ~S2TI; //清除S2TI位
test1 = 'M';
}
IE2 = 0x01; //打开串口中断
}
以上为串口2发送与接收中断处理函数,中断号为8。
单片机向ESP8266发送AT指令. AT指令是一个字符串,通过串口2发送一个一个字符来实现。
如下为发送字符函数:
void uart2_SendData(uchar dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat;
busy = 1;
S2BUF = ACC;
Uart1_Send_Data(test1);
Uart1_Send_Data(test);
}
其中,Uart1_Send_Data函数用来显示测试字符变量的值,在串口调试助手中显示。
实验表明,每次调用uart2_SendData函数,都能正确的引起发送和接受中断。test1和test能被正确的赋值。
串口助手中能显示M和T的值。
问题是: 如果接受中断中, 语句为: test =S2BUF. 那么 test的值,不是一个正确的字符。
查阅有关串口通信的资料,也有一些人出现相似的问题,请问大侠,该问题如何解决????