基于USB接口的編程器的設(shè)計(jì)_第1頁(yè)
基于USB接口的編程器的設(shè)計(jì)_第2頁(yè)
基于USB接口的編程器的設(shè)計(jì)_第3頁(yè)
基于USB接口的編程器的設(shè)計(jì)_第4頁(yè)
基于USB接口的編程器的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目目 錄錄 引言.1 1 ATMEIL AT89 系列編程器的設(shè)計(jì).2 1.1 系統(tǒng)設(shè)計(jì)方案論證.2 1.2 硬件結(jié)構(gòu)框圖.2 2 電路模塊分析.3 2.1 電源部分.3 2.1.1 MC34063 芯片介紹.5 2.2 串行數(shù)據(jù)傳輸電路.6 2.2.1 PL2303 芯片介紹.7 2.3 主控部分電路.8 2.4 編程器的特點(diǎn)介紹.11 3 系統(tǒng)軟件設(shè)計(jì).12 3.1 上位機(jī)軟件設(shè)計(jì).12 3.1.1 VC 簡(jiǎn)介.12 3.1.2 上位機(jī)軟件主流程框圖.12 3.1.3 通信初始化.13 3.2 下位機(jī)軟件設(shè)計(jì).14 3.2.1 下位機(jī)軟件主流程框圖.14 3.2.2 擦除.14 3.2.3

2、 讀操作.15 3.2.4 寫(xiě)操作.15 3.2.7 軟件部分原代碼及解釋.16 4.系統(tǒng)調(diào)試.23 4.1 硬件制作與調(diào)試.23 4.2 軟件調(diào)試.26 4.2.1 軟件調(diào)試方法:.26 4.2.2 調(diào)試的原則:.27 4.2.3 串口調(diào)試助手簡(jiǎn)介.27 4.2.4 串口通信調(diào)試.28 結(jié) 論.30 謝 辭.31 參考文獻(xiàn).32 附 錄 1 系統(tǒng)硬件原理圖.33 附 錄 2:編程器下位機(jī)程序代碼.34 引言引言 如今電子技術(shù)飛速發(fā)展,從分立元件到集成電路,從模擬電路到數(shù)字電路,現(xiàn)在 的電器產(chǎn)品中都廣泛地使用了單片機(jī)技術(shù),著使得電子產(chǎn)品的開(kāi)發(fā)方便、靈活、又提 高了產(chǎn)品的穩(wěn)定性與可維護(hù)性。 目前

3、 MCS-51 系列單片機(jī)的應(yīng)用非常廣泛,其低廉價(jià)格、性能優(yōu)秀得到了許多軟硬 件開(kāi)發(fā)者的青睞。雖然現(xiàn)有的 MCS-51 資料相當(dāng)豐富,但對(duì)于研發(fā)的人來(lái)說(shuō),在實(shí)踐學(xué) 習(xí)中,硬件的投入是一塊很高的門(mén)檻,許多初學(xué)者往往是因?yàn)殚_(kāi)發(fā)初期的投入費(fèi)用 (購(gòu)置編程器、仿真器的費(fèi)用,一般兩者加起來(lái)在千元以上)過(guò)高而放棄了對(duì)單片機(jī) 的深造和研究。隨著時(shí)間的流逝,單片機(jī)的理論知識(shí)得不到充分的實(shí)踐,致使這些初 學(xué)者往往將單片機(jī)的知識(shí)忘記,降低了他們工作學(xué)習(xí)的效率,浪費(fèi)了很多寶貴的時(shí)間。 基于這個(gè)問(wèn)題的思考,針對(duì)單片機(jī)入門(mén)的人員及公司開(kāi)發(fā)設(shè)計(jì)人員,本人的畢業(yè)設(shè)計(jì) 將對(duì)如何最大程度的減低初期開(kāi)發(fā)成本,設(shè)計(jì)一個(gè)價(jià)格低廉編程

4、器,以幫助大家能夠 跨越高額費(fèi)用的門(mén)檻,輕松的學(xué)習(xí)單片機(jī)。 本設(shè)計(jì)是一個(gè)的面向市場(chǎng)的產(chǎn)品。往往一個(gè)成熟的產(chǎn)品,在開(kāi)發(fā)初期都要進(jìn)行周 密的市場(chǎng)分析。本設(shè)計(jì)采用了現(xiàn)有單片機(jī)成熟的技術(shù),面向入門(mén)人員、高校學(xué)生以及 研發(fā)公司等。軟硬件的設(shè)計(jì)上都相對(duì)簡(jiǎn)單,產(chǎn)品性?xún)r(jià)比高,易于自行制作,而且有現(xiàn) 成的軟件和開(kāi)放的源代碼。這就說(shuō)明了本設(shè)計(jì)在使用價(jià)值和實(shí)用價(jià)值上有著很大的彈 性,相信能夠被很多的設(shè)計(jì)開(kāi)發(fā)、入門(mén)學(xué)習(xí)人員接受。本設(shè)計(jì)應(yīng)用范圍廣泛,可作為 高端產(chǎn)品的替代產(chǎn)品、在校人員的課程設(shè)計(jì)等,市場(chǎng)前景非常可觀(guān)。 本設(shè)計(jì)制作產(chǎn)品分塊式設(shè)計(jì),每一個(gè)模塊都可以單獨(dú)成為產(chǎn)品,面對(duì)不同的用戶(hù) 群,如:89S,SST89 系

5、列的開(kāi)發(fā)可作為高校學(xué)生的課程設(shè)計(jì);通用型 89C 單片機(jī)可作 為公司、研開(kāi)場(chǎng)所使用;USB 接口的產(chǎn)品可以面向筆記本用戶(hù)等。 這就是我對(duì)我的畢業(yè)設(shè)計(jì)的一些看法和分析,感謝學(xué)校老師對(duì)我的耐心指導(dǎo)。在 他們的幫助下,我才能順利的完成我的畢業(yè)設(shè)計(jì),進(jìn)入我人生的下一個(gè)階段。 1 1 ATMEILATMEIL AT89AT89 系列編程器的設(shè)計(jì)系列編程器的設(shè)計(jì) 本章介紹的是 ATMEIL AT89 系列通用單片機(jī)編程器的設(shè)計(jì)。該設(shè)備支持目前為止 最為經(jīng)典和市場(chǎng)占有量最大的 ATMEL 公司生產(chǎn)的 AT89C51、AT89C52、AT89C55、AT89C55WD、AT89S51、AT89S52、AT89

6、S53 以及小型化的 AT89C1051、AT89C2051、AT89C4051 等芯片。 1.1 系統(tǒng)設(shè)計(jì)方案論證系統(tǒng)設(shè)計(jì)方案論證 (1) 采用計(jì)算機(jī)軟件實(shí)現(xiàn)控制 本設(shè)計(jì)所使用的計(jì)算機(jī)軟件分別在 ATEML 公司的 ATMEL ISP SOFEWARE 的基礎(chǔ)上開(kāi) 發(fā)而來(lái)的,同樣屬于開(kāi)放原代碼的免費(fèi)軟件,性能穩(wěn)定,不占用計(jì)算機(jī)系統(tǒng)資源。 (2) 采用主控單片機(jī)來(lái)實(shí)現(xiàn)控制 主控單片機(jī)負(fù)責(zé)與計(jì)算機(jī)軟件進(jìn)行通信,它辨別計(jì)算機(jī)軟件發(fā)出的指令,對(duì)目標(biāo) 單片機(jī)進(jìn)行編程、讀取、加密等操作,從而實(shí)現(xiàn)了一般編程器的大部分功能。 (3) 系統(tǒng)的供電采用計(jì)算機(jī) USB 口供電。 計(jì)算機(jī)內(nèi)部電源穩(wěn)定,不易產(chǎn)生很大的

