日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
MCS51單片機(jī)開發(fā)工具DIY
MCS51單片機(jī)開發(fā)工具DIY
 更新時(shí)間:2008-7-26 20:00:35  點(diǎn)擊數(shù):2
【字體: 字體顏色
摘要:本文詳細(xì)介紹了利用AT89S8252單片機(jī)的在系統(tǒng)編程功能,用Visual Basic6.0(以下簡(jiǎn)稱VB)Windows環(huán)境下開發(fā)制作一款MCS51單片開發(fā)工具的方法。內(nèi)容涉及VB編程、PC機(jī)并口控制及單片機(jī)在系統(tǒng)編程等內(nèi)容。

 

       關(guān)鍵詞:VB編程         AT89S8252   在系統(tǒng)編程   DIY

 

       目前介紹單片機(jī)應(yīng)用的文章很多,但介紹單片機(jī)開發(fā)工具制作的文章卻較少。由于單片機(jī)是一門實(shí)踐性很強(qiáng)的課程,所以單片機(jī)愛好者(尤其是初學(xué)者)往往更希望看到單片機(jī)開發(fā)工具制作方面的文章。本文正是因此而作,旨在幫那些DIY愛好者開發(fā)制作出適合自己的開發(fā)工具。

 

一、當(dāng)前常用開發(fā)模式介紹

目前基本上有兩種開發(fā)模式:

1,用仿真器         優(yōu)點(diǎn):方便,可以設(shè)置斷點(diǎn),可以觀察存貯器及寄存器的內(nèi)容

缺點(diǎn):價(jià)格昂貴,且仿真器終究不是單片機(jī),有時(shí)代碼在仿真器上能通過,但在單片機(jī)中不能正常工作,反而增加了調(diào)試的難度。

              2,用編程器         優(yōu)點(diǎn):價(jià)格相對(duì)便宜,通常一款編程器可編多種器件。

缺點(diǎn):操作相當(dāng)不便,每次要將芯片在目標(biāo)板與編程器之間轉(zhuǎn)移,并且還要在編譯操作界面與編程器操作界面之間切換,大部份時(shí)間在做簡(jiǎn)單的重復(fù)的工作。

 

二、一種新的開發(fā)模式介紹及芯片選擇

       本文介紹的開發(fā)工具采用一種新的開發(fā)模式(類似于編程器開發(fā)模式)。由于利用了芯片的在系統(tǒng)編程功能,因此不需要移動(dòng)芯片,在軟件設(shè)計(jì)時(shí)設(shè)計(jì)成一旦代碼文件被重新編過即自動(dòng)下載到芯片并自動(dòng)復(fù)位運(yùn)行,真正的“所編即所得”。

       目前很多單片機(jī)都支持在系統(tǒng)編程,MCS51系列單片機(jī)支持在系統(tǒng)編程的也很多,但大多數(shù)是支持通過PC機(jī)的串口對(duì)單片機(jī)進(jìn)行編程。這樣有三個(gè)不方便的地方:一是如果項(xiàng)目本身要與PC機(jī)串行通訊就不方便;二是要增加一片MAX232電平轉(zhuǎn)換芯片;三是有的芯片要按特定的步驟進(jìn)入下載模式,編程過程需要手工干預(yù)。

經(jīng)過比較,Atmel公司生產(chǎn)的AT89S8252是一種比較理想的芯片,適合我們用來制作開發(fā)工具。此芯片有如下特點(diǎn):

l         MCS51兼容

l         內(nèi)含8K可擦寫1000次的程序存貯器,2K可擦寫超過100000次的數(shù)據(jù)存貯器及256字節(jié)8位寬內(nèi)部RAM

l         可通過SPI接口在系統(tǒng)串行編程,與MCS51兼容

l         串行編程時(shí)有自動(dòng)擦寫周期,在調(diào)試大程序時(shí)可以分段下載,節(jié)約時(shí)間

l         低電壓下載,無需12V編程電壓

 

三、AT89S8252串行編程介紹

1、  AT89S8252串行編程模式介紹

