Okay so that wasn't too hard.
The master transmitter now uses pretty much all of the ram available on the 16F88 as a buffer. Allowing 16 commands to be stored and transmitted from 2 seperate buffers.
I am pretty sure I will not be needing more then that for this project and so here it is.
:MSmaster:
Code:
'****************************************************************
'* Name : MSERVMASTER.BAS *
'* Author : Joseph Dattilo *
'* Notice : Copyright (c) 2007 Joseph Dattilo *
'* : All Rights Reserved *
'* Date : 5/25/2007 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
define OSC 8
OSCCON = %1111110 ' sets internal osc to run at 8MHZ
'----------turn analog on porta off, and use as digital input/output
'----------this is used to allow serial input on the A bus.
CMCON = 7 'Comparators OFF
ANSEL = 0 'A/D OFF -- Port pins all digital
'----------
'---**Pins
rsoutpin var porta.0
rsinpin var porta.1
picinpin var portb.4
picoutpin var portb.5
porta=0
portb=0
'---vars
temp var byte
qued var byte
outqued var byte
message var byte[24]
'-up to 8 commands can be buffered in each que array adding up to 16 altogether.
que var byte[96]
que2 var byte[96]
'---------------
qued = 0 'set number in que to 0
goto pcin
'############################## pc recieve ################################
'que up messages from pc
'##########################################################################
pcin:
'---- let pc know we are ready to recieve message.
serout2 rsoutpin, 16468, ["waiting!"] 'call for data
'---- ready to recieve message
serin2 rsinpin, 16468, [str message\24]
'------------------------------------------------------------------------
'compare both arrays checking for bad data if data bad request it again.
for temp = 0 to 11 : if message[temp] <> message[temp+12] then goto baddata
next temp
'------------------------------------------------------------------------
serout2 rsoutpin, 16468, [str message\12] 'send confirmation of reciept.
'------------------inque-----------------
for temp = 0 to 11
if qued<8 then 'add to first que
que[(12*qued)+temp]=message[temp]
else 'add to second que
que2[(12*(qued-8))+temp]=message[temp]
endif
next temp
if qued>7 then
serout2 rsoutpin, 16468, ["Que 1:",str que\96, _
"Que 2:",str que2\(12*(qued-8)+12)]
else
serout2 rsoutpin, 16468, ["Que 1:",str que\(12*qued+12)] 'display all in que
endif
'----------------------------------------
if message[11] = "n" and qued<15 then
serout2 rsoutpin, 16468, ["still more commands!?"] 'debug statement
qued=qued+1 'go to next position in que
goto pcin 'request the data for the next item.
else
outqued = 0 'set picout que start position to 0 (first item in que first)
goto picout 'we are ready to command the servo controller.
endif
'-------------------------
'where bad data takes you.
baddata:
serout2 rsoutpin, 16468, ["bad data!"]
goto pcin
'-------------------------
'############################## pic transmit #############################
'---- picout procedure waits for high on picinpin and then transmits data
'#########################################################################
picout:
'---------------------unque next item into message array
for temp = 0 to 11
if outqued<8 then 'add to first que
message[temp]=que[(12*outqued)+temp]
message[temp+12]=que[(12*outqued)+temp]
else 'add to second que
message[temp]=que2[(12*(outqued-8))+temp]
message[temp+12]=que2[(12*(outqued-8))+temp]
endif
next temp
'-------------------------------------------------------
input picinpin
while picinpin = 0
pause 1
wend
serout2 picoutpin, 16468, [str message\24]
pause 7
if picinpin = 1 then 'checks if data was recieved
goto picout 're-send until recieved
endif
serout2 rsoutpin, 16468, ["SUCCESS|",str message\12,"|"] 'tell computer
if outqued < qued then
outqued = outqued +1 'move to next qued item
goto picout 'proceed to transmit it.
else
serout2 rsoutpin, 16468, ["|ALL",DEC (qued+1),"items transmitted succesfully|"]
qued=0
goto pcin
endif
end
As a note no changes need be made to the slave from last version for cross compatability.
Bookmarks