Code:
'****************************************************************
'*  Name    : MCP23S17 + MSPP + PBP                             *
'*  Author  : [GADELHAS]                                        *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 31-01-2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          : EASYPICV6 + PIC16F887 + MCP23S17                  *
'****************************************************************
'                              CONFIGS
' ================================================================
@ __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _BOR_OFF & _DEBUG_OFF & _LVP_OFF & _FCMEN_ON & _IESO_OFF  
@ __CONFIG _CONFIG2, _WRT_OFF & _BOR40V'                          DEFINES & INCLUDES
' ================================================================
 DEFINE OSC 8
'                REGISTERS AND PINOUT ( 1 = IN; 0 = OUT )
' ================================================================
           '76543210          '76543210
 TRISA   = %00000000: PORTA = %00000000 
 TRISB   = %00000000: PORTB = %00000000
 TRISC   = %00010000: PORTC = %00000000
 TRISD   = %00000000: PORTD = %00000000
 TRISE   = %00000000: PORTE = %00000000
 ADCON0  = %00000000
 ADCON1  = %00000000
 ANSEL   = %00000000 
 ANSELH  = %00000000
 CM1CON0 = %00000000
 CM2CON0 = %00000000
 SSPSTAT = %00000000  'Configures the SPI Module ( Read DataSheet ) 
 SSPCON  = %00110000  'Configures the SPI Module ( Read DataSheet ) 
 
'                         ALIAS & MODIFIERS
' ================================================================
  nCS VAR PORTA.2 
 nRST VAR PORTA.3
 SCLK VAR PORTC.3
  SDI VAR PORTC.4
  SDO VAR PORTC.5
  
'                        VARIABLES & COSTANTS
' ================================================================
 MCPWRT CON $40    'Command o write in MCP23S17 Address $00
 MCPRED CON $41    'Command o read from MCP23S17 Address $00
 IOCON  CON $0A    'Register address to MCP23S17 Config
 IODIRA CON $00    'Register address to MCP23S17 PortA(1)
 IODIRB CON $01    'Register address to MCP23S17 PortB(2)
 GPIOA  CON $12    'Register address to MCP23S17 GPIOA(1)
 GPIOB  CON $13    'Register address to MCP23S17 GPIOB(2)
 OLATA  CON $14    'Register address to MCP23S17 LATA(1)
 OLATB  CON $15    'Register address to MCP23S17 LATB(2)
  
 DataOut VAR BYTE  'Variable for Data Byte to Send to the MCP23S17
 DataIn  VAR BYTE  'Variable for Data Byte to Receive from the MCP23S17
 MCPReg  VAR BYTE  'Variable for the Register to Send to the MCP23S17
 
'                           PROGRAM INIT
' ================================================================
    GOSUB INIT_MCP23S17    'Init the MCP23S17
'                            MAIN LOOP
' ================================================================
MAIN:
    MCPReg=OLATA             'This light up the leds, connected in
    DataOut=DataOut+1        'PortA(1) of the MCP23S17
    GOSUB SEND_MCP23S17
    
    MCPReg = GPIOB           'This read the PortB(1) of the MCP23S17
    GOSUB RECEIVE_MCP23S17   'and show the result on the PORTB of the
    PORTB = DataIn           'PIC
    
    PAUSE 200
GOTO MAIN
'                              SUB - ROTINES
' ================================================================    
INIT_MCP23S17:
    nRST = 0                'Reset the port expander
    PAUSE 1
    nRST = 1
    MCPReg = IOCON          'Configures the MCP23S17
    DataOut = $20
    GOSUB SEND_MCP23S17
    MCPReg = IODIRA         'Configures PortA(1) All Output
    DataOut = $00
    GOSUB SEND_MCP23S17
    
    MCPReg = IODIRB         'Configures PortB(2) All Input
    DataOut = $FF
    GOSUB SEND_MCP23S17      
RETURN
SEND_MCP23S17:
    nCS = 0                 'Enable the MCP23S17
    SSPBUF = MCPWRT         'Command to Write to the MCP23S17
    PAUSEUS 1    
    SSPBUF = MCPReg         'Register to Write the Data
    PAUSEUS 1 
    SSPBUF = DataOut        'Data to be sent
    PAUSEUS 1           
    nCS = 1                 'Disable the MCP23S17
RETURN
RECEIVE_MCP23S17:
    nCS = 0                 'Enable the MCP23S17
    SSPBUF = MCPRED         'Command to Read from the MCP23S17
    PAUSEUS 1 
    SSPBUF = MCPReg         'Register to Read from
    PAUSEUS 1  
    SSPBUF = 0              'Send something
    PAUSEUS 1  
    DataIn = SSPBUF         'Data received from te MCP23S17
    PAUSEUS 1 
    nCS = 1                 'Disable the MCP23S17
RETURN
END

Size: 166 Words

Time to execute the following Routine ( Send) - 92 ticks -> 46.0uS
Code:
    MCPReg=OLATA             'This light up the leds, connected in
    DataOut=DataOut+1        'PortA(1) of the MCP23S17
    GOSUB SEND_MCP23S17

Time to execute the following Routine ( Receive) - 119 ticks -> 59.1uS
Code:
    MCPReg = GPIOB           'This read the PortB(1) of the MCP23S17
    GOSUB RECEIVE_MCP23S17   'and show the result on the PORTB of the
    PORTB = DataIn           'PIC