當(dāng)芯片的RST引腳置高電平時(shí),所有程序和數(shù)據(jù)存貯器可以通過SPI總線接口[SCK,MOSIinput),MISOoutput]編程。RST變高以后,在編程或擦除操作之前必須首先發(fā)送一條編程允許命令。在串行編程模式下,芯片會(huì)在字節(jié)編程之前自動(dòng)插入一個(gè)擦除周期。因此,除非芯片的代碼保護(hù)位被編程,編程之前不需要執(zhí)行全片擦除命令。SPI接口之SCK時(shí)鐘頻率須低于晶振頻率的1/40。

2、  AT89S8252串行編程步驟

a)         XTAL1XTAL2之間連接一個(gè)3-24MHz的晶振,在VCCGND之前加上電源電壓,將RST置高,等待10ms。

b)        發(fā)送串行編程允許命令

c)        發(fā)送寫//擦除等命令及數(shù)據(jù),串行數(shù)據(jù)高位在前,低位在后,數(shù)據(jù)在時(shí)鐘的上升沿鎖定

d)        如果上一步是寫命令等待至少2.5ms

e)         需要時(shí)重復(fù)C,D兩步

f)         RST置低,芯片開始運(yùn)行

3、  AT89S8252串行編程命令介紹

命令

輸入格式

功能說明

Byte1

Byte2

Byte3

編程允許

1010 1100

0101 0011

xxxx xxxx

RST變高后允許串行編程

全片擦除

1010 1100

xxxx x100

xxxx xxxx

程序和數(shù)據(jù)存貯器全部擦除

讀程序存貯器

aaaa a001

地址低8

xxxx xxxx

讀程序存貯器,a為高5位地址

寫程序存貯器

aaaa a010

地址低8

8位數(shù)據(jù)

寫程序存貯器,a為高5位地址

讀數(shù)據(jù)存貯器

00aa a101

地址低8

xxxx xxxx

讀數(shù)據(jù)存貯器,a為高3位地址

寫數(shù)據(jù)存貯器

00aa a110

地址低8

8位數(shù)據(jù)

寫數(shù)據(jù)存貯器,a為高3位地址

寫鎖定位

1010 1100

123x x111

xxxx xxxx

寫鎖定位,123分別為LB1,2,3,將相應(yīng)位置0則鎖定該位

4、 

串行時(shí)鐘輸入

SCK/P1.7

SS

串行數(shù)據(jù)輸入

MOSI/P1.5

SS

串行數(shù)據(jù)輸出

MISO/P1.6

SS

MSB

MSB

LSB

LSB


AT89S8252串行編程時(shí)序圖

四、硬件設(shè)計(jì):

a)         通過計(jì)算機(jī)并口與單片機(jī)SPI口連接

b)        為了保護(hù)計(jì)算機(jī)并口,增加一片74HC244作為隔離


實(shí)用的原理圖如下<已經(jīng)過實(shí)踐檢驗(yàn),放心使用>

