1

2 つの 18F PIC が隣り合って動作しています。1 つは別のソースから UART を介してデータを要求しており、両方とも (同じ) 受信データを受信して​​います。

データを要求している最初の PIC (18F4450) は正常に動作しますが、2 番目の PIC (18F46K22) では、受信したバイトが必要な配列内で前後に「移動」しています。

これは、次のコードを使用して発生しています。

loopVar = 0;

   do{
      while(UART1_Data_Ready() == 1){    // stay here until data buffer full

         uart_rd1[loopVar] = UART1_Read();    // read the received data,
               loopVar++;
             }
    }while((loopVar <= 38)); // exit control

明確にするために、これは要求/受信 PIC では正常に機能しますが、受信のみの PIC では機能しません。

いくつかの調査を行ったところ、UART 割り込みルーチンが機能する可能性があることがわかりました。だから私はこれを書いた:

void interrupt()
{
if (RC1IF_bit) // If interrupt is generated by RCIF
{
uart_rd1[LoopVar] = UART1_Read(); // Read data and store it to array
LoopVar++; // Increment string index
if (LoopVar == 39) // If index = 39,
{
LoopVar = 0; // set it to zero
ready = 1; // Ready for parsing data
}
RC1IF_bit = 0; // Set RCIF to 0
}
}

これを割り込み初期化に使用します。

GIE_bit = 1; // Enable Global interrupt
RC1IE_bit = 1; // Enable USART Receiver interrupt
PEIE_bit = 1; // Enable Peripheral interrupt

しかし、配列内の異なるバイトはまったく正しくありません。

UART割り込み部分で私が間違っていることはありますか? それとも、そもそもUART受信の問題に対するより良い解決策でしょうか?

4

0 に答える 0