|
上位机采用VB编程,首先看看ICCAVR和VB程序的关系。
1.新建VB工程,form1上添加一个文本框架Text1,在Form_Load()里只有一句Text1.Text = Command,再生成EXE文件(例如取名为test.exe)。
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445278.JPG)
(原文件名:图1.JPG)
2.在ICCAVR里打开ISP DIALOG,选择SK-500,在ISP Option里选中自动下载,找到刚才生成的EXE文件(test.exe)的路径,还可以选择串口和波特率。
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445279.JPG)
(原文件名:图2.JPG)
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445280.jpg)
(原文件名:图3.jpg)
3.一切OK之后,按下F9编译工程,得到如下结果:
EXE被启动,文本框中的数据为: -z -dATMega8 -ccom1
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445281.jpg)
(原文件名:图4.jpg)
此时ICCAVR还没完呢,点击test.exe的关闭按钮,再看test.exe又被启动了,此时得到的命令是:
-z -dATMega8 -ccom1 -e -pf -ifC:\DOCUME~1\Administrator\MYDOCU~1\ICC_WO~1.10\ROOT\HEX\ROOT.hex
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445282.jpg)
(原文件名:图5.jpg)
此时ICCAVR仍然还没完呢,点击test.exe的关闭按钮,再看ICCAVR 提示说
ISP programming done.
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445283.jpg)
(原文件名:图6.jpg)
因此我们可以来个总结:
ICCAVR调用EXE文件并传入命令参数,命令以“-”开头,两条命令间以空格或TAB隔开。
-z :不知是什么命令
-e :也不知是什么命令
-pf :还是不知是什么命令
-d :选择器件(ATMega8)
-c :选择串口(com1)
-if :文件路径(C:\DOCUME~1\Administrator\MYDOCU~1\ICC_WO~1.10\ROOT\HEX\
ROOT.hex)
似乎没有见到波特率的命令,不知是不是ICCAVR的BUG,总之对我们有用的就两个命令:-c和-if。
4.现在来改进一下VB程序:
添加文本框text2,multiline属性为true,scrollbars为2,该文本框就能多行显示且带滚动条。
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445284.jpg)
(原文件名:图7.jpg)
窗体代码添加三个函数:
AddMsg :字符串追加到文本框
ExeCmd :执行一条命令
AnalyzeCmd :将命令进行分解
在Form_Load()函数中添加Call AnalyzeCmd(Command)。
全部代码如下:
'字符串追加到文本框
Public Function AddMsg(strmsg As String)
Dim lenms As Long
lenms = Len(Text2.Text)
Text2.SelStart = lenms
Text2.SelText = strmsg
End Function
'执行命令
Private Function ExeCmd(ByVal Cmd As String)
Dim Cmd1, Cmd2 As String
Dim CmdLen As Long
AddMsg Cmd & vbCrLf
CmdLen = Len(Cmd)
If CmdLen >= 2 Then
Cmd1 = Mid(Cmd, 1, 2)
Select Case Cmd1
Case "-c" '命令开头为"-c"
If CmdLen >= 3 Then
Cmd2 = Mid(Cmd, 3, CmdLen - 2)
MsgBox "you select the com port is:" & Cmd2
End If
Case "-i"
If CmdLen >= 4 Then
If Mid(Cmd, 3, 1) = "f" Then '命令开头为"-if"
Cmd2 = Mid(Cmd, 4, CmdLen - 3)
MsgBox "the file path is:" & Cmd2
End If
End If
End Select
End If
End Function
'将命令进行分解
Private Function AnalyzeCmd(ByVal CmdLine As String)
Dim Ch, CmdLen, Cmdn As String
Dim i As Long
CmdLen = Len(CmdLine)
If CmdLen < 1 Then
Exit Function
End If
For i = 1 To CmdLen
Ch = Mid(CmdLine, i, 1) '以一次一个字符的方式取出命令行参数。
If (Ch <> " " And Ch <> vbTab) Then '检测是否为 space 或 tab。
Cmdn = Cmdn & Ch
Else '命令结束
If Len(Cmdn) > 0 Then '排除连续空格的情况
ExeCmd Cmdn '执行命令
Cmdn = "" '清除本次得到的命令
End If
End If
Next i
If Len(Cmdn) > 0 Then '结尾没有空格的情况
ExeCmd Cmdn '执行命令
Cmdn = ""
End If
End Function
Private Sub Form_Load()
Text1.Text = Command
Call AnalyzeCmd(Command)
End Sub
5.重复第2步,ICCAVR完成编译后将看到如下结果:
得到了串口号
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445285.jpg)
(原文件名:图8.jpg)
命令被分成一行一行地显示在text2中
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445286.jpg)
(原文件名:图9.jpg)
得到hex 文件路径
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445287.jpg)
(原文件名:图10.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445288.jpg)
(原文件名:图11.jpg)
恭喜你,成功了!
6.将命令行的处理添加到自己编写的串口下载程序中(STK_V74上位机),改下ICCAVR中STK500的路径就OK了。
因为我不知道VB程序怎么向ICCAVR返回信号(据说要用管道),所以只能通过气球的方式来显示信息,还望高人指点。
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445291.jpg)
(原文件名:图14.jpg)
电路参考下图,晶振可不用外接,波特率设低一点就行了。
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445314.jpg)
(原文件名:图12.jpg)
电平转换还可用分立元件:
![](http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445290.jpg)
(原文件名:图13.jpg)
自制串口下载器全部资料及源代码:
点击此处下载 ourdev_445292.rar(文件大小:12.57M) (原文件名:STK_V74.rar)
没装VB的电脑要在STK_V74上位机\包\Support下运行STK7_4.exe |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|