(原理圖文件為mcu51diy.sch

 

五、用VB編程進(jìn)行并口控制介紹

       打印端口的基地址一般為0x278,0x3780x3BC,這可以從控制面板中查到。為了方便讀者,下面以表格形式列出常用打印端口腳位及寄存器位元說明。

硬件腳位

地址及位元

說明

本例中作用

2

基地址第0

數(shù)據(jù)位0

未用

3

基地址第1

數(shù)據(jù)位1

未用

4

基地址第2

數(shù)據(jù)位2

RST、MISO控制位

5

基地址第3

數(shù)據(jù)位3

SCK、MOSI控制位

6

基地址第4

數(shù)據(jù)位4

SCK

7

基地址第5

數(shù)據(jù)位5

MOSI

8

基地址第6

數(shù)據(jù)位6

未用

9

基地址第7

數(shù)據(jù)位7

RST

10

基地址+1 6

0=認(rèn)可信號(hào)

MISO

11

基地址+1 7

0=忙碌

未用

12

基地址+1 5

1=紙張用完

未用

18-25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Windows環(huán)境下最簡(jiǎn)單易學(xué)的語言恐怕非VB莫屬,所以我們的開發(fā)工具也選用VB作為編程語言。但由于Windows的保護(hù),VB無法直接讀寫打印端口,因此我們需要另外的程序模塊來實(shí)現(xiàn)打印端口的的直接讀寫。在Internet網(wǎng)上可以找到許多的此類模塊,并且相當(dāng)多的模塊可以免費(fèi)使用。經(jīng)過試用,筆者推薦使用Winio v2.0,該模塊支持Win9X/NT/2000/XPhttp://www.internals.com   Yariv Kaplan ),并且?guī)в性敿?xì)的幫助、例子程序及源碼。使用時(shí)將Winio.sys、Winio.dll、Winio.vxdWinio.bas四個(gè)文件拷貝到工作目錄下,在VB中直接添加Winio.bas模塊即可。本例中用到的函數(shù)有四個(gè),分別說明如下:

1、           Initialize():允許端口控制函數(shù),在使用端口輸入輸出函數(shù)之前調(diào)用一次,成功返回“1,失敗返回“0,

2、           Shutdown():關(guān)閉端口控制函數(shù),在退出程序時(shí)執(zhí)行一次,成功返回“1,失敗返回“0,

3、           GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean:讀取端口函數(shù),PortAddr 為端口地址, Portval為端口值,bSize為要讀取的字節(jié)數(shù),讀取成功返回“1,失敗返回“0

4、           SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean:寫端口函數(shù),PortAddr 為端口地址, Portval為要寫的值,bSize為要寫入的字節(jié)數(shù),寫入成功返回“1,失敗返回“0,

四個(gè)函數(shù)在Winio.bas模塊中的聲明如下:

Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean

Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean

Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean

Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean

 

六、Inter HEX 格式文件介紹

       由于一般的編譯軟件產(chǎn)生的用于寫入芯片的文件都是Inter HEX格式的文件,Inter HEX文件屬于文本文件,可以用記事本查看,一個(gè)Inter HEX文件的一行稱為一個(gè)記錄,每個(gè)記錄都是由16進(jìn)制字符組成的,兩個(gè)字符表示一個(gè)字節(jié)的值,Inter HEX文件通常由若干條記錄組成,每個(gè)記錄都具有如下的形式:

       LLAAAATTDD…DDCC

       “:”-是記錄的起始標(biāo)志

       LL -記錄長度,表示該記錄中的數(shù)據(jù)字節(jié)數(shù)

       AAAA-數(shù)據(jù)裝入的首地址(16位)

TT-記錄類型,00表示數(shù)據(jù)記錄,01表示文件結(jié)束,(注意:有的編譯軟件會(huì)產(chǎn)生大于01的記錄類型,本應(yīng)用中對(duì)大于01記錄類型的記錄忽略掉即可)

       DD-數(shù)據(jù)值(字節(jié))

       CC-校驗(yàn)和(將其本身與記錄中除起始標(biāo)志外的所有字節(jié)相加應(yīng)為0,不為0則有錯(cuò))

 

七、VB編程詳細(xì)說明(由于各子程序的流程都較簡(jiǎn)單,所以直接給出源碼而并未畫出流程圖,程序采用由底至頂?shù)脑O(shè)計(jì)方法):

1,  為了使用方便,我們分別寫一個(gè)方便易記的輸入函數(shù)及輸出子程序,并且由于在很多情況下都要用到延時(shí)指令,所以我們也要寫一個(gè)延時(shí)子程序(延時(shí)子程序調(diào)用WinAPI,有關(guān)方面的內(nèi)容請(qǐng)讀者參閱MSDN,此處不進(jìn)行詳細(xì)介紹)。

首先在“我的文檔”內(nèi)新建一個(gè)名為MCS51的文件夾,將Winio.sysWinio.dll、Winio.vxdWinio.bas拷貝到MCS51文件夾。啟動(dòng)VB6,新建一標(biāo)準(zhǔn)EXE工程。

