ok guys!
so i have studied a few threads here and made the following modifications in the SPI master program. but again the same problem is occuring. In the first iteration, the program runs very fine, but when it comes to hserin the second time, the program halts and no data is hserin in the pic.
plz help me , this is my final year project, and due to this the whole project is getting affected.
Code:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 7/5/2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Include "Modedefs.Bas"
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600
DEFINE HSER_SPBRG 25
DEFINE HSER_CLROERR 1
define OSC 4
' Set LCD Data port
DEFINE LCD_DREG PORTD
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 0
' Set LCD Register Select port
DEFINE LCD_RSREG PORTC
' Set LCD Register Select bit
DEFINE LCD_RSBIT 0
' Set LCD Enable port
DEFINE LCD_EREG PORTC
' Set LCD Enable bit
DEFINE LCD_EBIT 1
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 8
' Set number of lines on LCD
DEFINE LCD_LINES 2
' Set command delay time in us
DEFINE LCD_COMMANDUS 2000
' Set data delay time in us
DEFINE LCD_DATAUS 50
SSPEN VAR SSPCON1.5 'SSP Enable bit
CKP VAR SSPCON1.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
OERR var RCSTA.1
CREN var RCSTA.4
RCIF VAR PIR1.5
RCIE var PIE1.5
i VAR BYTE
j var byte
as var byte[5]
com VAR byte[2]
sen var byte[6]
teds1 var byte[10]
teds2 var byte[10]
teds3 var byte[10]
op1 var byte
teds_out var byte[25]
sen0 var byte[10]
sen_all var byte[20]
a var byte[10]
DUM VAR BYTE
TRISC = %10010000 'set PORTC I/O
INTCON=%11000000
PIE1.5=1
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
SSPCON1.0 = 0
SSPCON1.1 = 0
SSPCON1.2 = 0
SSPCON1.3 = 0
main:
RCIE=1
pause 100
if RCIF=1 then in
hserout["initialized....",13,10]
pause 10
goto main
in:
dum=RCREG
pause 50
hserout["you entered",dec dum,13,10]
pause 100
goto loop
loop:
SSPEN=1
pause 100
for j=0 to 10
high portB.0
pause 25
low portB.0
pause 25
GoSub getdata 'initiate conversion and receive data
LCDOut $fe, 1, STR a\5, DEC a[5] 'display received string
Pause 100
hserout [dec a[4]," ",dec a[5]," ",dec a[6],13,10]
pause 100
next j
pause 100
goto check
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
check:
RCIE=0
WHILE RCIF=1
DUM=RCREG
hserout["find",13,10]
pause 100
CREN=0
pause 25
WEND
goto main
Bookmarks