Hi All
i have a checksum calculation routine that works in Visual Basic i am trying to convert to PicBasic.
the source for the checksum are the first 32 locations in a AT93C46 EEprom (16 bit mode).
i am sure i am doing something stupid but all i get with the Picversion is FFFF,FFFF(sometimes FFFF,7FFF) independent of the eeprom contents.
after spending 5 days on this i hope some fresh eyes will spot my error.
thanks in advance
dj.lambert
VB code:
<code>
Private Sub Checksumme(dat$)
' Checksumme berechnen
Dim x, d, cs$
adrx1 = 1: adrx2 = 31: GoSub summe1x
cs$ = Right$("00" + Hex$(summe), 2)
adrx1 = 9: adrx2 = 18: GoSub summe1x
cs$ = Right$("00" + Hex$(summe), 2) + cs$
'Stop
cs = cs$
Label5.Caption = "Checksum : " & cs
If writecsum = True Then
WriteCheckSum cs$
'Stop
End If
writecsum = False
Exit Sub
summe1x:
summe = &HA5
For x = adrx1 To adrx2 Step 1
d = Mid$(dat$, x * 5 + 1, 4)
'Stop
d = Val("&H" + Mid$(dat$, x * 5 + 1, 4))
summe = (summe + (d And &HFF)) And &HFF
If (summe And 1) = 1 Then
summe = summe \ 2 + &H80
Else
summe = summe \ 2
End If
summe = (summe + (d And &HFF00) \ &H100) And &HFF
If (summe And 1) = 1 Then
summe = summe \ 2 + &H80
Else
summe = summe \ 2
End If
Next
summe = summe And &HFF
Return
End Sub
</code>
PicBasic code:
<code>
CheckSum:
adrx1 = 1
adrx2 = 31
gosub summe1x
adrx1 = 9
adrx2 = 18
gosub summe1x
return
Summe1X:
summe = $A5
for addr = adrx1 to adrx2 step 1
d= b3a(addr)
temp=d
serout2 PortB.1, 84, [hex summe, hex d, 10,13]
summe = (summe + (templo)) and $FF
serout2 PortB.1, 84, [hex summe, 10, 13]
if (summe and 1) = 1 then
summe = summe / 2 + $80
else
summe = summe / 2
endif
serout2 PortB.1, 84, [hex summe, 10, 13]
summe = (summe + (temphi) / $100) and $FF
serout2 PortB.1, 84, [hex summe, 10, 13]
if (summe and 1) = 1 then
summe = summe / 2 + $80
else
summe = summe / 2
endif
serout2 PortB.1, 84, [hex summe, 10, 13]
next
serout2 PortB.1, 84, [hex summe, 10, 13]
summe = summe and $FF
serout2 PortB.1, 84, [hex summe, 10, 13]
return
</code>
variable declarations for PB:
B3A var word(32)
temp var word
tempLo var temp.byte0
tempHi var temp.byte1
adrx1 var byte
adrx2 var byte
CheckSumme var word
Summe var word
d var word
Bookmarks