將工程保存在MCS51文件夾中,文件名為MCS51.vbp。在“工程”菜單中單擊“添加模塊”將Winio.bas添加到MCS51工程中。把模塊中與本例無關(guān)的函數(shù)聲明刪除,增添延時(shí)子程序及輸入輸出處理代碼。完成后的Winio.bas代碼如下:

Option Explicit

Dim Result As Boolean

Dim Portval As Long

Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean

Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean

Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean

Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean

Public Declare Function GetTickCount Lib "kernel32" () As Long

'延時(shí) TT ms 子程序

Sub TimeDelay(TT As Long)

  Dim t As Long

  t = GetTickCount()

  Do

    DoEvents

    If GetTickCount - t < 0 Then t = GetTickCount

  Loop Until GetTickCount - t >= TT

End Sub

'DataOut 輸出到地址為Address的端口子程序

Public Sub DIO_OutputByte(ByVal Address As Integer, ByVal DataOut As Integer)

    Portval = DataOut

    Result = SetPortVal(Address, Portval, 1)

End Sub

'返回地址為Address 的端口的值

Public Function DIO_InputByte(ByVal Address As Integer) As Integer

  Result = GetPortVal(Address, Portval, 1)

  DIO_InputByte = Portval

End Function

2,  在窗體上放置控件并設(shè)置控件的相關(guān)屬性如下圖及表所示:


 

名稱

Caption

說明或其它

WriteS

寫保密位

 

LB1

LB1

第一位保密位

LB2

LB2

第二位保密位

LB3

LB3

第三位保密位

OpenFile

打開文件

打開HEX文件

Prog

下載代碼

 

Veri

校驗(yàn)代碼

 

Eras

全片擦除

 

Exit

退出

 

Text1

 

此框用于保存文件名

Text2

 

此框用于顯示相關(guān)信息

Timer1

Interval=500

用于定時(shí)檢測(cè)文件是否更新

CommonDialog1

 

公用對(duì)話框控件(需從部件菜單項(xiàng)添加comdlg32.ocx控件)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3,  首先編定程序起動(dòng)及退出的相關(guān)代碼,起動(dòng)時(shí)將Timer1關(guān)閉,在Text1Text2中顯示相關(guān)提示信息,并加入允許端口操作命令,退出時(shí)發(fā)出關(guān)閉端口操作命令。雙擊窗體空白處,在出現(xiàn)的代碼窗中輸入如下代碼:

Private Sub Form_Load()

    If InitializeWinIo = False Then

        MsgBox "錯(cuò)誤,無法開啟端口!"

        End

    End If

    Timer1.Enabled = False

    Text1.Text = "*.HEX"

    Text2.Text = "請(qǐng)選擇目標(biāo)文件!"

    Beep

End Sub

        雙擊“退出“按鈕,在出現(xiàn)的代碼窗中輸入如下代碼:

              Private Sub Exit_Click()

                  Call ShutdownWinIo

                    End

End Sub

另外,為了使用方便,在代碼窗的“通用”區(qū)定義打印端口基地址常數(shù)及定義一個(gè)存貯文件更新時(shí)間的變量;由于每個(gè)人的計(jì)算機(jī)配置不一樣,對(duì)于快速的計(jì)算機(jī)可能需要延時(shí)同步,所以設(shè)置一個(gè)Delay延時(shí)常數(shù)。具體代碼如下:

              Const ptraddress = &H378 ‘此數(shù)值應(yīng)根據(jù)機(jī)器的實(shí)際值填寫

Const Delay = 2’當(dāng)你的機(jī)器太快時(shí)加大此數(shù)值

Dim file_date  用于存貯文件更新時(shí)間

4,  接下來我們要?jiǎng)?chuàng)建一個(gè)最基本的子程序,即字節(jié)輸出子程序:

形式:outbyte(data As Integer)

功能:將一字節(jié)數(shù)據(jù)寫入指定的單片機(jī)程序存貯器地址中,高位在前

入口:字節(jié)數(shù)據(jù)data

