Now for the receiver code....

The receiver has to be trained as noted in the last post, and almost everything applies to the receiver as far as manchester encoding/decoding goes.


INCLUDE "modedefs.bas"
DEFINE OSC 20 'use external 20mhz crystal
CMCON = 7 : ANSEL = 0 : ADCON1 = 7
rxin var portb.5 : input rxin : datain var byte

ledcount var byte
led1 var porta.0 : output led1 : led2 var porta.1 : output led2
led3 var porta.2 : output led3 : led4 var porta.3 : output led4

key var portb.0 : input btn
led1 = 1 : pause 500 : led1 = 0 : led2 = 1 : pause 500 : led2 = 0
led3 = 1 : pause 500 : led3 = 0 : led4 = 1 : pause 500 : led4 = 0

mainloop:

serin rxin, n2400, 5000, nodatarx, datain
'if no data received in 5 seconds, jump to nodatarx

'2 byte values, $55 and $aa set aside for training the receiver, ignore them
if datain = $55 then 'manchester encoded $0, training the receiver
goto mainloop
endif

if datain = $aa then 'manchester encoded $f, training the receiver
goto mainloop
endif

if datain = $66 then 'manchester encoded $5, all leds off
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0
endif

if datain = $56 then 'manchester encoded $1, led1 on
led1 = 1 : led2 = 0 : led3 = 0 : led4 = 0
endif

if datain = $59 then 'manchester encoded $2, led2 on
led1 = 0 : led2 = 1 : led3 = 0 : led4 = 0
endif

if datain = $5a then 'manchester encoded $3, led3 on
led1 = 0 : led2 = 0 : led3 = 1 : led4 = 0
endif

if datain = $65 then 'manchester encoded $4, led4 on
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 1
endif

goto mainloop

nodatarx: 'flash the leds 3 times
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0
led1 = 1 : led2 = 1 : led3 = 1 : led4 = 1 : pause 400
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0 : pause 400
led1 = 1 : led2 = 1 : led3 = 1 : led4 = 1 : pause 400
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0 : pause 400
led1 = 1 : led2 = 1 : led3 = 1 : led4 = 1 : pause 400
led1 = 0 : led2 = 0 : led3 = 0 : led4 = 0
goto mainloop

END






You may have also notice I shortened up the program a bit by cramming a few of the lines together. There's no reason for it, it just takes up less space on the screen if you have more than one command on a line. I like to pack as much info on the screen as I can, other people can't stand to have more then one command on a line. Personal preference.