I'm using a 4 MHz crystal oscillator. I'm sure that the stuff is encoding and decoding correctly since it is written correctly in my EEPROM and my logic works most of the time. It seems like my program is executing straight down and is going through incorrect if loops sometimes. For example, when I enter 0101 but somehow my microcontroller will write in memory location 3 and 4. It is only supposed to write in memory location 4. Is there anyway to clear the memory before I start my program? Also, is there anyway that I can prevent it from executing through other if loops? I have attached my new code below.
Receiver code:
Include "Modedefs.bas"
s var byte : B0 var bit : B1 var bit : 's is byte to be encoded, B0 and B1 is byte
counter var byte : cnt55 var byte: 'counter is byte and cnt55 is byte
encoded1 var byte : action var byte : alert var byte : action2 var byte: B0=1 : B1=1
'encoded1 word sized variable that holds encoded byte v, alert variable, action variable, B0 and B1 hardwired address
s=0: encoded1=0
main:
maina:
cnt55 = 0 'counter for $55 is zero
waitfor55:
serin PORTB.0, n2400, encoded1 'take in data at pin 0 and place in encoded1
if encoded1 = $55 then
cnt55 = cnt55 + 1 '$55 read, increase cnt55 by 1
if cnt55 = 4 then goto waitforaa 'if $55 occurs 4 times in a row check for $aa
else
goto maina 'if not $55, reset counter at main and restart
endif
goto waitfor55
waitforaa:
serin PORTB.0, n2400, encoded1
if encoded1 <> $aa then goto maina 'restart, incorrect leader bit
serin PORTB.0, n2400, encoded1 : 'serout PORTB.4, n2400, [encoded1] take in from pin 0 to encoded 1 output to pin 3 contens in encoded1
write 0,encoded1
High 7
Pause 2000
Low 7
'Decoding
For counter=0 to 3:s.0[counter]=encoded1.0[counter*2]:Next counter
'serout PORTB.3, n2400, [s] 'Ouptut decoded message
write 1, s
High 6
Pause 2000
Low 6
if ((s.3==0) && (s.2==1)) then 'Check if address matches
goto L3
else
write 2,s
High 2
Pause 2000
Low 2
End
endif
L3:
if ((s.1==0) && (s.0==0)) then 'if the address Tracking then
action = s: action.1=1'set the third bit to 1 and send it back
alert = 0: 'serout PORTB.1, n2400, [action1] 'output to pin 1 value
write 3, action
High 1
Pause 2000
Low 1
endif
if ((s.1==0) && (s.0==1)) then 'If the address Tracking and Finding then
action2 = s:action2.1=1 'set the third bit to 1 and send back
alert=1: 'serout PORTB.4, n2400, [action2]: 'output to pin 1 value i
write 4, action2
High 4
Pause 2000
Low 4
endif
End
Bookmarks