Private Sub outbyte(data As Integer)    '輸出字節(jié)

    Dim Delay As Integer

    Dim i As Integer

        For con = 7 To 0 Step -1

        DIO_OutputByte ptraddress, 2 ^ 7 '輸出時(shí)鐘低電平,RST

        For i = 1 To Delay   延時(shí)

        Next i

        If (data And 2 ^ con) = 2 ^ con Then '如果數(shù)據(jù)位為1則輸出1

            DIO_OutputByte ptraddress, (2 ^ 7 + 2 ^ 5)

            For i = 1 To Delay

            Next i

            DIO_OutputByte ptraddress, (2 ^ 7 + 2 ^ 5 + 2 ^ 4) '輸出時(shí)鐘高電平

            For i = 1 To Delay

            Next i

            DIO_OutputByte ptraddress, (2 ^ 7 + 2 ^ 5) '輸出時(shí)鐘低電平

        Else

            DIO_OutputByte ptraddress, 2 ^ 7 '如果數(shù)據(jù)位為0則輸出0

            For i = 1 To Delay

            Next i

            DIO_OutputByte ptraddress, (2 ^ 7 + 2 ^ 4) '輸出時(shí)鐘高電平

            For i = 1 To Delay

            Next i

            DIO_OutputByte ptraddress, 2 ^ 7 '輸出時(shí)鐘低電平

        End If

        For i = 1 To Delay

        Next i

    Next con

 End Sub

5,  根據(jù)字節(jié)輸出子程序構(gòu)建程序存貯器字節(jié)寫入子程序

形式:w_c_b(codeaddress As Integer, codedata As Integer)

功能:將數(shù)據(jù)codedata寫入單片機(jī)程序存貯器codeaddress地址

入口:codeaddress-程序存貯器地址

         codedata-數(shù)據(jù)

<此子程序兼容了AT89S53芯片的寫入>

Private Sub w_c_b(codeaddress As Integer, codedata As Integer) '寫代碼字節(jié)

    outbyte (((codeaddress And &HFF00) / (2 ^ 8) * 8) And &HF8 Or 2 Or ((codeaddress And &H2000) / (2 ^ 11))) '合并命令與高地址字節(jié)

    outbyte (codeaddress And &HFF)

    outbyte codedata

End Sub

6,  構(gòu)建讀單片機(jī)程序存貯器數(shù)據(jù)函數(shù)

形式:r_c(codeaddress As Integer) As Integer

功能:返回單片機(jī)存器貯器地址codeaddress處的數(shù)據(jù)

入口:codeaddress-程序存貯器地址

出口:r_c返回值

Private Function r_c(codeaddress As Integer) As Integer '讀代碼字節(jié)

    Dim i As Integer

    Dim con1 As Integer

    Dim X As Integer

    X = 0

        outbyte (((codeaddress And &HFF00) / (2 ^ 8) * 8) And &HF8 Or 1 Or ((codeaddress And &H2000) / (2 ^ 11))) '合并命令與高地址字節(jié)

        outbyte (codeaddress And &HFF)

        For con1 = 7 To 0 Step -1

            DIO_OutputByte ptraddress, 2 ^ 7 '輸出時(shí)鐘低電平,RST

            For i = 1 To Delay

            Next i

            DIO_OutputByte ptraddress, (2 ^ 7 + 2 ^ 4) '輸出時(shí)鐘高電平,RST

            For i = 1 To Delay

            Next i

            If (DIO_InputByte(ptraddress + 1)) And &H40 Then  '采集數(shù)據(jù)

                X = X + 2 ^ con1

            End If

            For i = 1 To Delay

            Next i

            DIO_OutputByte ptraddress, 2 ^ 7 '輸出時(shí)鐘低電平

        Next con1

    r_c = X

End Function

7,  雙擊“打開文件”按鈕,鍵入下述代碼(獲取目標(biāo)文件的路徑及文件名并保存到Text1文本框中)。

              Private Sub OpenFile_Click() '打開文件按鈕

           On Error GoTo errhandler

           CommonDialog1.Filter = "*.HEX|*.hex"

           CommonDialog1.FilterIndex = 2

           CommonDialog1.ShowOpen

           If CommonDialog1.FileName <> "" Then

               Text1.Text = CommonDialog1.FileName

        End If

