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的值,不是一个正确的字符。
查阅有关串口通信的资料,也有一些人出现相似的问题,请问大侠,该问题如何解决????
{
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的值,不是一个正确的字符。
查阅有关串口通信的资料,也有一些人出现相似的问题,请问大侠,该问题如何解决????
...全文
相关推荐
51单片机串口 ESP8266 机智云通信程序 (成功!!!!).rar
在本文中,我们将深入探讨如何使用51单片机通过串口与ESP8266模块进行通信,并实现与机智云(Gizwits)的连接。这个压缩包文件包含了一个成功的通信程序实例,这将帮助我们理解并实践这个过程。
ESP8266与51单片机通信.zip
这些调试助手可以实时显示51单片机和ESP8266之间的通信数据,帮助开发者监控通信过程,排查问题。
51驱动ESP8266.docx
- **串口通信稳定性**:确保51单片机与ESP8266之间的串口通信稳定可靠,避免出现丢包等问题。- **安全性**:在进行网络通信时要注意数据的安全性,避免敏感信息泄露。
51单片机驱动WiFi模块ESP8266模块的代码
**初始化与配置**: - 在51单片机的程序中,首先要设置串口波特率,通常选择9600bps与ESP8266匹配。
用51单片机与ESP8266串口通信的网络时钟,oled和数码管显示.zip
在这个项目中,我们探讨的是如何使用51单片机与ESP8266 Wi-Fi模块进行串口通信,实现一个可以获取网络时间并显示在OLED屏幕或数码管上的网络时钟。


单片机/工控