7、信號(hào)干擾,保證了設(shè)備運(yùn)行的穩(wěn)定,同時(shí) 還為以后對(duì)通信接口的統(tǒng)一做了充分的準(zhǔn)備。 (4) 采用分集成芯片 PL2303 實(shí)現(xiàn) USB 串口轉(zhuǎn)換電路。 市面上 RS232/TTL 電平轉(zhuǎn)換元件最常用的元件為 MAX232 集成芯片,但是這些芯 片價(jià)格相對(duì)較高,為了節(jié)約開(kāi)發(fā)成本,也可以采用分立式元件進(jìn)行設(shè)計(jì) RS232/TTL 電 平轉(zhuǎn)換電路。該電路相對(duì)簡(jiǎn)潔,性能穩(wěn)定,性?xún)r(jià)比高。 (5) 采用計(jì)算機(jī) USB 接口進(jìn)行數(shù)據(jù)傳輸 本設(shè)計(jì)中,采用一個(gè)獨(dú)立的全雙工的 USB 接口進(jìn)行通信,傳輸速度快,抗干擾能 力強(qiáng)。 (6) 采用 MC3406322作為 BOOST2型 DC-DC2、3變換器 MC3406

8、3 是一單片雙極型線(xiàn)形集成電路,片內(nèi)包含溫度補(bǔ)償帶隙基準(zhǔn)源、一個(gè)占空 比周期控制器、驅(qū)動(dòng)器和大電流輸出開(kāi)關(guān),輸出電流能達(dá)到 1.5A,它能夠使用最少的 外接元件構(gòu)成升壓變換器、降壓變換器和電源反向器。 1.2 硬件結(jié)構(gòu)硬件結(jié)構(gòu)框圖框圖 下面是硬件設(shè)計(jì)的硬件原理框圖,如圖 1-1 所示: RXD TXD 5V 計(jì) 算 機(jī) 主控 CPU 燒寫(xiě)單片機(jī) USB 電路塊 5V 12V 升壓電路 5V/+12V/0V 轉(zhuǎn) 換電路圖 12V 圖 1-1 總體硬件框圖 該編程器使用了主控 CPU(Master Control MCU)來(lái)配和計(jì)算機(jī)軟件對(duì)目標(biāo)單片機(jī) (Target MCU)進(jìn)行編程操作(燒寫(xiě)單片

9、機(jī)) 。 該設(shè)備使用的仍然是計(jì)算機(jī)的 USB 端口的+5V 供電。由于 AT89C1051、AT89C2051、AT89C405、AT89C51、AT89C52 它們進(jìn)行編程操作時(shí),必須向 這些芯片的 1 腳提供一個(gè)+12V 的編程電壓,這樣才能使這些芯片進(jìn)行正常的編程操作, 所以電路中加入了一個(gè)+5V 轉(zhuǎn)+12V 的電路,來(lái)提供 AT89C1051、AT89C2051、AT89C4051、AT89C51、AT89C52 這些芯片的編程電壓。 在該設(shè)備與計(jì)算機(jī)通信采用串行方式進(jìn)行通信,與單片機(jī)進(jìn)行數(shù)據(jù)交換時(shí)同樣要 經(jīng)過(guò)一個(gè)雙向的 RS232/TTL 電平轉(zhuǎn)換電路的電路,傳統(tǒng)是采用 9 針式的

10、RS232 接口和 芯片 MAX232 實(shí)現(xiàn)的,而這里是采用 USB 接口和芯片 PL2303HX 來(lái)實(shí)現(xiàn)。 在目標(biāo)單片機(jī)中,為了實(shí)現(xiàn)數(shù)據(jù)通信的同步,它采用主控 CPU 提供了外部時(shí)鐘 (如圖 2-7 所示) ,在接下來(lái)的小節(jié)里將對(duì)此進(jìn)行詳細(xì)的介紹。 2 2 電路模塊分析電路模塊分析 接下來(lái)將詳細(xì)介紹該編程器的各個(gè)電路組成部分,其中包括編程器的電源部分、 串行數(shù)據(jù)傳輸電路、主控部分電路。 2.1 電源部分電源部分 該設(shè)計(jì)采用計(jì)算機(jī)的 USB 端口進(jìn)行供電。該供電電路采用了濾波單元,如下圖 2- 1 所示: 圖 2-1 電源濾波電路 實(shí)踐證明,加入濾波電容 C1(103) 、C2(104)后,電

11、源的曲線(xiàn)明顯平滑很多, 如下圖 2-2、2-3 所示 圖 2-2 加入該濾波電路前 圖 2-3 加入濾波電路后 另外,為了提供 AT89C2051、AT89C405、AT89C51、AT89C52 這些芯片的+12V 編程 電壓,這里還加入了一個(gè)+5V 到+12V 的 DC-DC 變換電路。這個(gè)電路有一個(gè)開(kāi)關(guān)電源模 1 2 3 4 US1 USB 104 C4 VCC 100uF C5 塊 MC34063 組成。 2.1.1 MC34063 芯片介紹 MC34063 是一單片雙極型線(xiàn)形集成電路,片內(nèi)包含溫度補(bǔ)償帶隙基準(zhǔn)源、一個(gè)占空 比周期控制器、驅(qū)動(dòng)器和大電流輸出開(kāi)關(guān),輸出開(kāi)關(guān)電流能達(dá)到 1.

12、5A,它能夠使用最 少的外接元件構(gòu)成升壓變換器、降壓變換器和電源反向器。 MC34063 具有下列特點(diǎn): (1)寬電壓工作范圍,能在 3.0V 到 40V 內(nèi)進(jìn)行工作 (2)內(nèi)部具有短路電流限制功能 (3)靜態(tài)工作電流很低,能達(dá)到 nA 級(jí) (4)輸出開(kāi)關(guān)電流可達(dá)到 1.5A(無(wú)外接擴(kuò)流電路) (5)輸出電壓可調(diào) (6)工作振蕩頻率從 100Hz 到 100KHz (7)可構(gòu)成升壓變換器、降壓變換器和電源反向器 接下來(lái)再介紹這個(gè)由 MC34063 構(gòu)成的 DC-DC 升壓變換器的工作原理,下圖 2-4 給 出的是 MC34063 的框圖: 圖 2-4 MC34063 內(nèi)部結(jié)構(gòu)圖 它的典型 DC

13、-DC 升壓應(yīng)用電路圖 2-5 如下: SWC 1 SWE 2 TCAP 3 GND 4 -VIN 5 VCC 6 IPK 7 DRVC 8 U? MC34063AD VCC +5V 0R5 R1 220pF C1 220 R2 120uH L1 D1 1N4148 20K R3 100uF C2 25v 2.2K R4 VCC +12V 圖 2-5 MC34063DC-DC 升壓應(yīng)用電路圖 這里采用的元件參數(shù)是+5V 變換+12V 所設(shè)計(jì)的,它是一個(gè) BOOST2拓?fù)浣Y(jié)構(gòu)的 DC- DC 變換器3,內(nèi)部框圖所表示的電路解釋如下: 該電路是一個(gè)典型的開(kāi)關(guān)電源2,3,振蕩器通過(guò)恒流源對(duì)外接 CT

