I haven't studied your code but here is an example:

The SPI mode allows 8-bits of data to be synchronously
transmitted and received, simultaneously.

Shiftin, Shiftout & their MSSP equivalent.
Code:
subREAD:
Low CS
   
''''Shiftout sSI,sCLK,msbfirst,[vOP_READ\8,sDONT_CARE\16,vADDRESS_READ\8,sDONT_CARE\8]


SSPBUF = vOP_READ ' SEND DATA BYTE
While SSPSTAT.0 = 0: Wend ' WHILE TX/RX COMPLETE
vDUMMY = SSPBUF
         
SSPBUF = 0  'DON'T CARE
While SSPSTAT.0 = 0: Wend ' WHILE TX/RX COMPLETE
vDUMMY = SSPBUF 
        
SSPBUF = 0  'DON'T CARE
While SSPSTAT.0 = 0: Wend ' WHILE TX/RX COMPLETE
vDUMMY = SSPBUF
         
SSPBUF = vADDRESS_READ 
While SSPSTAT.0 = 0: Wend ' WHILE TX/RX COMPLETE
vDUMMY = SSPBUF 
        
SSPBUF = 0  'DON'T CARE
While SSPSTAT.0 = 0: Wend ' WHILE TX/RX COMPLETE
vDUMMY = SSPBUF         


For z = 1 To 200

''''Shiftin sSO,sCLK,msbpre,[vREAD\8]

SSPBUF = 0
While SSPSTAT.0 = 0: Wend ' WHILE TX/RX COMPLETE
vREAD = SSPBUF         
                          
Next

High CS  

Return
As a PIC18F452 example see page 130 of 452 data sheet for your SPI configuration of
SSPSTAT = %01000000
SSPCON1 = %00100010

Norm