Am I right in stating that with the said PIC having hardware SPI that it would be better to use that (following the example given) as networking is more demanding than using I2C to read the DS1307 chip.
That would be my recommendation.
Below is some code I previously used with a different basic compiler (note that the SSPCON register is sometimes defined as SSPCON1 register on newer chips).
Code:
'Include file for HW SPI (master only)
'Procedures:
'> PROC spi_prep(mode As Byte, clock As Byte)
'>> mode-> 0 for Mode 0,0 ; 1 for Mode 0,1 ; 2 for Mode 1,0 ; 3 for Mode 1,1
'>> clock -> 0 for CLK/4 ; 1 for CLK/16 ; 2 for CLK/64 ; 3 for TMR2/4
'> PROC spi_send(spi_data As Byte)
'> FUNCTION spi_receive(spi_data As Byte) As Byte
'>> can be used to send and receive data
Proc spi_prep(mode As Byte, clock As Byte)
Select Case mode
Case 0 'SPI_MODE 0,0
SSPCON.SSPEN = 1
SSPCON.CKP = 0
SSPSTAT.CKE = 1
SSPSTAT.SMP = 0
Case 1 'SPI_MODE 0,1
SSPCON.SSPEN = 1
SSPCON.CKP = 0
SSPSTAT.CKE = 0
SSPSTAT.SMP = 0
Case 2 'SPI_MODE 1,0
SSPCON.SSPEN = 1
SSPCON.CKP = 1
SSPSTAT.CKE = 1
SSPSTAT.SMP = 0
Case 3 'SPI_MODE 1,1
SSPCON.SSPEN = 1
SSPCON.CKP = 1
SSPSTAT.CKE = 0
SSPSTAT.SMP = 0
Case Else 'set for SPI_MODE 0,0
SSPCON.SSPEN = 1
SSPCON.CKP = 0
SSPSTAT.CKE = 1
SSPSTAT.SMP = 0
EndSelect
Select Case clock
Case 0 'SPI_CLOCK = OSC/4
SSPCON.SSPM3 = 0
SSPCON.SSPM2 = 0
SSPCON.SSPM1 = 0
SSPCON.SSPM0 = 0
Case 1 'SPI_CLOCK = OSC/16
SSPCON.SSPM3 = 0
SSPCON.SSPM2 = 0
SSPCON.SSPM1 = 0
SSPCON.SSPM0 = 1
Case 2 'SPI_CLOCK = OSC/64
SSPCON.SSPM3 = 0
SSPCON.SSPM2 = 0
SSPCON.SSPM1 = 1
SSPCON.SSPM0 = 0
Case 3 'SPI_CLOCK = TMR2/2
SSPCON.SSPM3 = 0
SSPCON.SSPM2 = 0
SSPCON.SSPM1 = 1
SSPCON.SSPM0 = 1
Case Else 'SPI_CLOCK = OSC/4
SSPCON.SSPM3 = 0
SSPCON.SSPM2 = 0
SSPCON.SSPM1 = 0
SSPCON.SSPM0 = 0
EndSelect
End Proc
Proc spi_send(spi_data As Byte)
SSPBUF = spi_data
While SSPSTAT.BF = 0
Wend 'Wait until buffer is clear
End Proc
Function spi_receive(spi_data As Byte) As Byte
SSPBUF = spi_data
While SSPSTAT.BF = 0
Wend 'Wait until buffer is clear
spi_receive = SSPBUF
End Function
Bookmarks