14、(3 腳)上的定時(shí)電 容不斷充電和放電,以產(chǎn)生振蕩波形。充電和放電電流都是恒定的,所以振蕩頻率僅 取決于電容的容量。與門(mén)的 C 輸入端在振蕩對(duì)外充電是為高電平,D 輸入端在比較器的 輸入電平低于閾值電平時(shí)為高電平。當(dāng) C 和 D 輸入端都變成高電平時(shí),觸發(fā)器被設(shè)置 為高電平,輸出開(kāi)關(guān)管導(dǎo)通。反之,在振蕩放電期間,C 輸入端為低電平,觸發(fā)器被復(fù) 位,使輸出開(kāi)關(guān)管處于關(guān)閉狀態(tài)。 電流限制 SI 檢測(cè)端(5 腳)通過(guò)檢測(cè)連接在 VCC +5V 和 5 腳之間上的電阻的壓降來(lái) 完成功能。當(dāng)檢測(cè)到電阻上的壓降接近超過(guò) 300mV 時(shí),電流限制電路開(kāi)始工作。這時(shí) 通過(guò) CT 管腳(3 腳)對(duì)定時(shí)電容進(jìn)行快

15、速充電,以減少充電時(shí)間和輸出開(kāi)關(guān)管的導(dǎo)通 時(shí)間,結(jié)果是使輸出開(kāi)關(guān)管的關(guān)閉時(shí)間延長(zhǎng),達(dá)到電流限制的目的。 2.22.2串行數(shù)據(jù)傳輸電路串行數(shù)據(jù)傳輸電路 科技高速發(fā)展的今天,電器產(chǎn)品都向微型化、集成化發(fā)展。計(jì)算機(jī)科技發(fā)展到今 天,其外圍接口也發(fā)生了巨大的變化,通用串行接口(USB 接口)已經(jīng)成為今天發(fā)展的 主流。本章主要介紹的是接口統(tǒng)一的設(shè)計(jì),目的是為了使前幾章所設(shè)計(jì)的產(chǎn)品,更能 適如今天計(jì)算機(jī)發(fā)展和面對(duì)更多的用戶(hù)群。 圖 2-6串行數(shù)據(jù)傳輸電路 由于計(jì)算機(jī)的串行口出來(lái)的是RS-232電平,它是負(fù)邏輯電平,以+3+15V為邏輯 0,以-15-3V為邏輯1,而采用的單片機(jī)芯片是TTL電平,它是正邏輯

16、電平,以0V為邏 輯0以+5V為邏輯1 ,所以想要完成它們良好的數(shù)據(jù)交換,必須有接口電路進(jìn)行邏輯電 平的轉(zhuǎn)換,以往設(shè)計(jì)往往采用的是MAXIM公司生產(chǎn)MAX232的電平轉(zhuǎn)換芯片,而這里采用 的是Prolific公司生產(chǎn)的一種高度集成的RS232-USB 接口轉(zhuǎn)換器PL2303,該芯片 的具體介紹可以看小節(jié)2.2.1。 2.2.1 PL2303 芯片介紹 PL2303 是Prolific 公司生產(chǎn)的一種高度集成的RS232-USB 接口轉(zhuǎn)換器,可提供一 個(gè)RS232 全雙工異步串行通信裝置與USB 功能接口便利聯(lián)接的解決方案。該器件內(nèi)置 USB功能控制器、USB 收發(fā)器、振蕩器和帶有全部調(diào)制解調(diào)器

17、控制信號(hào)的UART, 只需 外接幾只電容就可實(shí)現(xiàn)USB 信號(hào)與RS232 信號(hào)的轉(zhuǎn)換,能夠方便嵌入到各種設(shè)備,所 以2000年左右開(kāi)始A經(jīng)常推薦使用該款芯片;該器件作為USB/RS232 雙向 轉(zhuǎn)換器,一方面從主機(jī)接收USB 數(shù)據(jù)并將其轉(zhuǎn)換為RS232 信息流格式發(fā)送給外設(shè);另 一方面從RS232 外設(shè)接收數(shù)據(jù)轉(zhuǎn)換為USB 數(shù)據(jù)格式傳送回主機(jī)。這些工作全部由器件 自動(dòng)完成,開(kāi)發(fā)者無(wú)需考慮固件設(shè)計(jì). PL2303 的高兼容驅(qū)動(dòng)可在大多操作系統(tǒng)上模擬成傳統(tǒng) COM 端口,并允許基于 COM 端口應(yīng)用可方便地轉(zhuǎn)換成 USB 接口應(yīng)用,通訊波特率高達(dá) 6 Mb/s。在工作模式和休眠 模式時(shí)都具有功耗低

18、,是嵌入式系統(tǒng)手持設(shè)備的理想選擇。 PL2303 的特點(diǎn)的特點(diǎn): 完全符合USB規(guī)范2.0(全速兼容) 片內(nèi)擁有USB 1.1收發(fā)器,5V轉(zhuǎn)3.3V的穩(wěn)壓器,12 MHz的晶體振蕩器 寬廣的流量控制機(jī)制 1) 自動(dòng)與CTS / RTS流控制 2) 自動(dòng)使用的XON / XOFF流量控制 3) 入站數(shù)據(jù)緩沖區(qū)溢出檢測(cè) 支持從遠(yuǎn)程輸入相關(guān)調(diào)制信號(hào)進(jìn)行喚醒功能 兩個(gè)通用的I/O(GPIO)引腳 啟動(dòng)時(shí)可以將配置存儲(chǔ)于外部的EEPROM 提供支持Windows和Mac OS,Linux和WinCE的驅(qū)動(dòng)程序 有專(zhuān)為Windows XP驅(qū)動(dòng)程序認(rèn)證的標(biāo)志 IC是SSOP封裝的小尺寸28引腳 可配置的51

19、2個(gè)字節(jié)雙向數(shù)據(jù)緩沖器 1)256字節(jié)的輸出緩沖區(qū)和256字節(jié)的輸入緩沖區(qū) 2)128字節(jié)的輸出緩沖區(qū)和384字節(jié)的輸入緩沖區(qū) 支持RS232這樣的串行接口 1)全雙工發(fā)送器和接收器(TxD和RxD) 2)獨(dú)立的串行接口電源 3)內(nèi)容可以為5,6,7或8個(gè)數(shù)據(jù)位 4)支持自動(dòng)握手各種模式 5)一,一個(gè)半,或兩個(gè)停止位 6)奇偶錯(cuò)誤,幀錯(cuò)誤和串行中斷檢測(cè) 7)可編程波特率從75bps到6 Mbps 8)外部的RS232驅(qū)動(dòng)下降控制 9)六個(gè)調(diào)制解調(diào)控制引腳(RTS,CTS,DTR,DSR,DCD 和 RI) 對(duì)應(yīng)引腳及說(shuō)明 引腳名字類(lèi)型引 腳 描 述 1TXD 輸出數(shù)據(jù)輸出到串口; 2DTR_N

20、 輸出數(shù)據(jù)終端準(zhǔn)備好,低電平有效; 3RST_N 輸出發(fā)送請(qǐng)求,低電平有效; 4VDD_325 電源 RS232的電源,為串行端口信號(hào)的電源引腳;當(dāng)串 口為3.3V,這應(yīng)該是3.3;當(dāng)串行端口是2.5V,這 應(yīng)該是2.5V; 5 RXD 輸入 串口數(shù)據(jù)輸入; 6 RI_N 輸入/輸出串行端口(環(huán)指示器); 7 GND 電源 接地; 8 NC 無(wú)連接 9 DSR_N 輸入/輸出串行端口(數(shù)據(jù)集就緒) 10DCD_N 輸入/輸出串行端口(數(shù)據(jù)載波檢測(cè)) 11CTS_N 輸入/輸出串行端口(清除發(fā)送) 12SHTD_N 輸出 控制RS232收發(fā)器關(guān)機(jī) 13EE_CLK 輸入/輸出串行EEPROM時(shí)鐘

