As nothing seem's to work... (not using simulation program now but real hardware)
Using now the smallest program to test what's wrong:
Code:
'****************************************************************
'* Name : master.BAS *
'* Author : Herve Helleboid *
'* Notice : Copyright (c) 2013 HYTEM *
'* : All Rights Reserved *
'* Date : 02/11/2013 *
'****************************************************************
DEFINE OSC 64
TRISA = %00000000
TRISB = %00000000
TRISC = %10010000
TRISD = %10000000
TRISE = %00000000
ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00000000
ANSELE = %00000000
' configuration USART1 (communication RS232 external)
RCSTA1 = $90 ' Enable serial port & continuous receive
TXSTA1 = $20 ' Enable transmit, BRGH = 0
SPBRG1 = 103 ' 9600 Baud @ 64MHz, 0,16%
SSPIF VAR PIR1.3 ' SPI interrupt flag
SSPEN VAR SSP1CON1.5 ' SSP Enable bit
SS0 var PORTB.3
LED VAR PORTE.0
slave var byte
i VAR BYTE ' loop counter
a VAR BYTE[6] ' Holds 6 characters read from slave
BF VAR SSP1STAT.0
HIGH SS0 'slave not in use
HIGH LED
PAUSE 300
LOW LED
hserout ["rdy",13,10]
Pause 50
SSP1CON1 = %00100010
SSP1STAT = %00000000
SSPIF = 0 ' clear buffer full status
mainloop:
pause 200
low SS0
pauseus 5
SSP1BUF = "?"
while BF = 1 : wend
pauseus 10
SSPIF = 0
high SS0
hserout [SSP1BUF," ",dec SSP1BUF,13,10] ' display received char
toggle led
GoTo mainloop ' do it forever
'***********************************************************************************
' Name : SLAVE.pbp
' Compiler : PICBASIC PRO Compiler 2.6
' Assembler : PM or MPASM
' pic18f45k22 @ 16MHz PLLx4 = 64MHz
'
DEFINE OSC 64
TRISA = %00100000
TRISB = %00000000
TRISC = %10011000
TRISD = %10001000
TRISE = %00000000
ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00001000
ANSELE = %00000000
' Allocate RAM
dataout VAR BYTE[8] ' Data out array
SSPEN VAR SSP1CON1.5 ' SSP Enable bit
CKP VAR SSP1CON1.4 ' Clock Polarity Select
SMP VAR SSP1STAT.7 ' Data input sample phase
CKE VAR SSP1STAT.6 ' Clock Edge Select bit
SSPIF VAR PIR1.3 ' interrupt flag - last bit set
i VAR BYTE ' loop counter
a VAR BYTE[6] ' Holds 6 characters of data
led var PORTA.4
BF VAR SSP1STAT.0
SSP1CON1 = %00000100 ' configure SPI slave with SS
CKP = 0 ' clock idle low
CKE = 1 ' transmit on idle to active transition
SSPIF = 0 ' clear SPI interrupt
SMP = 0 ' sample in middle of data
SSPEN = 1
RCSTA1 = $90 ' Enable serial port & continuous receive
TXSTA1 = $20 ' Enable transmit, BRGH = 0
SPBRG1 = 25 ' 38400 Baud @ 64MHz, 0,16%
HIGH LED
PAUSE 300
LOW LED
mainloop:
SSP1BUF = "!" ' send reply $21 dec = 33
while BF = 1 : wend
PAUSEUS 10
SSPIF = 0
toggle led
goto mainloop
Master send "?" and need to receive "!"
doing it forever
AS I can see on my logic analyzer
MASTER send $3F (OK it's ? or decimal 63)
SLAVE send $21 (OK its ! or decimal 33)
This is measured with USBEE SX.
As I have a RS232 hardware connected to the PIC master (TX1) my master prog send to RS232 the received character
instead of receiving "!" (dec 33) it is always " " (dec 32)
sometimes also receiving strange characters
So... I was thinking that last bit is not recognized but:
If I change (slave prog) the character "!" by example by "W" or "0" it works fine every time !
I tried to send other different characters and for some of them, it's good...
For others it's decimal value -1 or decimal value + 1
Any help ?
Regards
Bookmarks