stc89c52Rc单片机通过ATK-esp8266向pc机发送数据,pc机进而向单片机发送数据,单片机在接收发送来的数据代码
时间: 2023-07-24 08:22:52 浏览: 161
以下是STC89C52RC单片机通过ATK-ESP8266向PC机发送数据并接收PC机回传数据的示例代码:
```c
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#define FOSC 11059200L
#define BAUD 9600
// 定义ESP8266的AT指令字符串
const char AT_CWMODE[] = "AT+CWMODE=1\r\n";
const char AT_CWJAP[] = "AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n";
const char AT_CIPMUX[] = "AT+CIPMUX=0\r\n";
const char AT_CIPSTART[] = "AT+CIPSTART=\"TCP\",\"IP\",PORT\r\n";
const char AT_CIPSEND[] = "AT+CIPSEND\r\n";
// 定义单片机发送/接收缓冲区
char send_buf[50];
char recv_buf[50];
// 定义串口发送函数
void UART_send(char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
// 定义串口接收函数
char UART_receive()
{
while(!RI);
RI = 0;
return SBUF;
}
// 定义发送AT指令函数
void send_AT_command(const char* cmd)
{
int i = 0;
while(cmd[i] != '\0')
{
UART_send(cmd[i]);
i++;
}
}
// 定义接收AT指令响应函数
void receive_AT_response()
{
int i = 0;
while(1)
{
char ch = UART_receive();
if(ch == '\r')
{
continue;
}
else if(ch == '\n')
{
recv_buf[i] = '\0';
break;
}
else
{
recv_buf[i] = ch;
i++;
}
}
}
void main()
{
unsigned int baudrate;
TMOD = 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
// 设置ESP8266工作模式
send_AT_command(AT_CWMODE);
receive_AT_response();
// 连接WiFi
send_AT_command(AT_CWJAP);
receive_AT_response();
// 设置单连接模式
send_AT_command(AT_CIPMUX);
receive_AT_response();
// 建立TCP连接
send_AT_command(AT_CIPSTART);
receive_AT_response();
while(1)
{
// 发送数据
send_AT_command(AT_CIPSEND);
receive_AT_response();
sprintf(send_buf, "Hello PC\r\n");
send_AT_command(send_buf);
receive_AT_response();
// 接收数据
while(1)
{
char ch = UART_receive();
if(ch == '\r')
{
continue;
}
else if(ch == '\n')
{
recv_buf[i] = '\0';
break;
}
else
{
recv_buf[i] = ch;
i++;
}
}
// 处理接收到的数据
if(strcmp(recv_buf, "Hello MCU") == 0)
{
// 发送数据
send_AT_command(AT_CIPSEND);
receive_AT_response();
sprintf(send_buf, "Hello PC Again\r\n");
send_AT_command(send_buf);
receive_AT_response();
}
}
}
```
注意替换代码中的以下部分:
- SSID:WiFi的名称
- PASSWORD:WiFi的密码
- IP:PC机的IP地址
- PORT:PC机监听的端口号
另外,ATK-ESP8266模块需要接线连接到STC89C52RC单片机的串口,具体连接方式请参考模块的数据手册。
阅读全文