21、 14EE_DATA 輸入/輸出串行EEPROM數(shù)據(jù) 15DP 輸入/輸出USB端口D+信號(hào) 16DM 輸入/輸出USB端口D-信號(hào) 17VO_33 常規(guī)3.3V電源輸出 18GND 接地 19NC 無(wú)連接 20VDD_5 電源 USB端口的5V電壓電源 21GND 接地 22GP0 輸入/輸出通用I/O引腳0 23GP1 輸入/輸出通用I/O引腳1 24NC 無(wú)連接 25GND_A 模擬地鎖相環(huán) 26PLL_TEST 輸入 PLL鎖相環(huán)測(cè)試模式控制 27OSC1 輸入 晶體振蕩器輸入 28OSC2 輸入/輸出晶體振蕩器輸出 2.3 主控部分電路主控部分電路 該編程器的工作原理是計(jì)算機(jī)軟件通過(guò)

22、一個(gè) USB 端口來(lái)與它進(jìn)行通信的,由計(jì)算機(jī) 軟件來(lái)對(duì)主控 CPU 進(jìn)行控制,間接完成對(duì)目標(biāo)的數(shù)據(jù)讀取、編程、加密等操作。下面 給出的是主控部分的具體原理圖92-7: 圖 2-7 主控部分電路圖 上圖的主控 CPU 中包含外部時(shí)鐘發(fā)生電路(晶體振蕩電路) ,RC 復(fù)位電路等另外, 在單片機(jī)工作時(shí)利用內(nèi)部振蕩電路在 XTAL1、XTAL2 引線(xiàn)外接定時(shí)元件(如上圖所示) 就會(huì)產(chǎn)生自激振蕩,外部晶體振蕩器在 1.2MHZ24MHZ 之間選擇。在晶振外圍,可接兩 個(gè)濾波電容,它的取值對(duì)振蕩頻率輸出的穩(wěn)定性、大小、振蕩電路的起振速度多少會(huì)產(chǎn) 生影響。C6 和 C7 的取值可在 20pF 到 100 p

23、F 之間,一般取 30 pF 1。 實(shí)踐證明,單片機(jī)在與計(jì)算機(jī)進(jìn)行通信時(shí),使用 12Mhz 的晶振,計(jì)算機(jī)軟件無(wú)法 正常識(shí)別器件,容易產(chǎn)生錯(cuò)誤。檢查后發(fā)現(xiàn),在更換使用 11.0592Mhz 晶振后,才能穩(wěn) 定工作。其原因在與計(jì)算機(jī)使用的通信總線(xiàn)波特率是 11.0592Mhz 的整數(shù)倍,在使用 12Mhz 的晶振時(shí),存在頻率偏差,使用 11.0592Mhz 的晶振就能解決問(wèn)題10,11,12。 其他的,由于沒(méi)有使用外部程序存儲(chǔ)器(外部 ROM) ,單片機(jī)的 31(EA 腳)腳必需 接一個(gè)高電平5。目標(biāo)單片機(jī)中,為了使與主控 CPU 通信是保持?jǐn)?shù)據(jù)傳輸?shù)耐剑什?用主控 CPU 的時(shí)鐘信號(hào)作為外

24、部時(shí)鐘信號(hào)輸入,具體接法如下圖 2-8 所示: 圖 2-8 外部時(shí)鐘連接圖 VCC P0.0 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 #EA/VPP ALE/#PROG PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.1 1 2 3 4 5 6 7 8 16 15 14 13 12 11 10 9 10K RESPACK4 VCC +5VVCC +5V 11.0592M C6 30pf C7 30pf VCC +5V P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P3.0/RXD P3

25、.1/TXD P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 XTAL2 XTAL1 VSS P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P3.0/RXD P3.1/TXD P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 XTAL2 XTAL1 VSS VCC P0.0 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 #EA/VPP ALE/#PROG PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.1 S1 SW DPDT Up:For AT89C51,S51. D

26、own:For AT89C2051 2051s RST 2051s GND P1.0 Vpp TXD RXD 10K R11 22uF C3 VCC +5V 外部時(shí)鐘是把外部的時(shí)鐘信號(hào)輸入到 XTAL1 或 XTAL2。但是要注意的是,HMOS 和 CHOMS 的單片機(jī)外部時(shí)鐘輸入引線(xiàn)不同,其內(nèi)部的時(shí)鐘振蕩方式也不同。HMOS 型的單 片機(jī)由 XTAL2 輸入,而內(nèi)部反向放大器的 XTAL1 應(yīng)接地。由于 XTAL1 的電平方式不是 TTL 的,故還要接一個(gè)上拉電阻。CHMOS 型的單片機(jī)由 XTAL1 輸入外部時(shí)鐘信號(hào), XTAL2 可接地也可以不接1。本設(shè)計(jì)采用的是 CHMOS 的方式,因

27、為 CHMOS 工藝已經(jīng)是現(xiàn) 在生產(chǎn)工藝的主流,HMOS 型工藝在 MCS51 中已經(jīng)很少采用了。 另外,由于單片機(jī)的 P0 口5內(nèi)部結(jié)構(gòu)比較特殊,在使用 P0 口做為 I/O 口時(shí),必須 接上拉電阻,而本設(shè)計(jì)的電路中,P0、P1、P2 三個(gè) I/O 口都是并聯(lián)的,故在目標(biāo)單片 機(jī) P0 口接上拉電阻,就可供主控 CPU 和目標(biāo)單片機(jī)使用。 圖中的開(kāi)關(guān) S1,是用于切換目標(biāo)單片機(jī)的類(lèi)型。由于 AT89C1051、AT89C2051、AT89C4051 的外部引腳是 20 腳的,為了節(jié)約成本,本設(shè)計(jì)采 用一個(gè) 40PIN 的緊鎖插座來(lái)適配 PIN40 和 PIN20 的單片機(jī),目標(biāo)單片機(jī)第 1

28、腳與緊鎖 插座的第 1 腳對(duì)齊。開(kāi)關(guān)打開(kāi)時(shí)主控 CPU 的 P0、P1、P2 三個(gè) I/O 口與目標(biāo)單片機(jī) (PIN40)的 P0、P1、P2 三個(gè) I/O 并聯(lián),這時(shí)目標(biāo)單片機(jī)的 31 腳(EA 腳)接到 VCC 電 源處;開(kāi)關(guān)合上是主控 CPU 的 P0、P1 I/O 口與目標(biāo)單片機(jī) (AT89C1051、AT89C2051、AT89C4051)的 P1、P3 三個(gè) I/O 并聯(lián),這時(shí)目標(biāo)單片機(jī)的 31 腳(EA 腳)接到 GND 地處12。就是這樣,開(kāi)關(guān) S1 完成了使用 PIN40 和 PIN20 芯片 的切換。另外要注意的是,當(dāng)使用 PIN20 的目標(biāo)單片機(jī)時(shí),PIN40 的緊鎖插座

29、的第 10、29 腳接地,10 腳提供 PIN20 目標(biāo)單片機(jī)的地,29 腳提供單片機(jī)編程時(shí)的 PSEN 信 號(hào)。在使用 PIN40 目標(biāo)的單片機(jī)時(shí),PIN40 的緊鎖插座的第 30 腳接地(ALE)腳接地。 由于 AT89C1051、AT89C2051、AT89C4051、AT89C51、AT89C52 的編程電壓是+12V 的,其他的芯片進(jìn)行編程操作時(shí)的編程電壓是+5V 的,讀取目標(biāo)單片機(jī)數(shù)據(jù)時(shí)不需要編 程電壓,這就要求有一個(gè)+5V/+12V/0V 轉(zhuǎn)換電路14,由主控 CPU 的 P3.3、P3.4 間接對(duì) 其電壓轉(zhuǎn)換進(jìn)行控制,它的電路原理圖如下圖 2-9 所示: 圖 2-9 12V/5

