⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsehex.bas

📁 VB6, paralell port, I2C, parse intel HEX
💻 BAS
字号:
Attribute VB_Name = "ParseHEX"
Option Explicit

Public MY As Long


Public BufArr() As Byte
Public MCUlen As Long
Type parsedDataAndAddr
    error As String
    data As String
    addr As Integer
    len As Integer
End Type

Public ParsedData() As parsedDataAndAddr

Public HexF As Boolean

Public Function ParseHexString(ByVal HexStr As String) As parsedDataAndAddr

Dim DataBinLen As Integer
Dim DataBin As String
Dim DataHex As String
Dim DataBinAdr As Long

Dim i As Integer
Dim chks As Integer
Dim blenTp As Long

' 1 byte intel hex marking 0x3A , ":"
If Left(HexStr, 1) <> ":" Then
ParseHexString.error = "badHex"
Exit Function
End If

' 2 bytes lenght of data
DataBinLen = Bitwise.HexStrToIntVal(Mid(HexStr, 2, 2))
MY = MY + DataBinLen
' 4 bytes data address
DataBinAdr = Bitwise.HexStrToIntVal(Mid(HexStr, 4, 4))

blenTp = DataBinAdr + DataBinLen
If (blenTp - 1) > Blen Then
Blen = blenTp - 1
End If

' record type "00" normal data, "01" end of file, "02" extended addressing
If Mid(HexStr, 8, 2) = "01" Then
ParseHexString.error = "end"
Exit Function
End If
If Mid(HexStr, 8, 2) = "02" Then
ParseHexString.error = "extended"
Exit Function
End If
If Mid(HexStr, 8, 2) <> "00" Then
ParseHexString.error = "notbindata"
Exit Function
End If

' data from 10 to -- every data byte as 2 bytes hex
DataBin = ""
DataHex = (Mid(HexStr, 10, DataBinLen * 2))
For i = 1 To DataBinLen * 2 Step 2
DataBin = DataBin & Chr(Bitwise.HexStrToIntVal(Mid(DataHex, i, 2)))
Next i

' last two checksum, sum data bytes ++ then 2's complement
chks = 0
For i = 1 To DataBinLen + 4
chks = chks + Bitwise.HexStrToIntVal(Mid(HexStr, i * 2, 2))
Next i
chks = chks And &HFF
chks = &H100 - chks
chks = chks And &HFF
If chks <> Bitwise.HexStrToIntVal(Right(HexStr, 2)) Then
ParseHexString.error = "bcc"
Exit Function
End If

ParseHexString.data = DataBin
ParseHexString.addr = DataBinAdr
ParseHexString.len = DataBinLen
ParseHexString.error = "ok"

End Function

Public Function ParseIntelHexFile() As Boolean
Dim i As Integer
Dim j As Integer
ReDim ParsedData(bufStrPos)
ParseIntelHexFile = False
Blen = 0
For i = 0 To bufStrPos
    ParsedData(i) = ParseHexString(stringArr(i))
    If ParsedData(i).error = "end" Then
    ParseIntelHexFile = True
    Exit Function
    End If
    If ParsedData(i).error <> "ok" Then
    MsgError (ParsedData(i).error)
    ParseIntelHexFile = False
    Exit Function
    End If
Next i
End Function

Public Function CreateBinData() As Boolean
Dim i As Integer
Dim j As Integer
Dim bt As Byte
CreateBinData = False
ReDim bytesArr(Blen)
For i = 0 To bufStrPos
    For j = 0 To (ParsedData(i).len - 1)
    bytesArr(ParsedData(i).addr + j) = Asc(Mid(ParsedData(i).data, j + 1, 1))
    Next j
Next i
CreateBinData = True
End Function


Public Sub CopyBinFileToBuf()
Dim i As Long
Blen = fLen
ReDim BufArr(Blen)
For i = 0 To Blen
    BufArr(i) = bytesArr(i)
Next i
End Sub

Public Sub DisplayLoadData()
Dim i As Long
Dim j As Long
Dim str As String
frmMAIN.LoadData = ""
For i = 0 To Blen Step 8
    str = ""
    str = str & Bitwise.IntValToHexStr(i, 4) & ":  "
    For j = 0 To 7
        If (i + j) > (Blen) Then
        str = str & "  "
        Else
        str = str & Bitwise.IntValToHexStr(bytesArr(i + j), 2) & " "
        End If
    Next j
    str = str & Chr(13) & Chr(10)
    frmMAIN.LoadData = frmMAIN.LoadData & str
Next i
End Sub
Public Sub MsgError(ByVal errStr As String)
Select Case errStr
    Case "badHex"
    MsgBox "Not a valid intel HEX file", vbCritical, "ccc"
    Case "extended"
    MsgBox "Not a valid intel HEX file", vbCritical, "ccc"
    Case "notbindata"
    MsgBox "Not a valid intel HEX file", vbCritical, "ccc"
    Case "bcc"
    MsgBox "Bad checksum in intel HEX file", vbCritical, "ccc"
End Select
End Sub

Public Sub ClearGlobals()
Blen = 0
fLen = 0
ReDim bytesArr(0)
ReDim ParsedData(0)
frmMAIN.LoadData = ""
End Sub



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -