I have the following function:
void usbReceive(PBYTE Buffer, BYTE size);
usbReceive(&P2, 1);
usbReceive(P2, 1);
As Hans said, you can't have a pointer to an SFR. The 8051 has 256 internal memory locations. Addresses 0..7FH are the "data" space (along with the registers and bit-addressable data). Addresses 80H..FFH are either internal ram ("idata") OR SFRs. But how does the processor know the difference? Any instruction using direct memory addressing modes accesses the SFR space. Any instruction using indirect addressing modes (pointers) accesses the memory space instead.