30、V/0V 控制切換電路 這個(gè)+5V/+12V/0V 轉(zhuǎn)換電路是由三個(gè)三極管4構(gòu)成,由主控 CPU 的 P3.3、P3.4 的 3 個(gè)邏輯狀態(tài)進(jìn)行控制,節(jié)點(diǎn) Power Output 輸出編程電壓。當(dāng) P3.3、P3.4 的邏輯狀態(tài) 為 00 時(shí),Q1、Q2、Q3 均截止,節(jié)點(diǎn) Power Output 輸出+5V 編程電壓;當(dāng) P3.3、P3.4 的邏輯狀態(tài)為 01 時(shí),Q1、Q2 截止,Q3 導(dǎo)通,節(jié)點(diǎn) Power Output 輸出+12V 編程電壓; 當(dāng) P3.3、P3.4 輯狀態(tài)為 10 時(shí),節(jié)點(diǎn) Power Output 沒(méi)有編程電壓輸出,也就是輸出電 壓為 0V。 2.4 編程器的

31、特點(diǎn)介紹編程器的特點(diǎn)介紹 本小節(jié)中針對(duì)本設(shè)計(jì)的思想,總結(jié)了一下該設(shè)計(jì)的特點(diǎn)6: (1) 該設(shè)計(jì)使用串口通信,芯片型號(hào)自動(dòng)判別,編程過(guò)程中的擦除、燒寫(xiě)、校驗(yàn) 各種操作完全由編程器上的監(jiān)控芯片 89C51 控制,不受 PC 配置及其主頻的影響,因此 燒寫(xiě)成功率高,可以達(dá)到 100%,燒寫(xiě)速度很快并且燒寫(xiě)速度和微機(jī)的檔次無(wú)關(guān)。 (2) 采用 28800 高速波特率進(jìn)行數(shù)據(jù)傳送,編程速度可以和一般并行編程器可媲 美。經(jīng)測(cè)試,燒寫(xiě)一片 4K ROM 的 AT89C51 僅需要 9.5s,而讀取和校驗(yàn)僅需要 3.5s。 (3) 體積小巧,省去笨重的外接電源適配器,直接使用 USB 端口 5V 電源,攜帶

32、方便。 (4) 軟件界面友好,菜單、工具欄、快捷鍵齊全,全中文操作,提供加密功能, 可以保護(hù)創(chuàng)作產(chǎn)權(quán)。 (5) 功能完善,具有編程、讀取、校驗(yàn)、空檢查、擦除、加密等系列功能。 (6) 40pin 和 20pin 鎖緊插座,所有器件全部以第一腳堆對(duì)齊,無(wú)附加跳線(xiàn),對(duì) 于 DIP 封裝芯片無(wú)需任何適配器。 (7) 采用萬(wàn)用鎖緊插座,可燒寫(xiě) 40 腳單片機(jī)芯片和 20 腳單片機(jī)芯片。 (8) 改進(jìn)燒寫(xiě)深度確保每一片 C51 系列芯片的反復(fù)燒寫(xiě)次數(shù)都能達(dá)到 1000 以上! 內(nèi)部數(shù)據(jù)至少保存 10 年。 3 3 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì) 單片機(jī)的進(jìn)行正常的工作,除了外圍元件以外,內(nèi)部的程序是必不可少的

33、。本章 主要介紹的是 ATMEIL AT89 系列通用單片機(jī)編程器的軟件設(shè)計(jì),它是設(shè)計(jì)主控單片機(jī) 的軟件部分,連接計(jì)算機(jī)和目標(biāo)單片機(jī)的“橋梁”部分。 3.1 上位機(jī)軟件設(shè)計(jì)上位機(jī)軟件設(shè)計(jì) 3.1.1 VC 簡(jiǎn)介 上位機(jī)軟件是采用 VC 中提供的串行通信控件 MSComm 制作的。Visual C+是微軟公 司推出的一種面向?qū)ο蟮目梢暬删幊坦ぞ?,使?Visual C+可以勝任從最簡(jiǎn)單的 用戶(hù)界面程序到高級(jí)、復(fù)雜的 Windows 應(yīng)用程序的編程工作。使用 VisualC+編寫(xiě)的程 序代碼尺寸小、運(yùn)行速度高和移植能力強(qiáng)等特點(diǎn)。 VisualC+成為目前最受歡迎的開(kāi) 發(fā)工具之一,其中一個(gè)重要的

34、原因是它有一個(gè)龐大而功能齊全的 MFC 類(lèi)庫(kù),該類(lèi)庫(kù)實(shí) 現(xiàn)了對(duì)大多數(shù) Windows API 的封裝。在 VisualC+6.0 中既可以使用 MFC 完成大多數(shù)的 工作,也可以調(diào)用 Windows API 函數(shù)完成更深層次的開(kāi)發(fā)。 MSComm 是 Microsoft 公司提供的簡(jiǎn)化 Windows 下串行通信編程的 ActiveX 控件, 它既可以用來(lái)提供簡(jiǎn)單的串口通信功能,也可以用來(lái)創(chuàng)建功能完備的、事件驅(qū)動(dòng)的高 級(jí)通信工具。 MSComm 控件在串口編程時(shí)非常方便,程序員不必花時(shí)間去了解較為復(fù)雜的 API 函 數(shù),而且在 VB、VC+、C+Builder、Delphi 等語(yǔ)言中均可使用。

35、 MSComm 控件提供了一系列標(biāo)準(zhǔn)通信命令的使用接口,使用它可以建立與串口的連 接,通過(guò)串口連接到其他通信設(shè)備,發(fā)出命令,交換數(shù)據(jù),以及監(jiān)視和響應(yīng)串行連接 中發(fā)生的事件和錯(cuò)誤。 3.1.2 上位機(jī)軟件主流程框圖 上位機(jī)軟件采用 VC 提供的串行通信控件 MSComm 來(lái)制作,基本流程框圖如下: 否 開(kāi)始 串口通信初始化 結(jié)束 啟動(dòng) OnComm 中斷事件 讀操作 寫(xiě)操作 校驗(yàn) 加密 是 中斷事件 是否發(fā)生 檫除 圖 3-1 上位機(jī)軟件主流程框圖 3.1.3 通信初始化 開(kāi)始 結(jié)束 選擇端口 輸入方式為二進(jìn)制 波特率設(shè)定 其他設(shè)置 圖 3-2 通信初始化流程框圖 3.2 下位機(jī)軟件設(shè)計(jì)下位機(jī)軟

36、件設(shè)計(jì) 3.2.1 下位機(jī)軟件主流程框圖 否 否 是 是 開(kāi)始 通信初始化 是否接收到單 片機(jī)返回?cái)?shù)據(jù) 返回計(jì)算機(jī)數(shù)據(jù)(返回 FID) 加密操作 數(shù)據(jù)校驗(yàn)操作 編程操作 讀取操作 檫除操作 結(jié)束 是否接收到單 片機(jī)返回?cái)?shù)據(jù) 接收數(shù)據(jù) 圖 3-3 主控單片機(jī)軟件主流程圖 3.2.2 擦除 開(kāi)始 結(jié)束 編程前的準(zhǔn)備工作 擦除命令 擦除器件 圖 3-4 擦出流程框圖 3.2.3 讀操作 重發(fā) 開(kāi)始 結(jié)束 設(shè)置成編程狀態(tài) 等待上位機(jī)回應(yīng) 1 個(gè)字節(jié) 判斷事件 保存讀出的數(shù)據(jù)塊 想上位機(jī)發(fā)送讀出的數(shù)據(jù)塊 讀結(jié)束 圖 3-5 讀操作流程圖 3.2.4 寫(xiě)操作 是 開(kāi)始 結(jié)束 編程前的準(zhǔn)備工作 回應(yīng)上位機(jī)表

