关于51单片机发送和接收串口AT指令的问题,能发送AT但是接受不了是什么原因

#include<reg52.h>#include<stdio.h>#include<intrins.h>#include<string.h>intBuf_Max;uns... #include<reg52.h>
#include <stdio.h>
#include <intrins.h>
#include <string.h>
int Buf_Max;
unsigned char i=0;
char Rec_Buf[100];
bit Hand(unsigned char *a);
void CLR_Buf(void);
char code str1[]="AT\r\n";
char code str2[]="AT+CWMODE=2\r\n";
char code str3[]="AT+RST\r\n";
char code str4[]="AT+CIPMUX=0\r\n";
char code str5[]="AT+CIPSTART=\"TCP\",\"192.168.4.2\",8234\r\n";
char code str6[]="AT+CIPSEND=6\r\n";
char code str7[]="hello!\r\n";

/********************?????????***********************/
void CLR_Buf(void)
{
unsigned char k;
for(k=0;k<Buf_Max;k++)
{
Rec_Buf[k] = 0;
}
// i = 0;
}

/**********************????Э??**********************/
bit Hand(unsigned char *a)
{ char *rel = strstr(Rec_Buf,a);
if(rel!=NULL)
return 1;
else
return 0;
}

void Delays(void) //????Delay ????,???500ms
{
unsigned char i,j,k; //????????i,j
for(k=0;k<2;k++){
for(i=0;i<255;i++) //???????????,????????Ч??
for(j=0;j<255;j++);
for(i=0;i<255;i++) //???????????,????????Ч??
for(j=0;j<255;j++);
for(i=0;i<255;i++) //???????????,????????Ч??
for(j=0;j<140;j++);
}
}

void UARTInit(void) //???崮??????????
{
SCON =0x40;
T2CON=0x34;
RCAP2L=0xD9;
RCAP2H=0xFF; //???????9600
}

void UARTSendByte(unsigned char byte)//??????????????
{
SBUF=byte; //??????????????????
while(TI==0); //??????????,TI ???λ????1
TI=0; //???????????λ
}

void UARTSendString(unsigned char *string)
{
while(*string)
{ UARTSendByte(*string++); }
}

void ESP8266()
{

CLR_Buf();
while(!Hand("OK"))
{
UARTSendString(str1);
Delays();
}
CLR_Buf();

while(!(Hand("OK")))
{
UARTSendString(str2);
Delays();
}
CLR_Buf();

while(!Hand("OK"))
{
UARTSendString(str3);
Delays();
Delays();
}
CLR_Buf();

while(!Hand("OK"))
{
UARTSendString(str4);
Delays();
Delays();
}
CLR_Buf();

while(!Hand("OK"))
{
UARTSendString(str5);
Delays();
Delays();
}
CLR_Buf();

while(!Hand("OK"))
{
UARTSendString(str6);
Delays();
Delays();
}
CLR_Buf();

while(!Hand(">")){
UARTSendString(str7);
Delays();
Delays();
}
}

void main(void)
{

UARTInit();
while(1) //?????????
{
ESP8266();
Delays();
}
}

void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
if(SBUF==0x0D)
{
Buf_Max=0;
}
else if(SBUF!=0x0A)
{
Buf_Max++;
Rec_Buf[Buf_Max]=SBUF;
}
}
else
TI = 0;
}
展开
 我来答
lycdl
高粉答主

2018-10-26 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4844万
展开全部
你定义的接收数组Rec_Buf[100]; 这已经超过了内存容量,编译是不能通过的。为了能编译,估计存储模式你是选的外部数据存储器了吧。这要求必须外部扩展数据存储器,可实际上却没有,那接收数据就等于存放在空虚的存储器了,当然就不会保存下来了,就等于没有接收到数据。其实也没必要定义那么大的数组。10~20个单元就够了。如果,单片机是52的,就可以用高128字节的内部RAM存储空间了,但需要定义成间址存储区idata。
unsigned char idata Rec_Buf[100];
追答
串口模式应该是,SCON=0x50;
追问
还是一样欸
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式