2012-02-16 4 views
0

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

RIとSBUFはどのように定義されていますか?彼らは必要に応じて揮発性のフラグが付けられていますか?また、ループバックを行うか、既知のデータを生成し、受信がまったく機能しているかどうかを確認できますか? –

+0

私はあなたが使用するコンパイラ/ libsを言及すべきだと思います。 – XTL

答えて

0

私はデータ(?割り込みによって)とLEDを点滅させるか、戻ってそれをエコーまたは他の方法で受け取るよりも、より多くの何もしない(することができますような単純な)小さなプログラムを作ることをお勧めは、あなたができることを示しています確実に受け取ります。これを使用して、端末エミュレータまたは既知の動作中の他のインタフェースと通信します。すべての可能な仲介者と未知数を切り取ってください。また

チェックUARTエラーレジスタおよび構成は、両端であなたの時計/パリティ/データの設定は一致を確認します。最初に低速から始めましょう。

一度に1つの部品を確実に作ってからまとめてください。

1

私はウルのコードが

receive_data()   interrupt 4      
{ 
    if(RI) 
    { 
     info[check++]=SBUF; 
     RI=0; 
    } 
    if(TI) 
     TI=0; 
} 
なりthaのように、時代のカップルと目のミスがあなたのシリアル割り込みで作品を受け取り、それを取消し関数ではないことをsmply 4を中断するために取り付けられている。VOIDを削除され、これを見てきました
関連する問題