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受信の問題に対するより良い解決策でしょうか?