37、示進(jìn)入寫(xiě)狀態(tài) 是否出錯(cuò) 否 繼續(xù)寫(xiě)數(shù)據(jù) 圖 3-6 寫(xiě)操作流程圖 3.2.7 軟件部分原代碼及解釋 主控單片機(jī)的程序編寫(xiě)采用 C12,13語(yǔ)言編寫(xiě),這樣的高級(jí)語(yǔ)言便于后期的優(yōu)化,移 植等。 編程器和計(jì)算機(jī)能協(xié)調(diào)的工作肯定是要有個(gè)通訊協(xié)議的。Easy U 的通訊協(xié)議很簡(jiǎn) 單。每次編程操作,計(jì)算機(jī)發(fā)給編程器 18 個(gè)字節(jié),編程器完成編程操作后再回應(yīng)計(jì)算 機(jī) 18 個(gè)字節(jié)(讀,寫(xiě)過(guò)程略有不同,請(qǐng)看源程序) 。 012-17 編程操作的標(biāo)識(shí) FID 該操作相關(guān)的數(shù)據(jù) 表 3-7 計(jì)算機(jī)發(fā)送數(shù)據(jù)格式 編程操作標(biāo)識(shí)是這樣定義的: switch( ComBuf0 ) /根據(jù)操作 ID 跳到不同的操作函數(shù) c

38、ase 0 x00: RstPro();/編程器復(fù)位 break; case 0 x01: ReadSign();/讀特征字 break; case 0 x02: Erase();/擦除器件 break; case 0 x03: Write();/寫(xiě)器件 break; case 0 x04: Read();/讀器件 break; case 0 x05: Lock(); /寫(xiě)鎖定位 break; default: SendData(); break; FID 已經(jīng)解釋過(guò)的, FID 是這樣調(diào)用到控制器件編程操作的子程序的: 在 e51pro.h 中定義了這樣一個(gè)結(jié)構(gòu): struct _prowo

39、rk /定義編程器的一般操作 void (*fpInitPro)(); /編程前的準(zhǔn)備工作 void (*fpReadSign)(); /讀特征字 void (*fpErase)(); /擦除器件 BOOL (*fpWrite)(BYTE); /寫(xiě)器件 BYTE (*fpRead)(); /讀器件 void (*fpLock)(); /寫(xiě)鎖定位 void (*fpProOver)(); /編程結(jié)束后的工作 ; typedef struct _prowork ProWork; ProWork pw; /編程器一般操作 上描述的代碼中都是一堆函數(shù)的指針,在調(diào)用編程操作(就是最上面那一堆程序 swi

40、tch(ComBuf0))之前,還要先執(zhí)行這下面這些代碼: switch( ComBuf1 ) /根據(jù) FID 設(shè)置 (ProWork)pw 中的函數(shù)指針 case 0: /at89c51 編程器 PreparePro00(); break; case 1:/at89c2051 編程器 PreparePro01(); break; case 2:/at89s51 編程器 PreparePro02(); break; case 3:/擴(kuò)充器件時(shí),請(qǐng)繼續(xù)向下添加 break; default: ComBuf0=0 xff; ComBuf1=0 xff;/表示無(wú)效的操作 break; AT89C51

41、PRO.C 中的 PreparePro00()函數(shù)實(shí)現(xiàn)了這樣的功能: void PreparePro00()/設(shè)置 pw 中的函數(shù)指針,讓主程序可以調(diào)用 上面的函數(shù) pw.fpInitPro=InitPro00; pw.fpReadSign=ReadSign00; pw.fpErase=Erase00; pw.fpWrite=Write00; pw.fpRead=Read00; pw.fpLock=Lock00; pw.fpProOver=ProOver00; 其中 InitPro00(),ReadSign00().ProiOver00()這些函數(shù)都寫(xiě)在了 AT89C51PRO.C 中,他們實(shí)

42、現(xiàn)了控制編程器對(duì) AT89C51 編程的具體細(xì)節(jié)。 void Erase00() /擦除 AT89C51 InitPro00(); /根據(jù)器件的 DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) P2_6=1; P2_7=0; P3_6=0; P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); P3_2=0; Delay_ms(10); P3_2=1; Delay_ms(1); ProOver00(); 上描述的代碼是根據(jù)下圖表 3-8 的規(guī)范所編寫(xiě)的 圖表 3-8 AT89C51 編程操作數(shù)據(jù)圖 void Erase02() /擦除 AT89S51 Ini

43、tPro02(); /根據(jù)器件的 DataShee 設(shè)置相應(yīng)的編程控制信號(hào) OutBuf0=0 xac; /看圖 5-2 中的紅框 OutBuf1=0 x80; /看圖 5-2 中的紅框 SendInstrc(4); Delay_ms(500); ProOver02(); 上描述的代碼是根據(jù)下圖(圖表 3-9)的規(guī)范所編寫(xiě)的: 圖表 3-9 AT89S51 擦除 FLASH 數(shù)據(jù)格式 在 Erase02()中看到調(diào)用了 SendInstrc(4)這樣一個(gè)函數(shù),下面解釋一下 void SendInstrc(BYTE nByte)/用 MOSI 串行發(fā)送命令的同時(shí)用 MISO 接收相 關(guān)數(shù)據(jù) BY

44、TE n; for(n=0;nnByte;n+)/發(fā)送 nByte 個(gè)字節(jié) ACC=OutBufn; SCK=0; MOSI=A_7;/SCK 低電平時(shí)輸出一位 SCK=1; B_7=MISO;/SCK 高電平時(shí)接收一位 SCK=0; MOSI=A_6; MOSI=A_1; SCK=1; B_1=MISO; SCK=0; MOSI=A_0; SCK=1; B_0=MISO; SCK=0; InBufn=B; 上描述的代碼是根據(jù)下圖(圖 3-10)的規(guī)范所編寫(xiě)的 圖 3-10 ISP 邏輯時(shí)序圖 最后來(lái)看一個(gè)擴(kuò)充器件的過(guò)程: 讓軟件能識(shí)別出器件,這就要用 “ChipManager”軟件進(jìn)行編輯。

45、用這個(gè)程序打 開(kāi)程序目錄下的 ChipList.chip 文件,然后“增加器件” 。也可以在空白列表上直接 “增加器件” ,然后保存為*.chip 文件,再把這個(gè)文件合并到 ChipList.chip,這就是 使用“從文件導(dǎo)入” 。如下圖 3- 11 所示。 圖 3-11 ChipManager 軟件界面 (注意:當(dāng)特征字沒(méi)有 3 個(gè)字節(jié),可以用 ff 補(bǔ)充) 使用用 ISP 進(jìn)行編程。建一個(gè)*.c 文件,里面實(shí)現(xiàn)這些函數(shù): #include void InitProXX()/編程前的準(zhǔn)備工作 void ProOverXX()/編程結(jié)束后的工作,設(shè)置合適的引腳電平 void ReadSignX

