我有两个 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 接收问题的更好解决方案?