嗨,我正在尝试将我的 89c52 与 sim548c 模块通信。我正在发送 AT 命令,然后让微控制器将所有回复存储在一个数组中,并通过搜索功能查看是否发送了正确的回复,以便它可以继续执行下一个 AT 命令。这需要双向串行传输。我必须首先串行发送 AT 命令,然后启用接收并将来自模块的所有回复存储在一个数组中。我正在使用这个程序,但我无法让微控制器接受传入的数据并将其存储在数组中。它传输成功但没有收到。你能确定是什么问题吗?
int check=0;
int out=0;
unsigned char info[20]={"00000000000000000000"};
unsigned char *s;
unsigned char a[3],b[3];
void transmit_data(unsigned char str)
{
SBUF=str;
while(TI==0);
TI=0;
}
void send_serial(unsigned char *s)
{
delay(50);
while(*s!=0x0)
{
SBUF=*s;
while(TI==0)
{
}
TI=0;
s++;
}
}
void receive_data() interrupt 4
{
if(RI)
{
info[check++]=SBUF;
RI=0;
}
if(TI)
TI=0;
}
void search(unsigned char b[])
{
int l=0;
for(l;l<18;l++)
{
if(info[l]==b[0] && info[l+1]==b[1] && info[l+2]==b[2])
{
out=1;
break;
}
}
}
void compare(unsigned char *s, unsigned char a[]) //for CIPSEND
{
while(1)
{
out=0;
check=0;
delay(50);
send_serial("AT+CIPSEND\r");
delay(100);
send_serial(s);
transmit_data(0x0D);
transmit_data(0x0A);
transmit_data(0x1A);
IE=0x90;
delay(200);
IE=0x88;
search(a);
if (out==1)
break;
}
}