46、X()/讀特征字 void EraseXX()/擦除器件 BOOL WriteXX(BYTE Data)/向器件寫(xiě)一個(gè)字節(jié) BYTE ReadXX()/從器件讀一個(gè)字節(jié) void LockXX()/寫(xiě)鎖定位 void PrepareProXX() /設(shè)置 pw 中的函數(shù)指針,讓主程序可以調(diào)用上 面的函數(shù) pw.fpInitPro=InitProXX; pw.fpReadSign=ReadSignXX; pw.fpErase=EraseXX; pw.fpWrite=WriteXX; pw.fpRead=ReadXX; pw.fpLock=LockXX; pw.fpProOver=ProOverX

47、X; /“XX”就是 FID。 void Erase02()/擦除器件 InitPro02(); /根據(jù)器件的 DataSheet,設(shè)置相應(yīng)的編程控制信號(hào) OutBuf0=0 xac; OutBuf1=0 x80; SendInstrc(4); Delay_ms(500); ProOver02(); 最后把 PrepareProXX()添交到 e51Pro.C 中: 所支持的 FID,請(qǐng)?jiān)谶@里繼續(xù)添加: extern void PreparePro00();/FID=00:AT89C51 編程器 extern void PreparePro01();/FID=01:AT89C2051 編程器

48、extern void PreparePro02();/FID=02:AT89S51 編程器 extern void PrepareProXX();/添加到末尾另外還有: switch(ComBuf1) /根據(jù) FID 設(shè)置(ProWork)pw 函數(shù)指針 case 0:/at89c51 編程器 PreparePro00(); break; case 1:/at89c2051 編程器 PreparePro01(); break; case 2:/at89s51 編程器 PreparePro02(); break; case 3:/擴(kuò)充器件時(shí),請(qǐng)繼續(xù)向下添加 PrepareProXX();添加到

49、末尾 break; default: ComBuf0=0 xff; ComBuf1=0 xff; /表示無(wú)效的操作 break; 4.4.系統(tǒng)調(diào)試系統(tǒng)調(diào)試 串口硬件調(diào)試比較簡(jiǎn)單,調(diào)試時(shí)要注意 PL2303 和單片機(jī)的 TXD 和 RXD 交叉相連。即 TXD 要與 RXD 相連。檢測(cè)升壓電路是否達(dá)到要求,若達(dá)不到要求則要調(diào)整相應(yīng)的電阻值,直到符合要 求為止。 4.1 硬件制作與調(diào)試硬件制作與調(diào)試 這次編程器程序采用了 Keil C 進(jìn)行編寫(xiě),代碼更容易看懂,也更容易修改。下圖 是編程器的 12v/5v/0v 切換控制電路: 圖 4-1 12V/5V/0V 控制切換電路 電路程序如下: void

50、 SetVpp5V()/設(shè)置 Vpp 為 5v P3_4=0; P3_3=0; void SetVpp0V()/設(shè)置 Vpp 為 0v P3_3=0; P3_4=1; void SetVpp12V()/設(shè)置 Vpp 為 12v P3_4=0; P3_3=1; 這里有個(gè)最重要的地方需要注意: 圖 4-2 AT89C2051 的 PIN1 是 Vpp/RST 與 AT89C51 的 P1.0 的引腳是同一個(gè)位置,而 AT89C51 的 Vpp/EA 引腳與 AT89C2051 的 P3.7 引腳又是同一個(gè)位置。這里可以用一對(duì)開(kāi)關(guān)進(jìn)行 切換,我是用跳線(xiàn)解決的。燒 2051 時(shí),控制器的 P1.0 正

51、好可以用來(lái)控制 2051 的 P3.7。看源程序中有個(gè)這樣的定義:#define C2051_P3_7P1_0 做編程器的步驟: 1. 先做出一個(gè)最小系統(tǒng),隨便燒個(gè)程序進(jìn)去試試,讓你可以感受的到程序可以正 常運(yùn)行。很多人把編程器做完后始終檢測(cè)不到編程器,檢查錯(cuò)誤都快搞得發(fā)瘋 了,后來(lái)才發(fā)現(xiàn)單片機(jī)根本沒(méi)運(yùn)行。 2. 完成串口通訊的部分后,把程序燒進(jìn)去,打開(kāi)軟件,看狀態(tài)那里有沒(méi)有“編程 器:就緒” 。如果沒(méi)有可以多復(fù)位幾次。如果還沒(méi)有檢測(cè)到編程器,看看端口, 波特率是否設(shè)置正確。默認(rèn)波特率是 28800,工作方式 1,可以參照源程序。也 可以用別的程序測(cè)試單片機(jī)與 PC 通訊是否正常。 3. 這時(shí)

52、候焊好一個(gè)芯片插座就可以用來(lái)編程 AT89S51 了,建議先把 AT89S51 的編 程器做出來(lái)。AT89S51 編程器只要控制 P1.5,P1.6,P1.7,RST 這幾個(gè)腳就可以了, 但也要保證它是最小系統(tǒng)。 4. 接著把其他部分做完,這就要焊一堆東西了。有個(gè)很好的辦法可以省去焊一堆 線(xiàn):看電路就會(huì)發(fā)現(xiàn),單片機(jī) P0,P1,P2 與目標(biāo)插座是對(duì)應(yīng)連接的,可以把單片 機(jī)貼在插座的底部,直接引腳和引腳焊在一起,不過(guò)要注意別把單片機(jī)燒了, 動(dòng)手要快,要溫柔。不該焊在一起的引腳還要想辦法隔開(kāi)。 5. 做完后如果通訊正常就直接放塊器件看能不能被檢測(cè)到,能檢測(cè)再試試能不能 讀寫(xiě)。如果不行就要用這個(gè)軟件

53、了,如下圖: 圖 4-3 這個(gè)軟件原先是用來(lái)學(xué) CPLD 時(shí)測(cè)試邏輯功能是否正確的。利用單片機(jī)的 P0-P3 口 發(fā)出電平和接收電平并顯示,還可以調(diào)試子程序,可以給定子程序參數(shù)并調(diào)用,然后 觀(guān)察子程序的返回值。上面有一堆按鈕,點(diǎn)按鈕后單片機(jī)相對(duì)應(yīng)的引腳電平就會(huì)改變, 這時(shí)就可以用表測(cè)量,看是否隨按下的按鈕而變化,這樣就可以判斷線(xiàn)路是否接通。 還有點(diǎn)擊“PROCESS X”時(shí)會(huì)調(diào)用指定的子程序??此脑闯绦蛑杏羞@樣一些子程序: PROCESS_1: CLR P3.3;Vpp=0v SETB P3.4 MOV TX1,#0;顯示 0v RET PROCESS_2: CLR P3.3;Vpp=5V

54、CLR P3.4 MOV TX1,#5;顯示 5v RET PROCESS_3: CLR P3.4;Vpp=12v SETB P3.3 MOV TX1,#12;顯示 12v RET 按下“PROCESS 1” Vpp=0V ,按下“PROCESS 2” Vpp=5V,按下“PROCESS 3” Vpp=12V 這時(shí)用表測(cè)量你的 12v/5v/0v 切換電路是否正常。先要把 SUBPROC.BIN 這個(gè)文 件燒到你的控制器單片機(jī)。 最后把你的編程器調(diào)試到最佳狀態(tài)。如果發(fā)現(xiàn)編程器開(kāi)啟后放置一段時(shí)間就停止了響 應(yīng)或折騰一下就死機(jī)了,這時(shí)可以改進(jìn)一下復(fù)位電路,加入看門(mén)狗之類(lèi)的。如果寫(xiě)入 的數(shù)據(jù)經(jīng)常出錯(cuò)

