我有两个18F PIC彼此相邻工作。一种是通过UART从另一个源请求数据,它们都接收(相同的)传入数据。
请求数据的第一个PIC(18F4450)工作正常,但在第二个PIC(18F46K22)上,接收到的字节在数组中前后“前进”,我需要它们。这使得它无用。 / p>
使用此代码发生这种情况:
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
}
}
用于中断init:
GIE_bit = 1; // Enable Global interrupt
RC1IE_bit = 1; // Enable USART Receiver interrupt
PEIE_bit = 1; // Enable Peripheral interrupt
但是数组中的不同字节根本不正确。
任何想法我在UART中断部分做错了什么?或者首先可能是UART接收问题的更好解决方案?