Quote Originally Posted by mackrackit View Post
Dave, why is it that when I download the sample code for the above, I get a "symbol not previously defined SSPCON" The only difference I've made is to remove the LCD lines in the example and added the line to inc a hw file which was an edited version of the same file I used for my thermostat project

Code:
ASM 
  __CONFIG    _CONFIG1H, _OSC_HSPLL_1H
  __CONFIG    _CONFIG2L, _PWRT_ON_2L  
  __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
  __CONFIG    _CONFIG3H, _PBADEN_OFF_3H
  __CONFIG    _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
ENDASM


DEFINE OSC 48 

ADCON1 = $0F
clear

DEFINE LCD_DREG  PORTB           ' LCD Data port
DEFINE LCD_DBIT  0               ' starting Data bit (0 or 4)
DEFINE LCD_EREG  PORTB           ' LCD Enable port
DEFINE LCD_EBIT  5               '     Enable bit  (on EasyPIC 5 LCD)
DEFINE LCD_RSREG PORTB           ' LCD Register Select port
DEFINE LCD_RSBIT 4               '     Register Select bit   (on EasyPIC 5 LCD)
DEFINE LCD_BITS  4               ' LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 4               ' number of lines on LCD
DEFINE LCD_COMMANDUS 2000        ' Command delay time in us 
DEFINE LCD_DATAUS 50             ' Data delay time in us
The example code below
Code:
' Name        : SPIMAST.pbp
' Compiler    : PICBASIC PRO Compiler 2.6
' Assembler   : PM or MPASM
' Target PIC  : 40-pin 16F or 18F
' Hardware    : Lab-X1, Lab-X2 or similar
' Oscillator  : 4MHz internal or external
' Keywords    : LCDOUT, HARDWARE SPI MASTER
' Description : PicBasic Pro program to read and write to SPI slave
' using the hardware synchronous serial port. Connect SDI(master) to
' SDO(slave), SDO(master) to SDI(slave), AND SCK(master) to SCK(slave).
' Common ground is required.
'
' Sends ascii "?" to request data, waits for a "!" to begin receiving data.
' Expects to find the ADC conversion value in the 6th position of the received
' string.
'
INCLUDE "hw.pbp"

SSPEN VAR SSPCON.5   ' SSP Enable bit
CKP   VAR SSPCON.4   ' Clock Polarity Select
SMP   VAR SSPSTAT.7  ' Data input sample phase
CKE   VAR SSPSTAT.6  ' Clock Edge Select bit
SSPIF VAR PIR1.3     ' SPI interrupt flag

i VAR BYTE           ' loop counter
a VAR BYTE[6]        ' Holds 6 characters read from slave

   ADCON1 = 7        ' Set PORTA and PORTE to digital
   Low PORTE.2       ' LCD R/W line low (W)
   Pause 100         ' Wait for LCD to start up

   TRISC = 0         ' set PORTC I/O
   SSPEN = 1         ' enable SPI pins
   CKP = 0           ' clock idle low
   CKE = 0           ' transmit on idle to active transition
   SSPIF = 0         ' clear buffer full status
   SMP = 0           ' sample in middle of data
                
mainloop:
   GoSub getdata     ' initiate conversion and receive data
   LCDOut $fe, 1, STR a\5, DEC a[5] ' display received string
   Pause 100
   GoTo mainloop     ' do it forever

getdata:                                        
   SSPBUF = "?"      ' send ? to start conversion
   GoSub letclear    ' wait for buffer to clear
   IF SSPBUF<>"!" Then getdata ' wait for reply (!)

   For i = 0 to 5    ' loop for 6 characters
     SSPBUF = 0      ' write to SSPBUF to start clock
     GoSub letclear  ' wait for receipt
     a[i] = SSPBUF   ' store received character in array
   Next i            ' get next character
   Return

letclear:
   IF SSPIF = 0 Then letclear ' wait for SPI interupt flag
   PauseUs 25         ' 25uS fudge factor
   SSPIF = 0          ' reset flag
   Return

   End
PIC is the same 18F4580 used for my Thermostat project - Help !!