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
Bookmarks