errhandler:

            End Sub

 

8,  由于在進(jìn)行任何操作之前都要發(fā)送允許編程命令 ,因此構(gòu)建一個(gè)允許編程子程序。

功能:打開74HC244并發(fā)出允許編程命令,使芯片進(jìn)入編程狀態(tài)

              Private Sub StartProg() '發(fā)送串行編程命令

                  DIO_OutputByte ptraddress, 0    '打開74hc244,點(diǎn)亮編程指示燈

                  TimeDelay (20)

                  DIO_OutputByte ptraddress, 2 ^ 7 '設(shè)置RST為高

                  TimeDelay (20)

                  outbyte &HAC

                  outbyte &H53

                  outbyte &H53

End Sub

9,  根據(jù)上面所構(gòu)建的子程序及函數(shù),可以編寫出下載文件子程序的代碼了。雙擊“下載代碼”按鈕,在代碼窗中鍵入如下代碼。

Private Sub Prog_Click()

    ii = 0

    oo = 0

    If Text1.Text = "*.hex" Or Text1.Text = "" Then

        Text2.Text = "未選擇文件或文件不存在,請(qǐng)重新選擇目標(biāo)文件!"

        GoTo err

    End If

        FileNumber = FreeFile

        Open Text1.Text For Input As FileNumber

        StartProg

        Do While Not EOF(FileNumber)

                Line Input #FileNumber, inbuf

                If Left$(inbuf, 1) <> ":" Then

Text2.Text = "Inter格式Hex文件,請(qǐng)重新?lián)瘢?/SPAN>

GoTo err

                End If

                Dim i As Integer

                Dim o As Integer

                o = 0

                For i = 2 To Val("&h" + Mid$(inbuf, 2, 2) + 5) * 2 Step 2 '檢查文件

                    o = (o + Val("&h" + Mid$(inbuf, i, 2))) And &HFF

                Next i

                If o <> 0 Then

                    Text2.Text = "文件檢查未通過,請(qǐng)重新編譯文件!"

                    GoTo err

                End If

                '-------------------------------------------

                If Val("&h" + Mid$(inbuf, 8, 2)) > 1 Then

                    GoTo NEXT_LOOP

                End If

                '--------------------------------------------

                If Val("&h" + Mid$(inbuf, 2, 2)) <> 0 Then

                    o = Val("&h" + Mid$(inbuf, 4, 4))

                    For i = 10 To Val("&h" + Mid$(inbuf, 2, 2)) * 2 + 8 Step 2

                        w_c_b o, Val("&h" + Mid$(inbuf, i, 2))

                        ii = ii + 1

                        Dim t As Long

                        t = GetTickCount

                        TimeDelay (3)

                        Text2.Text = Str$(ii) + "  Bytes"

                        o = o + 1

                        DoEvents

                    Next i

                End If

NEXT_LOOP:

        Loop

err:

    DoEvents

    DIO_OutputByte ptraddress, 2 ^ 3

    Close FileNumber

    Beep

End Sub

10,              構(gòu)建校驗(yàn)文件子程序:雙擊“校驗(yàn)文件”按鈕,在代碼窗中輸入如下代碼:

Private Sub Veri_Click() '校驗(yàn)文件

    FileNumber = FreeFile

    If Text1.Text = "*.hex" Or Text1.Text = "" Then

        Text2.Text = "請(qǐng)選擇目標(biāo)文件!"

        GoTo err

    End If

    Open (Text1.Text) For Input As FileNumber

    StartProg

    Do While Not EOF(FileNumber)

        Line Input #FileNumber, inbuf

        If Left$(inbuf, 1) <> ":" Then

            Text2.Text = "Inter格式Hex文件,請(qǐng)重新選擇!"

            GoTo err

        End If

        '-------------------------------------------

        If Val("&h" + Mid$(inbuf, 8, 2)) > 1 Then

            GoTo NEXT_LOOP

        End If

        '--------------------------------------------

        Dim i As Integer

        Dim o As Integer

        If Val("&h" + Mid$(inbuf, 2, 2)) <> 0 Then

            o = Val("&h" + Mid$(inbuf, 4, 4))

            For i = 10 To Val("&h" + Mid$(inbuf, 2, 2)) * 2 + 8 Step 2

                If r_c(o) <> Val("&h" + Mid$(inbuf, i, 2)) Then

                    oo = oo + 1

                End If

                o = o + 1

                ii = ii + 1

                Text2.Text = Str$(ii) + "  Bytes"

                DoEvents

            Next i

        End If

