第六章:51單片機(jī)實(shí)驗(yàn)板原理與功能簡(jiǎn)介
現(xiàn)在市面上單片機(jī)實(shí)驗(yàn)板種類繁多,有的非常簡(jiǎn)陋,有的相對(duì)高級(jí),價(jià)格與外圍器件擴(kuò)展的程度正相關(guān)。我設(shè)計(jì)的這一款實(shí)驗(yàn)板個(gè)人認(rèn)為不算簡(jiǎn)陋但也稱不上高級(jí),和網(wǎng)上的各種普及型實(shí)驗(yàn)板都差不多,市售價(jià)格在100元左右,非常適合初學(xué)者使用。能夠把這款實(shí)驗(yàn)板的所有功能都開(kāi)發(fā)出來(lái)的話,你的單片機(jī)開(kāi)發(fā)水平就相當(dāng)可以了。由于電路原理非常簡(jiǎn)單,電路原理圖與PCB圖我將免費(fèi)公布,以利于廣大初學(xué)者自制,需要者請(qǐng)聯(lián)系向我索要。你也可以參考我板子的硬件結(jié)構(gòu),根據(jù)自己的要求自行設(shè)計(jì)。
請(qǐng)參照你手里的51教材中列出的單片機(jī)管腳,我將詳細(xì)說(shuō)明本實(shí)驗(yàn)板的硬件結(jié)構(gòu)。
1、P0口通過(guò)74LS244(單方向8位總線驅(qū)動(dòng)器)驅(qū)動(dòng)8位LED發(fā)光二極管?梢詫(shí)現(xiàn)廣告燈、跑馬燈、交通燈等相關(guān)實(shí)驗(yàn)。
2、P0同時(shí)通過(guò)74LS244驅(qū)動(dòng)4位LED數(shù)碼管的段選,與8位LED切換通過(guò)一只開(kāi)關(guān)完成。位選由P2口前4位通過(guò)4只NPN三極管驅(qū)動(dòng)完成?梢詫(shí)現(xiàn)時(shí)間顯示、秒表與計(jì)數(shù)顯示等與數(shù)碼管有關(guān)的實(shí)驗(yàn)。
3、P1.5通過(guò)一只PNP三極管驅(qū)動(dòng)一只自震蕩的蜂鳴器。自震
蕩的意思是加上一定直流電壓,蜂鳴器即可發(fā)出一定頻率的聲音。如果想改變頻率,可以使用PWM(脈寬調(diào)制,就是改變脈沖占空比)方式通過(guò)音頻調(diào)制驅(qū)動(dòng)。如果想實(shí)現(xiàn)音樂(lè)編程,更換為一般的蜂鳴器(就是音樂(lè)賀卡里的壓電片)即可。可以完成與音樂(lè)發(fā)生有關(guān)的實(shí)驗(yàn),也可作為報(bào)警信號(hào)輸出。
4、P1.6與P1.7腳連接IIC器件,板載一只8腳DIP插座,可選AT24C02,它是一只256B的EEPROM(電可擦寫存儲(chǔ)器)。可以實(shí)現(xiàn)電子密碼鎖等需要保存數(shù)據(jù)的實(shí)驗(yàn),通過(guò)實(shí)驗(yàn)也可以對(duì)IIC技術(shù)有個(gè)基本的了解與掌握。
5、P3.2——P3.5是51的4個(gè)中斷的外部輸入端,這四個(gè)管腳連接4只按鍵開(kāi)關(guān)到地,按下按鍵將該管腳接地。選擇P3工作于第一功能,則按鍵開(kāi)關(guān)工作于查詢方式。如果選擇第二功能,就工作于中斷方式?梢酝瓿砂存I和中斷的相關(guān)實(shí)驗(yàn)。此處解釋一下查詢與中斷,如果你在睡午覺(jué),為了防止遲到,你每隔5分鐘就睜眼看一下鬧鐘(假設(shè)你能夠準(zhǔn)時(shí)醒來(lái)),這就是查詢方式,使用鬧鐘叫你就是中斷方式了。它們的區(qū)別很顯然,選擇查詢方式CPU就不能干別的工作了(就像你無(wú)法連續(xù)的睡覺(jué)),選擇中斷的話CPU可以去做其他工作,直到中斷來(lái)臨,CPU再去做中斷要求的工作。
6、P3.0與P3.1是單片機(jī)的串口接收與發(fā)送數(shù)據(jù)線,它們通過(guò)MAX232轉(zhuǎn)換為RS-232(一種串口通訊協(xié)議)標(biāo)準(zhǔn)電平,以便與PC機(jī)的串口通訊。因?yàn)?1單片機(jī)與PC機(jī)的串口電平標(biāo)準(zhǔn)不同,所以用MAX232進(jìn)行一個(gè)電平轉(zhuǎn)換工作,僅此而已,你不需要準(zhǔn)確的知道RS-232的協(xié)議標(biāo)準(zhǔn)。這就如同英制與公制的轉(zhuǎn)換,對(duì)于你來(lái)說(shuō)1M的長(zhǎng)度對(duì)一個(gè)英國(guó)人來(lái)說(shuō)就是3.28英尺。這個(gè)串口可以實(shí)現(xiàn)單片機(jī)與PC或者其他具備RS-232接口的單片機(jī)的通訊實(shí)驗(yàn),更為重要的是,ISP編程就是通過(guò)這個(gè)串口將程序從PC機(jī)下載到單片機(jī)的ROM里面的。對(duì)于具有ISP功能的單片機(jī),必須有這個(gè)電平轉(zhuǎn)換部分(最小系統(tǒng)組成部分之一),否則無(wú)法進(jìn)行編程。
7、其他沒(méi)有使用的管腳可以作為系統(tǒng)擴(kuò)展使用。P0口外接上拉電阻。同時(shí)引出全部IO口線、ALE口線以及5V電源線和地線,便于擴(kuò)展。晶振使用12M,選擇12個(gè)時(shí)鐘周期方式,機(jī)器周期為1US,選擇6個(gè)時(shí)鐘周期方式,機(jī)器周期為0.5US,這是飛利浦單片機(jī)的特殊功能。在ZLGISP軟件編程時(shí),點(diǎn)擊設(shè)置,在6CLOCK前打勾即可選擇6個(gè)時(shí)鐘周期方式。這個(gè)方式比12個(gè)時(shí)鐘周期方式速度提高不少,但是對(duì)于精確延時(shí)程序?qū)⒂杏绊,而且大?1教材都是針對(duì)12個(gè)時(shí)鐘周期所寫,所以不推薦初學(xué)者使用。
8、單片機(jī)非常害怕電源極性顛倒,所以電源插口后邊安裝了一只全橋作為“防呆開(kāi)關(guān)”(原理簡(jiǎn)單而巧妙,請(qǐng)自行研究),無(wú)論電源極性如何都可以直接輸入,但是輸入電壓不得低于8.5V,也不可太高,否則穩(wěn)壓塊LM7805功耗過(guò)大容易發(fā)熱。可以使用市售收音機(jī)直流電源,推薦使用9V。至于復(fù)位開(kāi)關(guān),編程選擇開(kāi)關(guān),電源穩(wěn)壓部分就不再贅述了。
以上簡(jiǎn)介了實(shí)驗(yàn)板的硬件結(jié)構(gòu),實(shí)驗(yàn)請(qǐng)參見(jiàn)下文設(shè)計(jì)。
第七章:51單片機(jī)常見(jiàn)問(wèn)題解答
關(guān)于51單片機(jī)的硬件,你手里任何一本教材都寫得很清楚,我沒(méi)有必要重新COPY一份,但是我很少看到能夠不費(fèi)力氣就看得懂的51教材。對(duì)于初學(xué)者來(lái)說(shuō),一堆術(shù)語(yǔ)加上一堆嚴(yán)密得讓人頭痛的邏輯推導(dǎo)不啻為一種災(zāi)難,有時(shí)候明明很簡(jiǎn)單的原理非要被描述得艱澀異常?茖W(xué)的精神在于把復(fù)雜的東西表述得簡(jiǎn)單,但是我們很多教材編寫者卻反其道而行之,完全違背了真正的科學(xué)精神,實(shí)在是面目可憎,行而不遠(yuǎn)。這也是我花費(fèi)時(shí)間撰寫本教材的原因之一。下面就針對(duì)幾個(gè)被教材解釋得一塌糊涂的常見(jiàn)問(wèn)題做一下通俗的解釋。
1、處理能力的概念。51單片機(jī)屬于8位機(jī),8位是個(gè)什么意思呢?就是CPU處理的數(shù)據(jù)是8位的。位數(shù)的高低體現(xiàn)了CPU處理能力的強(qiáng)弱。4位的處理器已經(jīng)基本淘汰了,8位的處理器占據(jù)了低端單片機(jī)的大部分市場(chǎng),32位處理器是現(xiàn)在興起的嵌入式系統(tǒng)的主流配置,我們常用的電腦大多都是32位,64位的處理器也有,但是市場(chǎng)份額比較少,價(jià)格也較高。所以我們學(xué)習(xí)的51單片機(jī)屬于比較低級(jí)的單片機(jī),會(huì)逐漸被新興的嵌入式處理器所淘汰,但是51單片機(jī)成本低,學(xué)習(xí)資源最豐富,上手容易,對(duì)于初學(xué)者來(lái)說(shuō)是很理想的用于學(xué)習(xí)的單片機(jī)。
2、存儲(chǔ)器問(wèn)題。51單片機(jī)有兩類存儲(chǔ)器,一類是程序存儲(chǔ)器ROM,它斷電以后數(shù)據(jù)不丟失,但是必須用編程器擦除和寫入程序;另一類是數(shù)據(jù)存儲(chǔ)器RAM,它斷電以后數(shù)據(jù)會(huì)丟失,但是可以用程序改寫內(nèi)容。以AT89C51為例,因?yàn)樗?6條地址線(P0和P2),所以它可以訪問(wèn)64K存儲(chǔ)器空間(2的16次方是65535),它的ROM和RAM都是分內(nèi)外的,外部存儲(chǔ)器都需要擴(kuò)展,擴(kuò)展方法參見(jiàn)教材。但是ROM和RAM的內(nèi)外執(zhí)行方式不同,ROM的內(nèi)外切換要用EA腳(31腳)的電平選擇,而RAM的切換可以直接用不同指令MOV和MOVX分開(kāi)同時(shí)訪問(wèn)。例如AT89C51有4K內(nèi)部ROM,64K外部ROM,如果EA=1,則從內(nèi)部ROM開(kāi)始執(zhí)行,當(dāng)超出4K之后,跳轉(zhuǎn)到片外4K以上的空間運(yùn)行;如果EA=0,則完全在外部ROM中運(yùn)行,內(nèi)部ROM不再起作用。什么意思呢?就是要么運(yùn)行內(nèi)部4KROM要么運(yùn)行外部4KROM,內(nèi)外ROM的前4K不能同時(shí)運(yùn)行,必須用EA切換。所以一般在沒(méi)有外部ROM的情況下,EA必須接電源正極,否則程序不能運(yùn)行。我曾經(jīng)因?yàn)镋A懸空造成程序無(wú)法運(yùn)行,苦苦思索一周才找到原因,期間因?yàn)槊つ繙y(cè)試導(dǎo)致3塊AT89C51損壞,教訓(xùn)十分慘痛,望后來(lái)者吸取教訓(xùn)。RAM就不同了,AT89C51有128B內(nèi)部RAM,可以擴(kuò)展64K外部RAM,這兩個(gè)部分的RAM可以同時(shí)被訪問(wèn),注意選擇不同指令即可,訪問(wèn)內(nèi)部用MOV,訪問(wèn)外部用MOVX,外部RAM擴(kuò)展方法參見(jiàn)教材。ROM的種類除了常見(jiàn)的PROM(可編程ROM),還有MASK ROM、FLASH ROM 和EEPROM等種類。MASK ROM是掩模存儲(chǔ)器,掩模的意思就是工廠把程序直接做在芯片上了,適于不需要反復(fù)修改的大批量產(chǎn)品生產(chǎn),成本非常低,但是用戶不能更改程序,8051里就是這種ROM。我最初接觸單片機(jī)的時(shí)候,去電子市場(chǎng)買8051,結(jié)果商家真的賣給我了一塊,回家一看,里面全都是程序,根本無(wú)法修改,現(xiàn)在回想起來(lái),自己簡(jiǎn)直是個(gè)傻瓜,哪有買掩模ROM的單片機(jī)做學(xué)習(xí)和開(kāi)發(fā)的?!商家也不告訴我已經(jīng)燒好的程序可以干什么,害的我只能拿它當(dāng)8031使了!這個(gè)教訓(xùn)真是好笑,希望大家一定要搞明白R(shí)OM的種類區(qū)分。PROM有OTP(一次性編程)和允許反復(fù)擦寫(用紫外線照射擦除)兩種,87C51系列就是OTP的ROM;就現(xiàn)在的形勢(shì)看,ROM有普及FLASH之勢(shì),那些用紫外線擦除的垃圾看來(lái)是要被淘汰了。FLASH ROM可以電擦寫,但必須整塊擦除,寫入速度快,擦寫次數(shù)在1000到10萬(wàn)次之間(視不同類型芯片而定),事實(shí)上89C51系列的ROM就是FLASH ROM,U盤內(nèi)的ROM也是,一種NAND FLASH現(xiàn)在廣泛用于嵌入式系統(tǒng)中,它的存儲(chǔ)容量大,成本低,可以實(shí)現(xiàn)固態(tài)硬盤的功能;EEPROM是電可擦寫存儲(chǔ)器,它是按位擦寫的,可以擦寫10萬(wàn)次以上,但擦寫速度較FLASH ROM要慢,AT24C02就是EEPROM,我們用的很多智能IC卡也是。RAM的種類有靜態(tài)SRAM,動(dòng)態(tài)DRAM和SDRAM之分。SRAM只要寫入一次,有電數(shù)據(jù)就可以保持,單片機(jī)里就是SRAM,但是它的缺點(diǎn)就是太貴,所以單片機(jī)里的RAM都很小。DRAM一次寫入數(shù)據(jù)之后只能保持一瞬間,必須不斷重寫,叫做刷新,這個(gè)過(guò)程還需要相應(yīng)的邏輯電路支持,很麻煩但是很便宜。SDRAM叫做具有靜態(tài)特性的動(dòng)態(tài)RAM,它把邏輯刷新電路和DRAM做到了一起,它的工作方式本質(zhì)是動(dòng)態(tài)的,但是從外部看相當(dāng)于一個(gè)SRAM,這樣就不但具有靜態(tài)特性而且價(jià)格便宜,我們電腦里的內(nèi)存條都是SDRAM。我自己的理解是這樣的,就像爬山比賽,能力強(qiáng)的人呢,爬上去就不會(huì)滑下來(lái)。但是能力不行的人站不住,只好滑下來(lái)再爬上去,反復(fù)這樣,頻率高了給人的感覺(jué)就好像他在山上一樣。呵呵,反正能力強(qiáng)的東西總是更貴一些的。
3、IO口問(wèn)題。P0口是集電極開(kāi)路,所以我的實(shí)驗(yàn)板上給它加了上拉電阻。上拉電阻的作用就是在基本沒(méi)有電流輸出的情況下將管腳電位拉到5V,這樣對(duì)于外部來(lái)說(shuō)是邏輯1,如果沒(méi)有這個(gè)電阻,管腳電位就是0。為什么?假如三極管關(guān)閉的情況下C-E間電阻為100M,如果上拉電阻為10K,則分壓的結(jié)果是幾乎接近5V,這就是上拉的原理。IO口的驅(qū)動(dòng)能力有限,AT89C51也就不到20MA(8051連這些都沒(méi)有),可以直接驅(qū)動(dòng)LED(電流流入方式),但是驅(qū)動(dòng)別的大電流外部設(shè)備必須加驅(qū)動(dòng)電路,否則會(huì)燒毀IO口,務(wù)必注意。迄今為止,我一共燒毀了7塊AT89C51,損失了一把銀子之后我終于找到了原因:一個(gè)是電源問(wèn)題,電源電壓超過(guò)5V或者極性顛倒都會(huì)導(dǎo)致芯片燒毀;另一個(gè)問(wèn)題就是我在單片機(jī)供電的情況下測(cè)量P0.0腳(39腳)電位時(shí)表筆不小心連通了電源正極(40腳),而此時(shí)剛好P0.0內(nèi)部MOS管開(kāi)通(也就是輸出0),結(jié)果直接燒毀了輸出MOS管。因?yàn)镻0口是數(shù)據(jù)線,結(jié)果導(dǎo)致編程時(shí)數(shù)據(jù)無(wú)法寫入。這個(gè)教訓(xùn)最慘痛了,務(wù)必牢記。單片機(jī)的一種絕對(duì)保密技術(shù)就是利用了這種方法,編程之后燒毀一只閑置的數(shù)據(jù)或地址管腳的輸出管,造成數(shù)據(jù)無(wú)法讀出,達(dá)到絕對(duì)保密的目的。還有一點(diǎn)需要注意,如果要讀入管腳的狀態(tài),必須先向該管腳寫1,然后再讀該管腳方能得到正確輸入。使用P3的第二功能之前,也要先向P3口寫1,目的都是讓IO口輸出管關(guān)閉。IO口詳細(xì)構(gòu)造請(qǐng)閱讀51教材相關(guān)部分。
4、有關(guān)尋址方式。相關(guān)教材中的尋址部分純粹是找別扭,我都可以用51開(kāi)發(fā)產(chǎn)品了,可是我現(xiàn)在重讀這部分教材依然一頭霧水,無(wú)法理解。不理解很好,說(shuō)明你大腦正常,不用去管教材所說(shuō)的尋址方式到底是什么意思,你學(xué)會(huì)如何使用就行了。其實(shí)就是對(duì)數(shù)字操作(所謂立即尋址)、對(duì)寄存器操作(所謂寄存器尋址)、對(duì)地址操作(所謂直接尋址)、對(duì)指針操作(有專用指針也有寄存器作為指針)和對(duì)位操作5種情況。尋址方式就是告訴你一個(gè)操作什么東西的問(wèn)題,沒(méi)有什么高深的。如果還是不明白就不要看這部分內(nèi)容了,直接學(xué)習(xí)指令進(jìn)行編程,當(dāng)你編程很熟練之后,你會(huì)發(fā)現(xiàn),其實(shí)它那些怪里怪氣的尋址方式命名是很可笑的。
5、對(duì)中斷概念的理解。我最開(kāi)始看了一個(gè)使用中斷的程序之后,想了好幾個(gè)晚上也沒(méi)有理解什么叫中斷。這個(gè)程序的注釋竟然說(shuō)中斷服務(wù)程序是這個(gè)程序的核心部分,我當(dāng)時(shí)就茫然了——那主函數(shù)是什么?垃圾嗎?在我的認(rèn)識(shí)里,主函數(shù)才應(yīng)該是一個(gè)程序的核心。忘了過(guò)了多少日子,我終于明白了中斷的含義。假如你設(shè)置一只鬧鐘6點(diǎn)叫你,如果你6點(diǎn)準(zhǔn)時(shí)爬起來(lái)看鬧鐘是不是叫你的話,那就不叫鬧鐘了,你成了鬧鐘的鬧鐘了。初學(xué)者很容易不明白為什么主函數(shù)里并沒(méi)有跳轉(zhuǎn)到中斷服務(wù)函數(shù)的指令,怎么中斷服務(wù)程序就自己自動(dòng)執(zhí)行了呢?沒(méi)錯(cuò),中斷不需要什么指令來(lái)啟動(dòng),它會(huì)自己?jiǎn)?dòng),就像定時(shí)炸彈到點(diǎn)就會(huì)自動(dòng)爆炸一樣。什么時(shí)候啟動(dòng)由定時(shí)器、計(jì)數(shù)器或者外部中斷決定,這是一個(gè)前臺(tái)運(yùn)行過(guò)程(誰(shuí)表演誰(shuí)就是前臺(tái)嘛),你在后臺(tái)看不到,后臺(tái)是個(gè)設(shè)置中斷的過(guò)程,決定什么情況下中斷會(huì)叫你。比如你在車站等你女朋友,你無(wú)法準(zhǔn)確知道她什么時(shí)候來(lái),所以后臺(tái)函數(shù)是個(gè)循環(huán)——你來(lái)回踱步,焦急的等待。當(dāng)你女朋友出現(xiàn)的時(shí)候,她要求你停止踱步,和她去商店買衣服——這是中斷服務(wù)函數(shù)。如果你女朋友還沒(méi)來(lái),你就自己跑到商店里了,那就不叫中斷了。如果她來(lái)了你還在踱步——很不幸,系統(tǒng)不是跑飛就是崩潰了,呵呵。有關(guān)中斷的具體操作與設(shè)置方法,請(qǐng)仔細(xì)閱讀51教材相關(guān)部分。中斷是單片機(jī)一個(gè)的難點(diǎn),也是一個(gè)有特色之處,沒(méi)有中斷的話單片機(jī)就失去了全部的靈活性與實(shí)時(shí)性,變成一塊用于順序控制的數(shù)字電路了。
6、編程語(yǔ)言問(wèn)題。你可以用匯編編程,也可以用C51語(yǔ)言編程。它們各有各的強(qiáng)項(xiàng)和弱點(diǎn),選擇哪種語(yǔ)言要根據(jù)你的基礎(chǔ)和具體任務(wù)確定。有個(gè)老兄這樣說(shuō):匯編挺好啊,不過(guò)你用著用著就想用C51了;C51嘛,也挺好啊,不過(guò)你用著用著就想用匯編了。呵呵,真的是這樣。我個(gè)人的理解是:匯編好寫不好看,C語(yǔ)言好看不好寫。去看別人一段沒(méi)有注釋的匯編語(yǔ)言是一件很困難的事情,看不懂并不說(shuō)明你編程水平差。這種情況下先不要看別人的例程,根據(jù)你自己的思路編寫即可,到了關(guān)鍵部分或是遇到障礙再看看例程,效果很好。別人寫的C語(yǔ)言比較好理解,因?yàn)镃語(yǔ)言本質(zhì)上就是各種各樣的函數(shù)調(diào)來(lái)調(diào)去的過(guò)程,看懂了函數(shù),程序基本就明白了。下面說(shuō)說(shuō)匯編和C各自的特點(diǎn):匯編是個(gè)事必躬親的戰(zhàn)術(shù)語(yǔ)言,要干什么就直接干什么,什么事情都要直接操作硬件,所以累啊——系統(tǒng)倒不累,你累啊,呵呵,累死你換來(lái)的好處就是代碼比較小,而且工作準(zhǔn)確,操作決不會(huì)馬馬虎虎。C語(yǔ)言就不同了,是個(gè)戰(zhàn)略語(yǔ)言,只抓大局,一堆基層工作全給INCLUDE了,夠狠,要干什么不好好干,非要拐彎抹角——比如重新運(yùn)行不讓用跳轉(zhuǎn)(封殺GOTO語(yǔ)句),非要設(shè)計(jì)一個(gè)巧妙的循環(huán),匯編就沒(méi)這么不老實(shí)。這次你不累了,但是如果智商不夠就慘了,一句都寫不下去,不像匯編——就算我笨,能編多少時(shí)多少,編一點(diǎn)是一點(diǎn)。當(dāng)甩手掌柜自然不錯(cuò),但是缺點(diǎn)也很明顯:一來(lái)代碼要大不少,系統(tǒng)資源一下就被搞緊張了;二來(lái)涉及到對(duì)硬件的具體操作就它就沒(méi)招了,還得求人家匯編,呵呵。所以匯編和C你都要掌握,大局由C定,幾處需要準(zhǔn)確處理硬件的工作交給匯編,屬于瞎子背瘸子的組合,呵呵。兩手抓,兩手都要硬,互相滲透,結(jié)合使用,這就是學(xué)習(xí)單片機(jī)語(yǔ)言的基本原則。說(shuō)了一頓,和具體編程一點(diǎn)關(guān)系都沒(méi)有,但是原則你要把握。匯編語(yǔ)言我就不說(shuō)了,教材都會(huì)詳細(xì)說(shuō)明指令的意義和使用方法,下面我說(shuō)一下C51。C語(yǔ)言的具體結(jié)構(gòu)和編寫方法你明白了嗎?沒(méi)明白趕緊看書。C51與通用C語(yǔ)言的區(qū)別我理解主要有兩點(diǎn):一是中斷函數(shù)的聲明與使用,二是如何在單片機(jī)里進(jìn)行位操作,我的理解就這一點(diǎn)點(diǎn),當(dāng)然這與我水平比較菜有很大關(guān)系。那么C語(yǔ)言如何能夠認(rèn)識(shí)那些單片機(jī)的寄存器呢?難道每寫一個(gè)程序都先要鋪天蓋地的定義一番?!這個(gè)我們不怕也不用管,KEIL里有自帶的包含文件來(lái)解決這個(gè)問(wèn)題。你在KEIL里寫C51程序的話,上來(lái)先寫一個(gè)#INCLUDE<AT89C51.H>,這一堆問(wèn)題就解決了,下面你可以直接寫P0=0X00,或者SCON=0X00之類,反正C語(yǔ)言可以認(rèn)識(shí),還能正確編譯,怎么樣?戰(zhàn)略語(yǔ)言確實(shí)不得了,臟活全讓<AT89C51.H>這個(gè)文件做了。當(dāng)然想舒服就得付出資源的代價(jià),C代碼肯定比匯編大,不信你編寫一個(gè)同樣的匯編程序試試看。想學(xué)習(xí)C51的話,可以找一本教材,但是如果你基本明白C了,買教材就有點(diǎn)浪費(fèi)了,因?yàn)榇蠖鄶?shù)C51教材都花上很大篇幅講C的規(guī)則,什么數(shù)據(jù)類型,什么控制語(yǔ)句,簡(jiǎn)直是浪費(fèi)白紙,所以你借一本教材看看C51和通用C不同的地方就可以了,買一本實(shí)在不值得。借不到也可以到網(wǎng)絡(luò)上搜索一下,有更通俗的教材,這里推薦明浩寫的那個(gè)基于KEIL軟件的C51教材,雖然只有幾課內(nèi)容,很簡(jiǎn)單,但是非常容易理解,也很實(shí)用,同時(shí)還說(shuō)明了KEIL的使用方法。
常見(jiàn)問(wèn)題就談這么多,都是一些概括性的介紹,具體問(wèn)題你要自己去解決。
第八章:實(shí)驗(yàn)設(shè)計(jì)
你一定很著急知道學(xué)習(xí)多長(zhǎng)時(shí)間才具有開(kāi)發(fā)產(chǎn)品的能力,這個(gè)過(guò)程很快,一般連續(xù)學(xué)習(xí)半年以上(注意不是三天打魚兩天曬網(wǎng))即可開(kāi)發(fā)簡(jiǎn)單的產(chǎn)品。你必須嚴(yán)格進(jìn)行一系列實(shí)驗(yàn),通過(guò)實(shí)現(xiàn)單片機(jī)的所有功能達(dá)到提高開(kāi)發(fā)能力的目的。下面列出我自己認(rèn)為需要完成的實(shí)驗(yàn)的名稱以及實(shí)驗(yàn)項(xiàng)目的說(shuō)明。
實(shí)驗(yàn)1:跑馬燈左右循環(huán)移動(dòng)的應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、學(xué)習(xí)IO口的控制技巧,掌握各種數(shù)制的轉(zhuǎn)換方法。
2、第一次用取機(jī)器周期倍數(shù)的延時(shí)方法實(shí)現(xiàn)移動(dòng)速度的設(shè)定。
3、第二次使用定時(shí)器中斷的方法實(shí)現(xiàn)移動(dòng)速度的設(shè)定。
4、第三次使用DPTR取表的方式實(shí)現(xiàn)移動(dòng)順序的設(shè)定。
實(shí)驗(yàn)2:中斷的應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、第一次用多種模式實(shí)現(xiàn)兩個(gè)定時(shí)器中斷的功能,可以用LED閃爍顯示,也可以讓蜂鳴器發(fā)聲。
2、第二次設(shè)定四個(gè)中斷同時(shí)存在,兩個(gè)外部中斷,兩個(gè)計(jì)數(shù)器中斷,由四個(gè)按鍵作為外部輸入。四個(gè)按鍵設(shè)定兩個(gè)優(yōu)先級(jí),完成五種任務(wù)(包括后臺(tái)的任務(wù)和四個(gè)中斷服務(wù)程序的任務(wù))。
實(shí)驗(yàn)3:布爾代數(shù)(一位機(jī))應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
類似可編程邏輯控制器的使用,選擇多個(gè)復(fù)雜的邏輯關(guān)系,使用指令中的邏輯語(yǔ)句完成相關(guān)的邏輯功能,使單片機(jī)成為一塊可以完成復(fù)雜邏輯的數(shù)字電路。這個(gè)實(shí)驗(yàn)主要用于工業(yè)配線以及順序生產(chǎn)過(guò)程。
實(shí)驗(yàn)4:串口應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、UART通過(guò)74LS164和74LS166實(shí)現(xiàn)串行擴(kuò)展IO口輸入輸出功能。
2、兩個(gè)單片機(jī)做全雙工通訊實(shí)驗(yàn)。
3、單片機(jī)與PC機(jī)之間進(jìn)行全雙工通訊實(shí)驗(yàn)。
4、一個(gè)單片機(jī)與兩個(gè)以上單片機(jī)做全雙工主機(jī)從機(jī)通訊實(shí)驗(yàn)。
實(shí)驗(yàn)5:?jiǎn)纹瑱C(jī)音樂(lè)編程應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、該實(shí)驗(yàn)可以用延時(shí)的方法也可以用定時(shí)器中斷的方法實(shí)現(xiàn),主要學(xué)習(xí)了如何通過(guò)對(duì)頻率和節(jié)拍編碼表的讀取進(jìn)行音樂(lè)編程。
2、在此基礎(chǔ)上,可以學(xué)習(xí)如何使用單片機(jī)產(chǎn)生雙音頻撥號(hào)音,完成單片機(jī)自動(dòng)撥號(hào)實(shí)驗(yàn)。
實(shí)驗(yàn)6:直流電機(jī)與步進(jìn)電機(jī)控制應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、了解直流電機(jī)驅(qū)動(dòng)部分硬件原理。掌握單片機(jī)控制直流電機(jī)正反轉(zhuǎn)的方法,能夠使用PWM(脈寬調(diào)制)方式改變直流電機(jī)轉(zhuǎn)速。
2、了解步進(jìn)電機(jī)驅(qū)動(dòng)部分硬件原理。掌握用脈沖分配的方法驅(qū)動(dòng)步進(jìn)電機(jī)正反轉(zhuǎn),并且可以通過(guò)改變脈沖分配頻率來(lái)改變步進(jìn)電機(jī)轉(zhuǎn)速。
實(shí)驗(yàn)7:鍵盤與顯示器應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、獨(dú)立按鍵識(shí)別操作方法,BCD碼轉(zhuǎn)盤的使用方法。
2、掃描式按鍵操作方法(結(jié)合中斷操作)。
3、串口擴(kuò)展IO口的鍵盤操作方法。
4、靜態(tài)LED顯示操作方法。
5、動(dòng)態(tài)掃描LED顯示操作方法。
6、結(jié)合時(shí)鐘芯片(需要擴(kuò)展),設(shè)計(jì)一個(gè)電子表。
7、結(jié)合4*4鍵盤,設(shè)計(jì)一個(gè)計(jì)算器。
8、結(jié)合EEPROM,設(shè)計(jì)一個(gè)防掉電電子密碼鎖。
9、結(jié)合步進(jìn)電機(jī),設(shè)計(jì)一個(gè)可設(shè)定和顯示速度的步進(jìn)電機(jī)控制板。
實(shí)驗(yàn)8:其他顯示器件應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、點(diǎn)矩陣LED顯示器應(yīng)用。使用4塊8*8矩陣LED作為大屏幕,滾動(dòng)顯示中文字幕。
2、使用LCD顯示字符與圖形,掌握LCD驅(qū)動(dòng)方法。
實(shí)驗(yàn)9:AD/DA轉(zhuǎn)換應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、使用ADC0809和一種溫度探頭,結(jié)合LED顯示制作一只數(shù)字溫度計(jì)。如果溫度探頭成本過(guò)高,可以制作一只數(shù)字電壓表。
2、使用雙積分型A/D轉(zhuǎn)換電路ICL7135制作數(shù)字電壓表。
3、使用DAC0832制作一個(gè)多種波形的數(shù)控信號(hào)發(fā)生器。
4、使用ADC0809和DAC0832,外擴(kuò)RAM(可使用32K的62256)制作簡(jiǎn)易數(shù)字錄音機(jī)(錄音時(shí)間為數(shù)秒鐘)。
實(shí)驗(yàn)10:外部傳感器輸入與數(shù)據(jù)采集應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、利用光敏三極管采集光電信號(hào)。
2、利用紅外線對(duì)管構(gòu)成主動(dòng)式紅外線光電信號(hào)采集。
3、利用熱釋電紅外線傳感器,結(jié)合驅(qū)動(dòng)電路,構(gòu)成被動(dòng)式紅外線光電信號(hào)采集。
4、利用駐極體話筒或壓電陶瓷片,結(jié)合音頻鎖相環(huán)技術(shù)(LM567),制作超聲波距離探測(cè)器,使用LED顯示距離。
5、利用霍爾元件,制作伺服電機(jī)轉(zhuǎn)速控制器,由鍵盤設(shè)定轉(zhuǎn)速,LED顯示。
6、利用壓力傳感器制作電子秤,鍵盤輸入,LED顯示。
實(shí)驗(yàn)11:?jiǎn)纹瑱C(jī)外圍擴(kuò)展IC應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、8155原理與應(yīng)用。
2、8255原理與應(yīng)用。
3、8279原理與應(yīng)用。
4、利用時(shí)鐘芯片DS12887制作智能電子表。
5、利用ISD1420或者APR9600制作公共汽車報(bào)站器、漢語(yǔ)報(bào)時(shí)鐘或會(huì)說(shuō)話的萬(wàn)用表。
實(shí)驗(yàn)12:IIC技術(shù)應(yīng)用
實(shí)驗(yàn)項(xiàng)目:
1、電可擦寫存儲(chǔ)器AT24C02讀寫實(shí)驗(yàn)。
2、PCF8583驅(qū)動(dòng)實(shí)驗(yàn),可制作電子表。
3、8位并行輸入輸出芯片PCF8574實(shí)驗(yàn)。
4、數(shù)模轉(zhuǎn)換芯片PCF8591實(shí)驗(yàn)。
IIC技術(shù)可以節(jié)省單片機(jī)端口,有利于設(shè)計(jì)小型化和制作低成本化,但是實(shí)時(shí)性有所下降。以前的實(shí)驗(yàn)均可由相關(guān)IIC器件完成。
實(shí)驗(yàn)13:操作系統(tǒng)UCOS_II在單片機(jī)上的移植
實(shí)驗(yàn)項(xiàng)目:
要求單片機(jī)ROM最少要8K,一般要14K以上,外部擴(kuò)展RAM最少要4K。完成在單片機(jī)上運(yùn)行多個(gè)任務(wù)的操作系統(tǒng)的移植
如果你已經(jīng)成功做完以上所列的所有實(shí)驗(yàn),不要謙虛了,請(qǐng)刪除本教材,并收下我這個(gè)徒弟,可以說(shuō)在51單片機(jī)開(kāi)發(fā)方面你已經(jīng)走在我們這些菜鳥(niǎo)前面了。對(duì)于初學(xué)者,當(dāng)然不必因此而泄氣,能夠在每個(gè)方面都實(shí)現(xiàn)一個(gè)基本實(shí)驗(yàn)就相當(dāng)不錯(cuò)了,就算自己無(wú)法編出程序,把網(wǎng)上編好的程序拿來(lái)跑一跑也很不錯(cuò),起碼說(shuō)明我們具有“移植”的能力,呵呵。別小看這個(gè)能力,復(fù)雜產(chǎn)品的開(kāi)發(fā)基本都是這樣,試問(wèn)誰(shuí)能為了一個(gè)產(chǎn)品自己開(kāi)發(fā)操作系統(tǒng)?要是能編出來(lái)還賣產(chǎn)品干嗎?直接賣操作系統(tǒng)就發(fā)財(cái)了,呵呵!所以初學(xué)者要量力而行,上述所列只不過(guò)給大家指出個(gè)學(xué)習(xí)方向,基本就這么多了,從簡(jiǎn)單的開(kāi)始,一步一步做下去。當(dāng)然還有一些比較高難的,比如單片機(jī)上網(wǎng),單片機(jī)控制藍(lán)牙模塊、GSM模塊、GPRS模塊乃至GPS全球定位系統(tǒng)模塊等等,這些暫時(shí)不是我們的學(xué)習(xí)內(nèi)容,等你成為高手以后再研究吧。
后記
單片機(jī)的入門教材暫且寫到這里,如果以后有新的體會(huì)再繼續(xù)補(bǔ)充。每一個(gè)初學(xué)硬件技術(shù)的人都要明白,世界上的器件是無(wú)窮無(wú)盡的,有數(shù)以萬(wàn)計(jì)的技術(shù)可能你還沒(méi)來(lái)得及接觸就被淘汰掉了,所以不要揪住一堆知識(shí)不放,或者幻想掌握所有器件的使用方法。培養(yǎng)一種思維方式是最重要的——有方法沒(méi)有知識(shí)隨時(shí)可以學(xué),有知識(shí)沒(méi)方法的話,知識(shí)最終也會(huì)被忘掉。我們現(xiàn)在學(xué)習(xí)51,如果我們?cè)趯W(xué)習(xí)過(guò)程中培養(yǎng)出了解決方法的思維方式,一旦客觀需要我們使用AVR,很短的時(shí)間我們就可以搞定,哪怕我們對(duì)AVR一無(wú)所知。
沒(méi)有萬(wàn)能的知識(shí),只有萬(wàn)能的思維與能力。但愿每一個(gè)立志投身硬件工作的年輕人都能夠擁有這種認(rèn)識(shí),為民族工業(yè)的發(fā)展與中華民族的偉大復(fù)興做出真正的貢獻(xiàn)!