How are the PICs connected together ? by a wire or by radio/IR link
Do you really need the PRE and SYNCH values to be sent ?
If there is only ever going to be the actual values sent between the PICs then just send the actual values and constantly loop the receiver program like this
When no data is being received your program will sit at the Hserin command and return to Main every 20mS if nothing is recevied. Because you are constantly waiting for the Msg the reponse will be instant and because you are only sending one character there should be no possibility of overflow unless three messages are sent in very quick succession but even then it should process them fast enough.Code:Main: hserin 20,Main [Msg] Select Case Msg Case "1" high PORTA.0 Case "2" low PORTA.0 Case "3" high PORTA.1 Case "4" low PORTA.1 Case "5" high PORTA.2 Case "6" low PORTA.2 Case "7" high PORTA.3 Case "8" low PORTA.3 end select goto main
You can then reduce the pause in your transmit program to get a very fast response. Currently you have 200*8 mS of pause in the transmit program so it will take a minimum of 1.6 seconds to complete one loop.
You could also speed up the send program by changing
toCode:if (PORTA.0 = 0) AND (sone = 0) then hserout [Pre,Synch,"1"] sone = 1 pause 200 endif if (PORTA.0 = 1) AND (sone = 1) then hserout [Pre,Synch,"2"] sone = 0 pause 200 endif
That way with no switches being changed you only perform 4 tests each program loop and if a switch has changed you perform an additional test. Can probably be optimised further but brain is not fully functional yet... need more coffeeCode:if (PORTA.0 = sone) then ' input state has changed if PORTA.0 = 0 then ' port has gone low hserout ["1"] ' send the command sone = 1 ' record the state else hserout ["2"] ' port has gone high so send the command sone = 0 ' record the state end if pause 10 ' may not even need a pause endif
Out of curiosity, why are you storing values opposite to the current state of the pin ?
Personally I would store the current value and detect when it was different. eg
Code:if (PORTA.0<>sone) then ' state has changed sone = PORTA.0 ' store new state { do all the other stuff } endif





Bookmarks