NEXT_LOOP:

    Loop

    If oo = 0 Then

        Text2.Text = "文件檢驗(yàn)通過"

    Else

        Text2.Text = "文件檢驗(yàn)共發(fā)現(xiàn)" + Str$(oo) + "字節(jié)錯(cuò)誤!"

    End If

err:

    DIO_OutputByte ptraddress, 2 ^ 3

    Close FileNumber

    Beep

End Sub

11,              編寫寫保密位子程序,雙擊“寫保密位”按鈕,在代碼窗中鍵入如下代碼:

Private Sub WriteS_Click()

    Dim temp As Integer

    StartProg

    outbyte &HAC

    temp = &HFF

    If LB1.Value = 1 Then

         temp = temp And &H7F

     End If

     If LB2.Value = 1 Then

         temp = temp And &HBF

     End If

     If LB3.Value = 1 Then

         temp = temp And &HDF

     End If

     outbyte temp

     outbyte temp

     Text2.Text = "OK!"

     TimeDelay (20)

     DIO_OutputByte ptraddress, 2 ^ 3

End Sub

12,              文件更新后自動(dòng)下載功能處理代碼如下:

Private Sub check1_click()           '文件更新后自動(dòng)重下載

    If Check1.Value = 1 Then

        Timer1.Enabled = True

        If Text1.Text <> "*.hex" And Text1.Text <> "" Then

            file_data = FileDateTime(Text1)

        End If

    Else

        Timer1.Enabled = False

    End If

End Sub

Private Sub Timer1_Timer() '文件是否更新檢查

    Timer1.Enabled = False

    On err GoTo err1

    If Text1.Text <> "*.hex" And Text1.Text <> "" Then

        If file_date <> FileDateTime(Text1) Then

            Prog_Click

            file_date = FileDateTime(Text1)

        End If

    End If

err1:

    Timer1.Enabled = True

End Sub

至此,全部程序編寫完成,程序能實(shí)現(xiàn)基本的下載、校驗(yàn)、寫保密位及文件更新后自動(dòng)重寫功能。

八、結(jié)束語

       雖然上述程序能實(shí)現(xiàn)各種基本的功能,但并不完善,并未考慮各種異常情況,讀者可根據(jù)實(shí)際情況進(jìn)行完善。編程功力較差的朋友可直接到筆者的網(wǎng)站(http://www.mcudiy.com)下載相對(duì)較完善的程序。如果充分理解了上述程序,那么DIY一個(gè)AVRPIC單片機(jī)的開發(fā)工具也非難事。其實(shí),在筆者的網(wǎng)站有“MCS51/AVR/PIC三合一下載器供愛好者下載,之所以單獨(dú)敘述MCS51開發(fā)工具,僅僅是為了敘述簡(jiǎn)單及容易理解。

 

       參考資料:

              AT89S8252數(shù)據(jù)手冊(cè)》    http://www.atmel.com

       《利用Visual Basic實(shí)現(xiàn)串并行通信技術(shù)》 范逸之、陳立元、孫德萱、程正孚編著

清華大學(xué)出版社    2001

Visual Basic6.0入門與提高》   張樹兵、戴紅、陳哲、編著

清華大學(xué)出版社    2001

  • 上一篇: 基于VHDL的異步串行通信電路設(shè)計(jì)
  • 下一篇: 80C51上電復(fù)位和復(fù)位延時(shí)的時(shí)序分析
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1