Hi,
I am trying to make two 08M2 communicate. This is my RX pgm:
SYMBOL RECEIVER_CODE = 0 ' 0 .. 15
SYMBOL RX_PIN = C.4
SYMBOL RX_BAUD = N2400_4
SYMBOL MAX_DATA_LENGTH = 4
SYMBOL PREAMBLE_BYTE = $AA
SYMBOL SOM_BYTE = $C5
SYMBOL EOM_BYTE = $5C
SYMBOL POSTAMBLE_BYTE = $3A
SYMBOL dataLength = b0
SYMBOL data1 = b1
SYMBOL data2 = b2
SYMBOL data3 = b3
SYMBOL data4 = b4
SYMBOL data5 = b5
SYMBOL data6 = b6
SYMBOL data7 = b14
SYMBOL data8 = b15
SYMBOL data9 = b16
SYMBOL byteNumber = b7
SYMBOL bytePtr = b8
SYMBOL bbyte = b9
SYMBOL bbit = b10
SYMBOL k = b11
SYMBOL crc = b12
SYMBOL code = b13
SYMBOL POLYNOMIAL = $8C
PowerOnReset:
GOSUB ClearErrorLed
Lloop:
GOSUB ReceivePacket
GOSUB ShowPacket
GOTO Lloop
ReceivePacket:
high C.2
pause 2000
low C.2
pause 2000
SERIN RX_PIN,RX_BAUD,(PREAMBLE_BYTE,SOM_BYTE),code,dataLength,data1,data2,data3,data4,data5,data6,data7,data8,data9
high C.2
pause 2000
low C.2
CheckDataLength:
IF dataLength < 1 THEN Failed
IF dataLength > MAX_DATA_LENGTH THEN Failed
CheckReceiverCode:
;$AA,$AA,$AA,$AA,$AA,$C5,$00,4,"o","k","a","y",$94,$5C,$3A,$3A,$3A,$3A
bbyte = code & $0F
IF bbyte <> RECEIVER_CODE THEN Failed
SaveDataForUseLater:
;
POKE $50,data1
POKE $51,data2
POKE $52,data3
POKE $53,data4
POKE $54,data5
POKE $55,data6
If data1 = $6F then
high C.2
pause 2000
low c.2
endif
CheckEomByte:
bytePtr = $50 + dataLength + 1
PEEK bytePtr,bbyte
;bbyte = data6
IF bbyte <> EOM_BYTE THEN Failed
CheckChecksum:
crc = 0
bbyte = code
GOSUB CrcAdd
bytePtr = $50
FOR byteNumber = 1 TO dataLength
PEEK bytePtr,bbyte
bytePtr = bytePtr+1
GOSUB CrcAdd
NEXT
bytePtr = $50 + dataLength
PEEK bytePtr,bbyte
IF bbyte = crc THEN ReceivedPacket
Failed:
GOSUB SetErrorLed
GOTO ReceivePacket
ReceivedPacket:
GOSUB ClearErrorLed
RETURN
CrcAdd:
FOR bbit = 0 TO 7
k = bbyte ^ crc & 1
IF k = 0 THEN CrcAdd1
k = POLYNOMIAL
CrcAdd1:
crc = crc / 2 ^ k
bbyte = bbyte / 2
NEXT
RETURN
ShowPacket:
high C.2
pause 2000
low C.2
bbyte = code / $10
SERTXD("FROM ",bbyte,":")
bytePtr = $50
FOR byteNumber = 1 TO dataLength
PEEK bytePtr,bbyte
bytePtr = bytePtr+1
SERTXD(bbyte)
NEXT
SERTXD($0D,$0A)
RETURN
SetErrorLed:
SERTXD("BAD PACKET",$0D,$0A)
RETURN
ClearErrorLed:
RETURN
I have run both pgm in simulation. When I reach the SERIN I input "$AA,$AA,$AA,$AA,$AA,$C5,$00,4,"o","k","a","y",$94,$5C,$3A,$3A,$3A,$3A". This is what the TX pgm sends according to the simulation (and Cutecom), and it works. When I connect the two 08M2 with a wire the TX pgm transmits (according to an LED) and an RX LED flashes once.
It appears (to me) that the pgm stops in the SERIN, but why?
Can anyone help?
best regards
torben friis
I am trying to make two 08M2 communicate. This is my RX pgm:
SYMBOL RECEIVER_CODE = 0 ' 0 .. 15
SYMBOL RX_PIN = C.4
SYMBOL RX_BAUD = N2400_4
SYMBOL MAX_DATA_LENGTH = 4
SYMBOL PREAMBLE_BYTE = $AA
SYMBOL SOM_BYTE = $C5
SYMBOL EOM_BYTE = $5C
SYMBOL POSTAMBLE_BYTE = $3A
SYMBOL dataLength = b0
SYMBOL data1 = b1
SYMBOL data2 = b2
SYMBOL data3 = b3
SYMBOL data4 = b4
SYMBOL data5 = b5
SYMBOL data6 = b6
SYMBOL data7 = b14
SYMBOL data8 = b15
SYMBOL data9 = b16
SYMBOL byteNumber = b7
SYMBOL bytePtr = b8
SYMBOL bbyte = b9
SYMBOL bbit = b10
SYMBOL k = b11
SYMBOL crc = b12
SYMBOL code = b13
SYMBOL POLYNOMIAL = $8C
PowerOnReset:
GOSUB ClearErrorLed
Lloop:
GOSUB ReceivePacket
GOSUB ShowPacket
GOTO Lloop
ReceivePacket:
high C.2
pause 2000
low C.2
pause 2000
SERIN RX_PIN,RX_BAUD,(PREAMBLE_BYTE,SOM_BYTE),code,dataLength,data1,data2,data3,data4,data5,data6,data7,data8,data9
high C.2
pause 2000
low C.2
CheckDataLength:
IF dataLength < 1 THEN Failed
IF dataLength > MAX_DATA_LENGTH THEN Failed
CheckReceiverCode:
;$AA,$AA,$AA,$AA,$AA,$C5,$00,4,"o","k","a","y",$94,$5C,$3A,$3A,$3A,$3A
bbyte = code & $0F
IF bbyte <> RECEIVER_CODE THEN Failed
SaveDataForUseLater:
;
POKE $50,data1
POKE $51,data2
POKE $52,data3
POKE $53,data4
POKE $54,data5
POKE $55,data6
If data1 = $6F then
high C.2
pause 2000
low c.2
endif
CheckEomByte:
bytePtr = $50 + dataLength + 1
PEEK bytePtr,bbyte
;bbyte = data6
IF bbyte <> EOM_BYTE THEN Failed
CheckChecksum:
crc = 0
bbyte = code
GOSUB CrcAdd
bytePtr = $50
FOR byteNumber = 1 TO dataLength
PEEK bytePtr,bbyte
bytePtr = bytePtr+1
GOSUB CrcAdd
NEXT
bytePtr = $50 + dataLength
PEEK bytePtr,bbyte
IF bbyte = crc THEN ReceivedPacket
Failed:
GOSUB SetErrorLed
GOTO ReceivePacket
ReceivedPacket:
GOSUB ClearErrorLed
RETURN
CrcAdd:
FOR bbit = 0 TO 7
k = bbyte ^ crc & 1
IF k = 0 THEN CrcAdd1
k = POLYNOMIAL
CrcAdd1:
crc = crc / 2 ^ k
bbyte = bbyte / 2
NEXT
RETURN
ShowPacket:
high C.2
pause 2000
low C.2
bbyte = code / $10
SERTXD("FROM ",bbyte,":")
bytePtr = $50
FOR byteNumber = 1 TO dataLength
PEEK bytePtr,bbyte
bytePtr = bytePtr+1
SERTXD(bbyte)
NEXT
SERTXD($0D,$0A)
RETURN
SetErrorLed:
SERTXD("BAD PACKET",$0D,$0A)
RETURN
ClearErrorLed:
RETURN
I have run both pgm in simulation. When I reach the SERIN I input "$AA,$AA,$AA,$AA,$AA,$C5,$00,4,"o","k","a","y",$94,$5C,$3A,$3A,$3A,$3A". This is what the TX pgm sends according to the simulation (and Cutecom), and it works. When I connect the two 08M2 with a wire the TX pgm transmits (according to an LED) and an RX LED flashes once.
It appears (to me) that the pgm stops in the SERIN, but why?
Can anyone help?
best regards
torben friis