Hello Davide,
The SPI1D register will always read a different value than it writes because you are writing the value to be sent, but are reading the byte value returned by the SPI slave. In simulation mode, I wouldn't expect the "returned" value to alter since the slave end doesn't actually exist.
A comment about your SPI_send() code, the second line -
SPI1S; /* Read of SPI1S with SPTEF=1 */
This is confusing and unnecessary. The first line that tests the SPTEF bit already reads SPI1S.
Regards,
Mac