8051單片機(jī)開(kāi)發(fā)工具DIY
出處:lai832 發(fā)布于:2007-05-28 15:29:58
目前介紹單片機(jī)應(yīng)用的文章很多,但介紹單片機(jī)開(kāi)發(fā)工具制作的文章卻較少。由于單片機(jī)是一門(mén)實(shí)踐性很強(qiáng)的課程,如果采用傳統(tǒng)的開(kāi)發(fā)模式,則要購(gòu)買(mǎi)價(jià)格昂貴的仿真器、編程器等開(kāi)發(fā)工具來(lái)作實(shí)驗(yàn)。其實(shí)由于芯片功能的日益完善,我們可以利用芯片的在系統(tǒng)編程(ISP)功能制作出實(shí)用而低價(jià)的開(kāi)發(fā)工具。本文旨在幫助DIY愛(ài)好者開(kāi)發(fā)制作出適合自己的開(kāi)發(fā)工具。
1 當(dāng)前常用開(kāi)發(fā)模式
目前,基本上有兩種開(kāi)發(fā)模式可供選擇:用仿真器、用編程器。
① 用仿真器。優(yōu)點(diǎn):方便,可以設(shè)置斷點(diǎn),可以觀察存儲(chǔ)器及寄存器的內(nèi)容。缺點(diǎn):價(jià)格昂貴,不同類型的單片機(jī)要購(gòu)買(mǎi)不同的仿真器;仿真器終究不是單片機(jī),有時(shí)代碼在仿真器上能通過(guò),但在單片機(jī)中不能正常工作,反而增加了調(diào)試的難度。
② 用編程器。優(yōu)點(diǎn):價(jià)格相對(duì)便宜,通常一款編程器可編程多種器件。缺點(diǎn):操作相當(dāng)不便,每次要將芯片在目標(biāo)板與編程器之間轉(zhuǎn)移,并且還要在編譯操作界面與編程器操作界面之間切換,大部分時(shí)間在做簡(jiǎn)單的重復(fù)工作。
2 新的開(kāi)發(fā)模式介紹及芯片選擇
本文介紹的開(kāi)發(fā)工具采用一種新的開(kāi)發(fā)模式(類似于編程器開(kāi)發(fā)模式)。由于利用了芯片的在系統(tǒng)編程功能,因此不需要移動(dòng)芯片。在軟件設(shè)計(jì)時(shí)設(shè)計(jì)成:一旦代碼文件被重新編過(guò),即自動(dòng)到芯片,并自動(dòng)復(fù)位運(yùn)行,是真正的“所編即所得”。
目前很多單片機(jī)都支持在系統(tǒng)編程。8051系列單片機(jī)支持在系統(tǒng)編程的也很多,但大多數(shù)是支持通過(guò)PC機(jī)的串口對(duì)單片機(jī)進(jìn)行編程。這樣有四個(gè)不方便的地方:一是項(xiàng)目本身與PC機(jī)串行通信不方便;二是要增加1片MAX232電平轉(zhuǎn)換芯片;三是有的芯片要按特定的步驟進(jìn)入模式,編程過(guò)程需要手工干預(yù);四是有的芯片需要固件(定制的程序)的支持,如果不小心損壞了固件,則芯片的在系統(tǒng)編程功能也沒(méi)有了。
經(jīng)過(guò)比較,Atmel公司生產(chǎn)的AT89S8252是一種比較理想的芯片,適合制作開(kāi)發(fā)工具。此芯片有如下特點(diǎn):
3 AT89S8252串行編程
(1)AT89S8252串行編程模式
當(dāng)芯片的RST引腳置高電平時(shí),所有程序和數(shù)據(jù)存儲(chǔ)器可以通過(guò)SPI總線接口[SCK,MOSI(input),MISO(output)]編程。RST變高以后,在編程或擦除操作之前必須首先發(fā)送一條編程允許命令。在串行編程模式下,芯片會(huì)在字節(jié)編程之前自動(dòng)插入一個(gè)擦除周期。因此,除非芯片的代碼保護(hù)位被編程,編程之前不需要執(zhí)行全片擦除命令。SPI接口之SCK時(shí)鐘頻率須低于晶振頻率的1/40。
(2)AT89S8252串行編程步驟
① 在XTAL1與XTAL2之間連接一個(gè)3~24MHz的晶振;在VCC與GND之前加上電源電壓,將RST置高,等待10ms。
② 發(fā)送串行編程允許命令。
③ 發(fā)送寫(xiě)/讀/擦除等命令及數(shù)據(jù),串行數(shù)據(jù)高位在前,低位在后,數(shù)據(jù)在時(shí)鐘的上升沿鎖定。
④ 如果上一步是寫(xiě)命令,至少等待2.5ms。
⑤ 需要時(shí)重復(fù)③、④兩步。
⑥ 將RST置低,芯片開(kāi)始運(yùn)行。
(3)AT89S8252串行編程命令
AT89S8252串行編程命令如表1所列。
![]() |
4)AT89S8252串行編程時(shí)序圖
AT89S8252串行編程時(shí)序如圖1所示。
![]() |
4 硬件設(shè)計(jì)
① 通過(guò)計(jì)算機(jī)并口與單片機(jī)SPI口連接;
② 為了保護(hù)計(jì)算機(jī)并口,需要增加1片74HC244作為隔離。
實(shí)用的原理圖如圖2所示。(已經(jīng)過(guò)實(shí)踐檢驗(yàn),可放心使用。)
![]() |
打印端口的基地址一般為0x278、0x378或0x3BC,可以從控制面板中查到。為了方便讀者,表2列出了常用打印端口引腳及寄存器位元的說(shuō)明。
![]() |
② Shutdown():關(guān)閉端口控制函數(shù)。在退出程序時(shí)執(zhí)行,成功返回“1”,失敗返回“0”。
③ GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean:讀取端口函數(shù),PortAddr 為端口地址, Portval為端口值,bSize為要讀取的字節(jié)數(shù)。讀取成功時(shí)返回“1”,失敗時(shí)返回“0”。
④ SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean:寫(xiě)端口函數(shù)。PortAddr 為端口地址, Portval為要寫(xiě)的值,bSize為要寫(xiě)入的字節(jié)數(shù)。寫(xiě)入成功返回“1”,失敗返回“0”。
四個(gè)函數(shù)在Winio.bas模塊中的聲明如下:
Declare Function InitializeWinIo Lib 揥inIo.dll” () As Boolean
Declare Function ShutdownWinIo Lib 揥inIo.dll” () As Boolean
Declare Function GetPortVal Lib 揥inIo.dll” (ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean
Declare Function SetPortVal Lib 揥inIo.dll” (ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean
6 Intel HEX 格式文件
由于一般編譯軟件產(chǎn)生的用于寫(xiě)入芯片的文件都是Intel HEX格式的文件。Intel HEX文件屬于文本文件,可以用記事本查看。一個(gè)Intel HEX文件的一行稱為一個(gè)記錄,每個(gè)記錄都是由十六進(jìn)制字符組成的,兩個(gè)字符表示一個(gè)字節(jié)的值。Intel HEX文件通常由若干條記錄組成,每個(gè)記錄都具有如下的形式:
:LLAAAATTDD...DDCC
“:”——記錄的起始標(biāo)志;
LL——記錄長(zhǎng)度,表示該記錄中的數(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ì)說(shuō)明見(jiàn)本刊網(wǎng)絡(luò)補(bǔ)充版(https://www.dpj.com.cn)。(由于各子程序的流程都較簡(jiǎn)單,所以直接給出源碼,而未畫(huà)出流程圖。程序采用由底至頂?shù)脑O(shè)計(jì)方法。)
結(jié) 語(yǔ)
雖然上述程序能實(shí)現(xiàn)各種基本的功能,但并不完善,并未考慮各種異常情況,讀者可根據(jù)實(shí)際情況進(jìn)行完善。編程功力較差的朋友可直接到筆者的網(wǎng)站(http: //www.mcudiy.com)相對(duì)較完善的應(yīng)用程序 。如果充分理解了上述程序,那么DIY一個(gè)AVR或PIC單片機(jī)的開(kāi)發(fā)工具也非難事。在筆者的網(wǎng)站也有制作完成的“MCS51/AVR/PIC三合一器資料”供愛(ài)好者。
由于AT89S8252的價(jià)格還是較貴,所以現(xiàn)在市場(chǎng)上較難買(mǎi),不過(guò)Atmel公司推出的替代AT89C51/52的AT89S51/52也有在系統(tǒng)編程功能,且價(jià)格便宜。其在系統(tǒng)編程的實(shí)現(xiàn)方法與AT89S8252類似,對(duì)本例部分程序稍作修改即可支持該器件。筆者制作的“MCS51/AVR/PIC三合一器”增加了對(duì)AT89S51/52的支持。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 單片機(jī)技術(shù)特性與嵌入式開(kāi)發(fā)實(shí)踐指南2026/1/7 10:00:02
- 單片機(jī)(MCU)與數(shù)字信號(hào)處理器(DSP)分類及選型技術(shù)指南2025/12/30 10:02:37
- 工業(yè)級(jí)DSP信號(hào)處理系統(tǒng):硬件適配與抗干擾工程方案2025/12/15 14:41:00
- HOLTEK推出HT32F65533G/733G內(nèi)建N/N預(yù)驅(qū)電機(jī)專用SoC單片機(jī)2025/11/26 14:11:41
- 什么是C51數(shù)據(jù)類型擴(kuò)充定義2025/10/27 13:59:22
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開(kāi)關(guān)中的EMI問(wèn)題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見(jiàn)問(wèn)題分析













