こんにちは、私はsim548cモジュールと89c52を通信しようとしています。私はATコマンドを送信して、マイクロコントローラにアレイ内のすべての応答を保存させ、適切な応答が送信されたかどうかを調べる検索機能を使用して、次のATコマンドに移行できるようにします。これには、双方向シリアル転送が必要です。まず、ATコマンドをシリアルに送信してから、受信を有効にして、モジュールのすべての応答を配列に格納する必要があります。私はこのプログラムを使用していますが、私は入力データを受け入れてアレイに格納するためにマイクロコントローラを取得できません。正常に転送されますが、受信しません。何が問題なのかを親切に特定できますか?マイクロコントローラでの非同期UART転送8051
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;
}
}
RIとSBUFはどのように定義されていますか?彼らは必要に応じて揮発性のフラグが付けられていますか?また、ループバックを行うか、既知のデータを生成し、受信がまったく機能しているかどうかを確認できますか? –
私はあなたが使用するコンパイラ/ libsを言及すべきだと思います。 – XTL