1

我有两个 18F PIC 并排工作。一个是通过 UART 从另一个源请求数据,它们都接收(相同的)传入数据。

请求数据的第一个 PIC (18F4450) 工作正常,但在第二个 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