本教材是針對(duì)51內(nèi)核單片機(jī)編寫(xiě)的。
請(qǐng)?jiān)试S我假設(shè)你已經(jīng)掌握基本的模擬與數(shù)字電路知識(shí)、基本的計(jì)算機(jī)理論知識(shí)(比如知道二進(jìn)制是怎么回事,RAM和ROM是什么東西)與操作知識(shí)(比如會(huì)裝載與使用應(yīng)用軟件)、明白C語(yǔ)言的基本規(guī)則與語(yǔ)句。同時(shí),我默認(rèn)你有一本經(jīng)典51教材(哪個(gè)版本都可以)、一本51單片機(jī)應(yīng)用教材(內(nèi)容為給出硬件電路和源程序的單片機(jī)開(kāi)發(fā)實(shí)例)、一塊51單片機(jī)實(shí)驗(yàn)板(含一條串口線)、一塊具有ISP(在系統(tǒng)編程)功能的單片機(jī)、某個(gè)版本的KEIL軟件、某個(gè)版本的ISP燒寫(xiě)軟件、一臺(tái)性能一般的PC電腦。
如果不具備上述任何一項(xiàng),請(qǐng)不要繼續(xù)閱讀本教程,收起你的書(shū)本,回家吧,你無(wú)法學(xué)會(huì)單片機(jī)。知識(shí)方面的欠缺請(qǐng)自己盡快彌補(bǔ)。教材與應(yīng)用書(shū)籍可以借閱,但是我建議各買(mǎi)一本,因?yàn)樗鼈儗儆诠ぞ邥?shū),需要隨時(shí)翻看,版本我就不推薦了,各種版本內(nèi)容基本都一樣,這個(gè)投資需要數(shù)十元。實(shí)驗(yàn)板可以使用我提供的這一款,硬件功底好的也可以自制,成本在100元以?xún)?nèi),網(wǎng)上有很多這方面的資料,且基本配置都大同小異。具有ISP功能的51單片機(jī)我推薦使用飛利浦系列,本實(shí)驗(yàn)板就是針對(duì)P89C51RD2系列(價(jià)格40元左右)設(shè)計(jì)的(周立功單片機(jī)公司全面代理飛利浦單片機(jī),可以聯(lián)系郵購(gòu))。其他ISP功能的單片機(jī)也行,如華邦的W78E系列,AVR哈佛結(jié)構(gòu)(不是51內(nèi)核)高速系列,不過(guò)我都沒(méi)有使用過(guò)。具有ISP功能的單片機(jī)雖然比AT89C51之類(lèi)(10元左右)貴很多,但是配置很強(qiáng)(僅ROM容量就有64K,是AT89C51的16倍),而且相對(duì)于數(shù)百元的編程器或者仿真器來(lái)說(shuō),性?xún)r(jià)比還是很高的,有利于降低硬件投資給初學(xué)者造成的門(mén)檻。KEIL軟件網(wǎng)上隨處都可以下載到(搜索KEIL下載即可),當(dāng)然盡量使用高版本的。ISP編程軟件周立功單片機(jī)的網(wǎng)站可以下載,名稱(chēng)為ZLGISP,飛利浦的WINISP也可以。不算PC電腦的話,200元的投資足夠開(kāi)始學(xué)習(xí)51單片機(jī)了(實(shí)驗(yàn)板+串口線+單片機(jī)+教材)。
OK,這是一份面向?qū)纹瑱C(jī)一無(wú)所知的初學(xué)者的入門(mén)教程。單片機(jī)技術(shù)就如同一張窗戶(hù)紙,這份膚淺的教程就是來(lái)戳穿它的,呵呵。就如同你來(lái)到一個(gè)陌生的城市,我送你一張地圖——不是我水平高,是我比你來(lái)得早,就這么點(diǎn)優(yōu)勢(shì),呵呵。它的作用僅僅是幫助你在茫然的情況下順利上手,至于上手之后的進(jìn)展,就全靠你自己的辛勤鉆研了。你要明白,沒(méi)有任何路標(biāo)能夠代替你走完腳下的路。顯然,我不想你們?cè)傧裎乙粯釉谌腴T(mén)上花費(fèi)過(guò)多寶貴時(shí)間。你們當(dāng)然會(huì)感謝我,這是可以理解的,因?yàn)槲乙苍兄x過(guò)在我入門(mén)的時(shí)候給過(guò)我?guī)椭呐笥选?/p>
好了,我們開(kāi)始學(xué)習(xí)單片機(jī)的旅程。
第一章:?jiǎn)纹瑱C(jī)開(kāi)發(fā)的基本流程
不是所有人都學(xué)過(guò)地理,但是幾乎每個(gè)人都能找到回家的路,學(xué)習(xí)單片機(jī)也是如此。我們先不要看什么教材,我們直接進(jìn)入開(kāi)發(fā)過(guò)程的介紹與學(xué)習(xí),爭(zhēng)取在最短的時(shí)間內(nèi)獲得最多的感性認(rèn)識(shí)。千萬(wàn)不要像學(xué)英語(yǔ)那樣學(xué)單片機(jī),就像背了十年單詞卻沒(méi)見(jiàn)著一回老外——看一年教材也沒(méi)見(jiàn)過(guò)單片機(jī)什么樣的話,那就不可能學(xué)會(huì)了。
針對(duì)我們前言中的軟硬件,基本開(kāi)發(fā)流程是這樣的:
1、在PC電腦上安裝并啟動(dòng)KEIL軟件,建立一個(gè)單片機(jī)
工程項(xiàng)目,調(diào)整設(shè)置,使項(xiàng)目輸出時(shí)生成HEX格式(INTERL公司
規(guī)定的一種二進(jìn)制格式)燒寫(xiě)文件。具體操作詳見(jiàn)第二章。
2、新建程序文件,將其加入項(xiàng)目。用匯編或者C51語(yǔ)言編寫(xiě)一個(gè)程序,編譯,糾錯(cuò),再編譯,再糾錯(cuò),直到錯(cuò)誤全部消失,編譯成功,系統(tǒng)會(huì)自動(dòng)生成HEX格式文件,保存在項(xiàng)目所在的文件夾里。
3、在實(shí)驗(yàn)板斷電的情況下(如果帶電容易擊穿PC機(jī)串口),用串口線連接單片機(jī)與PC機(jī)串口。接通實(shí)驗(yàn)板電源,選擇ISP編程(紅色發(fā)光管亮),復(fù)位,進(jìn)入編程狀態(tài)。啟動(dòng)ISP編程軟件ZLGISP,選擇需要擦除的FLASH塊(初學(xué)編程代碼不會(huì)很大,擦除第一塊BLOCK8K足夠)。點(diǎn)擊設(shè)置選項(xiàng),VECTOR為FC不要改動(dòng),STATUS改為00,點(diǎn)擊寫(xiě)入。然后點(diǎn)擊讀出,確認(rèn)VECTOR確實(shí)為FC,而STATUS確實(shí)為00,如果不是,重新寫(xiě)入,然后退出ISP狀態(tài),則設(shè)置完成。也就是說(shuō)每次退出ISP功能之前,必須確認(rèn)向量為FC,否則下次將無(wú)法進(jìn)入ISP狀態(tài),就好比你把鑰匙放在屋子里卻從外邊鎖上了門(mén)一樣。因?yàn)閂ECTOR和STATUS是同時(shí)被改寫(xiě)的,所以改寫(xiě)STATUS的時(shí)候VECTOR可能發(fā)生誤碼或丟失等錯(cuò)誤,一旦發(fā)生這種情況,只能使用支持P89C51RD2的并行編程器將VECTOR的入口地址FC重新燒入,等于破門(mén)而入拿鑰匙,比較麻煩了。注意,這一步非常關(guān)鍵,STATUS不為00程序?qū)⒉荒苷_\(yùn)行程序,原理下文再做介紹。打開(kāi)編譯好的HEX格式燒寫(xiě)文件。點(diǎn)擊編程選項(xiàng),不必做任何選擇,等待編程自動(dòng)結(jié)束。
4、切換到運(yùn)行狀態(tài)(綠色發(fā)光管亮),按下復(fù)位鍵。此時(shí)程序開(kāi)始運(yùn)行,實(shí)驗(yàn)板的器件會(huì)有相應(yīng)的反應(yīng)。至此一次完整的單片機(jī)開(kāi)發(fā)流程成功結(jié)束。
第二章:KEIL軟件使用方法
如何安裝與啟動(dòng)KEIL軟件我就不說(shuō)了,這個(gè)軟件的功能有三個(gè):編輯程序源代碼,編譯源程序?yàn)槟繕?biāo)文件(目標(biāo)文件就是翻譯過(guò)來(lái)的機(jī)器碼),軟件仿真運(yùn)行結(jié)果。作為初學(xué)者,你要明白編輯和編譯的區(qū)別——就像你要明白秘書(shū)和翻譯的區(qū)別一樣。
啟動(dòng)軟件以后,點(diǎn)擊PROJECT(工程),在下拉菜單中選擇NEW(新建),在對(duì)話框中設(shè)置項(xiàng)目文件的保存位置,具體位置隨你便了。給該工程項(xiàng)目命名,隨你便,但是要把擴(kuò)展名設(shè)為.UV2,比如可以命名為L(zhǎng)ED.UV2,保存。此時(shí)彈出單片機(jī)設(shè)備選擇對(duì)話框,針對(duì)我們的實(shí)驗(yàn)板請(qǐng)選擇ATMEL公司的AT89C51或者PHILIPS公司的8XC51RD2,點(diǎn)擊確定。
點(diǎn)擊FILE(文件)中的NEW,此時(shí)會(huì)出現(xiàn)一個(gè)文本界面,點(diǎn)擊FILE中的SAVE(保存),在對(duì)話框中設(shè)置保存路徑(最好與剛才的工程文件在一個(gè)文件夾中)。給該源程序文件命名,擴(kuò)展名要根據(jù)你使用的編程語(yǔ)言確定,如果使用匯編語(yǔ)言,就命名為.ASM,如果使用C51語(yǔ)言,就命名為.C。對(duì)于沒(méi)有學(xué)過(guò)C51的初學(xué)者來(lái)說(shuō),應(yīng)使用.ASM,比如LED.ASM,保存。
在左面的工程窗口里用右鍵點(diǎn)擊TARGET1,選擇OPTIONS FOR TARGET ‘TARGET 1’ ,在對(duì)話框中選擇OUTPUT選項(xiàng),在CREAT HEX FILE選項(xiàng)前打勾,點(diǎn)擊確定,這樣編譯之后,在工程項(xiàng)目所在的文件夾中就能夠生成HEX格式的燒寫(xiě)文件了。
點(diǎn)擊TARGET1前面的加號(hào),用右鍵點(diǎn)擊SOURSE GROUP 1,選擇ADD FILES TO GROUP ‘SOURSE GROUP 1’ ,將剛才新建的源程序文件加入。此時(shí)SOURSE GROUP 1之前也有加號(hào)了,點(diǎn)擊會(huì)看到你新建的文件。
雙擊進(jìn)入你建立的文件,現(xiàn)在可以編寫(xiě)你的第一個(gè)程序了。
第三章:你的第一個(gè)單片機(jī)程序
源程序如下:
ORG 00H
MOV P0 , #55H
LOOP: SJMP LOOP
END
什么?這么簡(jiǎn)單?!是不是在搞笑?!沒(méi)錯(cuò),雖然簡(jiǎn)單,但這就是一個(gè)完整的單片機(jī)程序。具體語(yǔ)句我先不作解釋?zhuān)阋劝堰@個(gè)程序在實(shí)驗(yàn)板上跑起來(lái)才行。點(diǎn)擊編譯按鈕(項(xiàng)目窗口上面那三個(gè)蛋糕一樣的按鈕中間或者右邊那個(gè)),也可以選擇PROJECT選項(xiàng)中的BUILD TARGET選項(xiàng),編譯就自動(dòng)開(kāi)始。如果有錯(cuò)誤或者警告,下面的編譯輸出欄將會(huì)顯示,如果你編譯過(guò)C語(yǔ)言的程序,就會(huì)比較熟悉,所以要求你具有一定的C語(yǔ)言基礎(chǔ)。如果沒(méi)有錯(cuò)誤和警告,系統(tǒng)將顯示代碼量,DATA表示占用內(nèi)部RAM空間的大小,XDATA表示占用外部RAM空間的大小,CODE表示占用片內(nèi)ROM空間的大小。P89C51RD2HBP本身有1K內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM,64K內(nèi)部程序存儲(chǔ)器ROM,本實(shí)驗(yàn)板沒(méi)有擴(kuò)展外部RAM,所以暫時(shí)不能做有關(guān)外部RAM存儲(chǔ)的實(shí)驗(yàn)。至于你使用AT89C51+編程器的話,資源就比較少了,只有128B(1字節(jié)=8位)RAM和4K大小的ROM,不過(guò)對(duì)于初學(xué)者,足夠使用了。
好的,對(duì)于你這樣一個(gè)一點(diǎn)成就感都沒(méi)有的初學(xué)者來(lái)說(shuō),激動(dòng)人心的時(shí)候就要到了:我們要把這個(gè)程序固化到單片機(jī)的ROM里了。連接好串口線,寫(xiě)入STATUS為00(切記!寫(xiě)一次就行了,頻繁擦寫(xiě)有可能導(dǎo)致向量丟失,那麻煩就大了),擦除,固化,復(fù)位——哈,程序運(yùn)行了嗎?8個(gè)LED發(fā)光管隔一個(gè)亮一個(gè)嗎?如果是的話,恭喜你啊!你已經(jīng)成為一名單片機(jī)的開(kāi)發(fā)人員啦!呵呵,雖然這個(gè)程序沒(méi)有什么實(shí)用價(jià)值,你也不明白語(yǔ)句的意義,但是它給你帶來(lái)了成就感和自信心,這才是作為初學(xué)者最最需要的,有了信心與興趣,一切都不再成為負(fù)擔(dān)和難題。
是不是開(kāi)始躍躍欲試了?好的,我們繼續(xù)講下去。
第四章:程序解釋與軟件仿真功能的介紹
現(xiàn)在我們回過(guò)頭來(lái)解釋這個(gè)程序。
ORG是一個(gè)偽指令。不懂?呵呵,正常,當(dāng)初我也不懂。偽指令就是一條沒(méi)有真正操作的指令,說(shuō)白了就是什么活也不干,耍耍嘴皮子而已。ORG是個(gè)定位偽指令,告訴系統(tǒng)程序從00地址開(kāi)始執(zhí)行,至于執(zhí)行什么,怎么執(zhí)行,它不管。就像一次掃雪任務(wù),一個(gè)領(lǐng)導(dǎo)來(lái)了,指著腳下說(shuō):從這里開(kāi)始掃。至于具體怎么掃,那是你的事情,呵呵。還有幾條偽指令,去看教材。
MOV P0 , #55H是這個(gè)程序的核心指令,工作全部都是它做的。參照教材,它的意思是將十六進(jìn)制數(shù)55輸出給寄存器P0,而P0口的狀態(tài)由8個(gè)LED顯示。我知道你會(huì)對(duì)這個(gè)十六進(jìn)制數(shù)字感到糊涂,因?yàn)槲覀冮L(zhǎng)了10手指頭。這里的55不是十進(jìn)制轉(zhuǎn)換來(lái)的,它實(shí)際是二進(jìn)制數(shù)字的一種壓縮寫(xiě)法,寫(xiě)成二進(jìn)制就是01010101,這樣P0口接的8個(gè)LED就會(huì)隔一個(gè)亮一個(gè)。55屁股后面的H表示它是十六進(jìn)制數(shù),如果去掉H就表示55是十進(jìn)制數(shù)了。十進(jìn)制數(shù)55轉(zhuǎn)換為十六進(jìn)制數(shù)是37,二進(jìn)制數(shù)是00110111,就不是01010101了,不信可以試試看,去掉55后面的H。為了明確輸出狀態(tài),你可以將55H寫(xiě)成01010101B,這個(gè)B表示是二進(jìn)制數(shù),顯示結(jié)果一樣,我寫(xiě)輸出一般都使用二進(jìn)制寫(xiě)法。你必須明白十進(jìn)制、二進(jìn)制、十六進(jìn)制之間的轉(zhuǎn)換方法,各種計(jì)算機(jī)書(shū)里都有的。以后你就不要用十進(jìn)制思考了,二進(jìn)制是一種重要思維方式,你務(wù)必熟悉。具體計(jì)算你不要?jiǎng)邮郑呛苌蹬丁狿C機(jī)的附件里不是有個(gè)很好的計(jì)算器嗎?可以非常方便的轉(zhuǎn)換多種數(shù)制,編程的時(shí)候同時(shí)打開(kāi)就行了。
現(xiàn)在來(lái)解釋那個(gè)很有趣味的軟件仿真,你不用燒寫(xiě)芯片就可以看到運(yùn)行結(jié)果,神奇吧!我當(dāng)初都不知道有這么好的軟件,為了改變一個(gè)簡(jiǎn)單的程序會(huì)白白燒片十幾次,簡(jiǎn)直是傻瓜。現(xiàn)在我使你避免成為傻瓜,你是不是應(yīng)該感謝我呢?呵呵。編譯成功后點(diǎn)擊DEBUG(調(diào)試或者叫除錯(cuò),因?yàn)锽UG是錯(cuò)誤的意思)選項(xiàng)里的STARTSTOP DEBUG SESSION,工具欄里也有這個(gè)快捷圖標(biāo)(有個(gè)帶紅色B字母的放大鏡)。點(diǎn)擊PERIPHERAL(外設(shè))選項(xiàng),選擇需要察看的部分,這里我們選擇P0口。點(diǎn)擊左上角文件下面的RET復(fù)位,然后點(diǎn)擊RET右面的帶下箭頭的小方塊來(lái)運(yùn)行程序,這時(shí)可以看到P0口狀態(tài)變?yōu)?1010101,表明運(yùn)行成功。想要退出運(yùn)行中的程序,點(diǎn)擊那個(gè)圓形的紅色叉。要回到編輯界面請(qǐng)?jiān)俅吸c(diǎn)擊DEBUG的快捷圖標(biāo)。
現(xiàn)在有個(gè)問(wèn)題,那個(gè)LOOP : SJMP LOOP是干嘛的?這是一個(gè)死循環(huán),指令反復(fù)跳轉(zhuǎn)到本身,相信你能夠看懂。你會(huì)覺(jué)得它沒(méi)有什么用,你感覺(jué)很對(duì),它的確沒(méi)有什么實(shí)際的作用。那么好,讓我們把它刪除——編譯照樣通過(guò),沒(méi)有任何錯(cuò)誤和警告,而且就算你現(xiàn)在把它燒寫(xiě)到芯片里,它也能正確運(yùn)行,那為什么還要加上?你不服?好,那我們進(jìn)入剛才的調(diào)試界面,運(yùn)行程序,不好!系統(tǒng)提示出錯(cuò)NO ‘EXECUTE/REDA’ PERMISSION !什么原因?問(wèn)題出來(lái)了吧?因?yàn)槟銊h除了這個(gè)循環(huán),程序就跑飛了!跑飛了是什么意思?比如你讓一只小狗在廣場(chǎng)上隨便跑,你怎么知道它會(huì)跑到哪里去?這就是跑飛,結(jié)果是你丟失了這條小狗,當(dāng)然你可以重新買(mǎi)一只,這就是復(fù)位了,哈哈。如果你讓一只小狗在院子里跑,它就不會(huì)丟失啦。循環(huán)的意義就在這里,讓程序掉到這個(gè)循環(huán)里,你和系統(tǒng)就能把它控制住。你還是不以為然嗎?這是一個(gè)簡(jiǎn)單程序,也許問(wèn)題不大,但是當(dāng)程序復(fù)雜之后,跑飛了是件很麻煩很可怕的事情,會(huì)出現(xiàn)莫名其妙的錯(cuò)誤,而且你也無(wú)法使用軟件仿真功能了。要是你還不服氣,那就嘗試每次編程都讓程序跑飛一次,如此之后你就有感覺(jué)了,我曾經(jīng)被這個(gè)簡(jiǎn)單問(wèn)題困擾了數(shù)周之多,現(xiàn)在我提示你,你要當(dāng)回事。
END也是個(gè)偽指令,是個(gè)編譯結(jié)束標(biāo)志,編譯器編譯到END的時(shí)候就結(jié)束編譯了,不再編譯END以下的程序。
這就是軟件仿真的基本過(guò)程,后面我還會(huì)介紹到仿真的其他功能。建議你每次編寫(xiě)程序以后都要先進(jìn)行軟件仿真,反復(fù)修改,反復(fù)調(diào)試,直到需要完成的功能完全仿真成功再將程序燒寫(xiě)到芯片,這樣能夠提高開(kāi)發(fā)效率,延長(zhǎng)單片機(jī)使用壽命。
第五章:關(guān)于編程器、仿真器與ISP
我建議你使用具有ISP功能的單片機(jī)完全是考慮到初學(xué)者的資金問(wèn)題,因?yàn)楹芏嗳艘宦?tīng)說(shuō)學(xué)習(xí)要花錢(qián)就會(huì)放棄學(xué)習(xí)。世界上沒(méi)有免費(fèi)的知識(shí),更沒(méi)有免費(fèi)的技能,投資是非常必要的,但是成本越低就越容易上手,所以我推薦具有ISP功能的單片機(jī),但這并非說(shuō)編程器與仿真器已經(jīng)沒(méi)用,這一點(diǎn)你們要明白。
首先說(shuō)說(shuō)編程器,它是干什么用的呢?程序編輯好后,并且通過(guò)編譯生成了HEX格式的二進(jìn)制燒寫(xiě)文件,就要用編程器把它燒寫(xiě)到單片機(jī)里面。我最初入門(mén)的時(shí)候就是使用AT89C51 +編程器的開(kāi)發(fā)模式,過(guò)了半年多才在發(fā)現(xiàn)具有ISP功能的單片機(jī),白花了那么多銀子。編程器本身很貴的,最好的上千,好一點(diǎn)的數(shù)百元,最便宜的簡(jiǎn)易型的也要上百元,是個(gè)不小的投資,很多人之所以對(duì)單片機(jī)望而卻步,正是在這個(gè)投資上出現(xiàn)了猶豫。另外編程器使用起來(lái)也比較麻煩,每一次編程都要把芯片從實(shí)驗(yàn)板上拔下來(lái),燒寫(xiě)好了再插回去,很容易弄壞插座和管腳,為此配置零插拔力插座的話,又要花一只單片機(jī)的錢(qián)了(十多元一只)。而且如果去現(xiàn)場(chǎng)工作的話,拎著個(gè)編程器多麻煩!設(shè)備復(fù)雜的話插拔芯片也很困難,一旦弄壞了管腳或者印刷板,設(shè)備就完蛋了。但是編程器在開(kāi)發(fā)產(chǎn)品中具有重要作用,因?yàn)楫a(chǎn)品的目標(biāo)板(相當(dāng)于完成指定功能的實(shí)驗(yàn)板)一般沒(méi)有空間額外加掛串口電平轉(zhuǎn)換部分的器件,所以要通過(guò)編程器編程。而且開(kāi)發(fā)產(chǎn)品如果使用一般的51芯片,成本也會(huì)大幅度下降。對(duì)于那些不用改動(dòng)程序的產(chǎn)品比較有利。當(dāng)然如果產(chǎn)量非常大的話,就選擇掩膜(就是把程序直接做到芯片里)生產(chǎn)了,編程器也不用了,成本非常低。
仿真器在高校教學(xué)、實(shí)驗(yàn)與復(fù)雜產(chǎn)品開(kāi)發(fā)中可以使用。使用編程器和ISP的開(kāi)發(fā)方法叫做“崩潰——燒寫(xiě)”模式,如果程序運(yùn)行結(jié)果錯(cuò)誤,只能改動(dòng)程序后擦除芯片重新燒寫(xiě),為了調(diào)試一個(gè)程序連續(xù)燒寫(xiě)芯片數(shù)十次是很正常的事情,但是這樣不但麻煩,還會(huì)縮短芯片使用壽命,而且無(wú)法觀察程序運(yùn)行中的狀態(tài)。仿真器正是針對(duì)這一問(wèn)題,它無(wú)需燒寫(xiě),通過(guò)它可以直接觀察運(yùn)行結(jié)果,而且可以單步運(yùn)行,能夠最直接的找到問(wèn)題所在,所以高級(jí)產(chǎn)品的開(kāi)發(fā)都要用到。不過(guò)初學(xué)者一般買(mǎi)不起仿真器,也沒(méi)必要買(mǎi),KEIL本身就有軟件仿真功能,可以大大減少燒寫(xiě)次數(shù)。只要不涉及到外部擴(kuò)展接口,在KEIL上仿真運(yùn)行成功的程序,絕大部分燒寫(xiě)以后都能正常運(yùn)行,下文將有說(shuō)明。
ISP的意思是在系統(tǒng)編程,但是我不喜歡這個(gè)說(shuō)法,剛?cè)腴T(mén)誰(shuí)能理解?我的解釋就是單片機(jī)本身自帶編程功能,就像把一臺(tái)編程器集成到單片機(jī)上,這就很容易理解了。它本身有一個(gè)出廠時(shí)候就固化好的編程程序,放在BOOT ROM里,不可修改。這個(gè)BOOT ROM不占用系統(tǒng)本身的ROM空間,具體放在哪里我們不必關(guān)心,VECTOR(向量)設(shè)置為FC(針對(duì)P89C51RD2系列)就是BOOT ROM的入口的地址,不得改動(dòng)。順便解釋一下,BOOT不是靴子的意思哦,是啟動(dòng)的意思。向量的意思我理解就是一個(gè)地址,線性代數(shù)中不是有N維向量的概念嗎?其實(shí)就是一串?dāng)?shù)字,你記住是地址就行了,不要去想什么向量。對(duì)于P89C51RD2來(lái)說(shuō),PSEN腳(29腳)接地(低電平)是進(jìn)入ISP功能的硬件激活條件,所以編程的時(shí)候要按下選擇開(kāi)關(guān)到編程端。編程結(jié)束后使PSEN腳恢復(fù)高電平,復(fù)位之后即可啟動(dòng)程序,但是此時(shí)STATUS(狀態(tài)字)必須為00,它的意思就是程序從00地址開(kāi)始啟動(dòng),因?yàn)榫幊滩僮魇前殉绦驘龑?xiě)到00地址開(kāi)始的空間里,如果不從00啟動(dòng),程序就發(fā)生錯(cuò)誤了。有關(guān)ISP的詳細(xì)資料可以從網(wǎng)上下載。不懂什么叫高低電平?不準(zhǔn)確的說(shuō),低電平就是0V,高電平就是電源電壓5V,低電平相當(dāng)于邏輯里的0,高電平相當(dāng)于邏輯里的1,數(shù)字電路教材里一定有描述,我就不說(shuō)了。
我覺(jué)得開(kāi)發(fā)器材的選擇是這樣的:當(dāng)你是初學(xué)者的時(shí)候,用一塊具有ISP功能的單片機(jī)學(xué)習(xí)足夠;當(dāng)你能夠獨(dú)立設(shè)計(jì)目標(biāo)板進(jìn)行小產(chǎn)品開(kāi)發(fā)時(shí),可以考慮購(gòu)置編程器;當(dāng)你成為專(zhuān)業(yè)單片機(jī)技術(shù)人員乃至嵌入式系統(tǒng)工程師的時(shí)候,仿真器對(duì)于高級(jí)產(chǎn)品的開(kāi)發(fā)是必須的了。