55、,檢查 12v 電壓是否可以到位,VCC 是否穩(wěn)定。還有通訊線(xiàn)路不要太長(zhǎng), 電纜盡可能的要好。 4.2 軟件調(diào)試軟件調(diào)試 在確保硬件連接線(xiàn)正確的前提下,串口通信能否正常就取決于軟件了。對(duì)軟件進(jìn) 行調(diào)試是一個(gè)具有很強(qiáng)技巧性的工作。軟件不能正常運(yùn)行,往往只是潛在錯(cuò)誤的外部 表現(xiàn),而外部表現(xiàn)與內(nèi)在原因之間常常沒(méi)有明顯的聯(lián)系。如果要找出正真的原因,排 除潛在的錯(cuò)誤,不是一件容易的事。可以說(shuō),調(diào)試是通過(guò)現(xiàn)象找出原因的一個(gè)思維分 析的過(guò)程。 4.2.1 軟件調(diào)試方法: 軟件調(diào)試有很多方法,常用的有 4 種,即強(qiáng)行排錯(cuò)法、回溯排錯(cuò)法、歸納排錯(cuò)法 和演繹排錯(cuò)法。 強(qiáng)行排錯(cuò)法強(qiáng)行排錯(cuò)法:這種方法需要?jiǎng)幽X筋的地方

56、較少,因此叫強(qiáng)行排錯(cuò)法。通常有以下 3 種表現(xiàn)形式: 打印內(nèi)存變量的值。在程序執(zhí)行時(shí),通過(guò)打印內(nèi)存變量的數(shù)值,將該值同預(yù)期 的數(shù)值進(jìn)行比較,判斷進(jìn)行比較,判斷程序是否執(zhí)行出錯(cuò)。對(duì)于小程序,這種方法很 有效。但程序較大時(shí),由于數(shù)據(jù)量大,邏輯關(guān)系復(fù)雜,效果較差。 在程序關(guān)鍵分支處設(shè)置斷點(diǎn),如彈出提示框。這種方法對(duì)于弄清多分支程序的 流向很有幫助,可以很快鎖定程序出錯(cuò)發(fā)生的大概位置范圍。 使用編程軟件的調(diào)試工具。通常編程軟件的 IDE 集成開(kāi)發(fā)環(huán)境都有調(diào)試功能, 使用最多的就是但不調(diào)試功能。它可以一步一步地跟蹤程序的執(zhí)行流程,以便發(fā)現(xiàn)錯(cuò) 誤所在。 回溯排錯(cuò)法回溯排錯(cuò)法:是在小程序中常用的一種有效的調(diào)

57、試方法,一旦發(fā)現(xiàn)了錯(cuò)誤,可以 先分析錯(cuò)誤現(xiàn)象,確定最先發(fā)現(xiàn)該錯(cuò)誤現(xiàn)象的位置。然后人工沿程序的控制流程,追 蹤源程序代碼,直到找到錯(cuò)誤根源或確定錯(cuò)誤產(chǎn)生的范圍。 歸納排錯(cuò)法歸納排錯(cuò)法:這是一種從特殊推斷一般的系統(tǒng)化思考方法。歸納法調(diào)試的基本思 想是:從一些線(xiàn)索著手,通過(guò)分析它們之間的關(guān)系來(lái)找出錯(cuò)誤;為此可能需要列出一 系列相關(guān)的輸入,然后看哪些輸入數(shù)據(jù)的運(yùn)行結(jié)果是正確的,哪些輸入數(shù)據(jù)的運(yùn)行結(jié) 果有錯(cuò)誤;然后加以分析、歸納,最終得出錯(cuò)誤原因。 演繹排錯(cuò)法演繹排錯(cuò)法:這是一種從一般原理或前提出發(fā),經(jīng)過(guò)排除和精化的過(guò)程來(lái)推導(dǎo)出 結(jié)論的思考方法。調(diào)試時(shí),首先根據(jù)錯(cuò)誤現(xiàn)象,設(shè)想及枚舉出所有可能出錯(cuò)的原因作

58、 為假設(shè);然后在使用相關(guān)數(shù)據(jù)進(jìn)行測(cè)試,從中逐個(gè)排除不可能正確的假設(shè);最后,再 利用測(cè)試數(shù)據(jù)驗(yàn)證余下的假設(shè)是否是出錯(cuò)的原因。 4.2.2 調(diào)試的原則: 調(diào)試能夠成功一方面在于方法,另外很大程度上取決于個(gè)人的經(jīng)驗(yàn)。但在調(diào)試時(shí), 通常應(yīng)該遵循一些原則。 1.確定錯(cuò)誤的性質(zhì)和位置的原則 分析、思考與錯(cuò)誤征兆有關(guān)的信息,避免死胡同。調(diào)試工具只是一種輔助手段。 利用調(diào)試工具可以幫助思考,但不能代替思考。通常避免使用試探法,最多只能將它 當(dāng)作最后手段,畢竟小概率事件有時(shí)也會(huì)發(fā)生。 2.修改錯(cuò)誤的原則 在出現(xiàn)錯(cuò)誤的地方,很可能還有別的錯(cuò)誤。修改錯(cuò)誤的一個(gè)常見(jiàn)失誤是只修該了 這個(gè)錯(cuò)誤的征兆或這個(gè)錯(cuò)誤的表現(xiàn),而沒(méi)

59、有修改錯(cuò)誤本身。小心修正一個(gè)錯(cuò)誤的同時(shí) 又引入新的錯(cuò)誤。 硬件做完檢查無(wú)誤后,接下來(lái)的步驟就應(yīng)該是進(jìn)行串口通信調(diào)試了。串口通信調(diào) 試需要一些輔助工具軟件,比如串口調(diào)試助手。 4.2.3 串口調(diào)試助手簡(jiǎn)介 串口調(diào)試助手是一個(gè)適用于 Windows 平臺(tái)的串口監(jiān)視和調(diào)試程序。它可以在線(xiàn)設(shè) 置各種通信速率、串口等參數(shù),既可以發(fā)送字符串命令,也可以發(fā)送文件,可以設(shè)置 自動(dòng)發(fā)送/手動(dòng)發(fā)送模式,也可以以十六進(jìn)制顯示接收到的數(shù)據(jù)等,從而提高串口開(kāi)發(fā) 效率。串口調(diào)試助手是串口開(kāi)發(fā)設(shè)計(jì)人員必備的調(diào)試工具。串口調(diào)試工具界面如下圖: 圖 4-4 串口調(diào)試工具界面 4.2.4 串口通信調(diào)試 PC 通過(guò)串口將數(shù)字(00

60、,01,02,03,F(xiàn)F,十六進(jìn)制)發(fā)送給單片機(jī),單片 機(jī)收到后回傳這個(gè)數(shù)字,PC 接收到回傳數(shù)據(jù)后顯示出來(lái),若發(fā)送的數(shù)據(jù)和接收的數(shù)據(jù) 相等,則串行通信正確,否則有錯(cuò)誤。 以下是單片機(jī)串行口發(fā)送/接收程序:每接收到字節(jié)即發(fā)送出去,和微機(jī)相接后鍵 入的字符回顯示在屏幕上,可用此程序結(jié)合串口調(diào)試助手進(jìn)行測(cè)試。實(shí)現(xiàn)代碼如下: #include #define XTAL / CUP 晶振頻率 #define baudrate 9600 / 通信波特率 void main(void) unsigned char c; TMOD = 0 x20; / 定時(shí)器 1 工作于 8 位自動(dòng)重載模式, 用于產(chǎn)生波特

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論