
Originally Posted by
mackrackit
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 !!
Bookmarks