こんにちは、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;
}
}