void UART_XBeeAPI_ISR(void) { BufferRxUART[iRx1XBAPI] = Read2USART(); if (iRx1XBAPI == 2) // Se recive suficiente información para determinar la longitud del paquete if (BufferRxUART[0] == XBAPI_StrDel) //Identificacion de un paquete API XBee PaqXBAPILen = Make16(BufferRxUART[1], BufferRxUART[2]); //Se obtiene la longitud del paquete esperado //Terminación por longitud de paquete esperado if (iRx1XBAPI >= PaqXBAPILen + 3) //Si se ha alcanzado el final del paquete esperado { iRx1XBAPI = 0; //Se cierra el paquete NoPaqXBAPI++; //Se aumenta el contador de paquetes recividos FlagPaqRx2 = 1; //Se habilita bandera de nuevo paquete //PIR3bits.RC2IF = 0; //Experimental //NewPackUART(PaqXBAPILen); //PaqXBAPILen = Longitud de paquete - Start Delimiter - Length Bytes - Check Sum //FlagBufferRx1Full=0; //Se deshabilita bandera de buffer Rx lleno return ; } iRx1XBAPI++; //PIR3bits.RC2IF = 0; // clear rx flag }
char UART2_Read() { while(!UART2_Data_Ready()); //Waits for Recpetion to complete return Read2USART(); //Returns the 8 bit data /* while(!PIE3bits.RC2IE); //Waits for Recpetion to complete return RCREG2; //Returns the 8 bit data */ }
void Uart2_ReceiveHandler(void) { volatile UINT8 data; // Get the character received from the UART #if(defined __18F8722_H) ||(defined __18F46K22_H) data = Read2USART(); #else data = ReadUSART(); #endif uart[1].rxBuff[uart[1].rxBuffIndex++] = data; if( uart[1].rxBuffIndex >= RX_PACKET_SIZE) { uart[1].rxBuffIndex = 0; } uart[1].rxDataCount++; // Clear the interrupt flag PIR3bits.RC2IF = 0; }