|
單片機(jī)是一門應(yīng)用性和綜合性很強(qiáng)的學(xué)科,它綜合了電子技術(shù)中的模擬電路和數(shù)字電路方面的知識,特別是數(shù)字電路,因為數(shù)字電路在里面的應(yīng)用很多。學(xué)習(xí)單片機(jī)最好先從匯編語言入手,雖然匯編語言是低級語言,編程效率低,但它比C語言占用內(nèi)存小,執(zhí)行速度快等優(yōu)點,在剛接觸單片機(jī)時更容易學(xué)習(xí)。由于單片機(jī)涉及的知識很多,所以我們只能循序漸進(jìn)的學(xué)習(xí),
逐步的積累,沒有什么捷徑可循。剛開始學(xué)習(xí)的時候,對單片機(jī)沒有什么認(rèn)識,不知道什么是單片機(jī),更不知道它有什么作用。通過學(xué)習(xí)才大體知道了單片機(jī)的一些知識。
由中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、I/O接口、定時器/計數(shù)器以及串行通信接口等集成在一塊芯片上,構(gòu)成了一個單片微型計算機(jī),簡稱為單片機(jī)。
它的應(yīng)用范圍很廣,在工業(yè)自動化中應(yīng)用有數(shù)據(jù)采集、測控技術(shù)。在智能儀器儀表中應(yīng)用
有數(shù)字示波器、數(shù)字信號源、數(shù)字萬用表、感應(yīng)電流表,自動取款機(jī)等。在消費類電子產(chǎn)品中應(yīng)用有洗衣機(jī)、電冰箱、空調(diào)機(jī)、電視機(jī)、微波爐、手機(jī)、IC卡、汽車電子設(shè)備等。在通訊方面應(yīng)用有調(diào)制解調(diào)器、程控交換技術(shù)、手機(jī)、小靈通等。在武器裝備方面應(yīng)用有飛機(jī)、軍艦、坦克、導(dǎo)彈、航天飛機(jī)、魚雷制導(dǎo)、智能武器等。學(xué)習(xí)單片機(jī)要投入大量的時間,如果只想速成,幾乎是不可能的。由于單片機(jī)涉及的知識面很廣,不可能在朝夕間就學(xué)會,只能一點點的積累。不積跬步,無以至千里。只有當(dāng)你一步步去學(xué)習(xí)、去積累之后,你的單片機(jī)水平才會
提高。
學(xué)習(xí)過程中還要注重理解,要逐漸養(yǎng)成自己的編程思路,在編程過程中還要注意細(xì)節(jié)問題,
如果因為粗心大意將程序?qū)戝e,將會無形間給自己帶來更大的工作量,隨著學(xué)習(xí)的深入,我們編寫的程序?qū)⒃絹碓介L,如果出現(xiàn)很多錯誤,在改錯時將會很麻煩,出錯越多你改的時間將會越長,就會無形間給自己帶來更多麻煩 。
單片機(jī)(micro control unit)是一種集CPU、RAM、ROM、I/O、中斷、定時/計數(shù)等功能為一體的完整的計算機(jī),只需外加主頻振蕩器和電源,灌入應(yīng)用程序就可以實現(xiàn)一定的功能。單片機(jī)的的應(yīng)用特點是“面向測控”。因此,它必須有強(qiáng)力的信息處理、檢測、控制的功能。學(xué)習(xí)使用單片機(jī)就是理解單片機(jī)硬件結(jié)構(gòu),以及內(nèi)部資源的應(yīng)用,在匯編指令系統(tǒng)或C語言中學(xué)會各種功能的初始化設(shè)置,以及實現(xiàn)各種功能的程序編制。
一、總線:我們知道,一個電路總是由元器件通過電線連接而成的,在模擬電路中 ,連連線并不成為一個問題,因為各器件間一般是串行關(guān)系,各器件之間的連線并不很多,但計算機(jī)電路卻不一樣,它是以微處理器為核心,各器件都要與微處理器相連,各 器件之間的工作必須相互協(xié)調(diào)?所以就需要的連線就很多了,如果仍如同模擬電路一樣 ,在各微處理器和各器件間單獨連線線,則線的數(shù)量將多得驚人,所以在微處理機(jī)中引 入了總線的概念,各個器件共同享用連線,所有器件的8根數(shù)據(jù)線全部接到8根公用的線 上,即相當(dāng)于各個器件并聯(lián)起來,但僅這樣還不行,如果有兩?器件同時送出數(shù)據(jù),一 個為0,一個為1,那么,接收方接收到的究竟是什么呢?這種情況是是不允許的,所以 要通過控制線進(jìn)行控制,使器件分時工作,任何時候只能有一個器件發(fā)送數(shù)據(jù)(可以有 多個器件同時接收)。器件的數(shù)據(jù)線也就被稱為數(shù)據(jù)總線,器件所有的控制線被稱 控制 總線。
在單片機(jī)內(nèi)部或者外部存儲器及其它器件中有存儲單元,這些存儲單元要被分配 地址,才能 用,分配地址當(dāng)?也是以電信號的形?給出的,由于存儲單元比較多,所以 ,用于地址分的線也較多,這些線被稱為地址總線。
二、數(shù)據(jù)、地址、指令:之所以將這三者放在一起,是因為這三者的本質(zhì)都是一樣的─數(shù)字,或者說都是?串‘0’和‘1’組成的序列。換言之,地址、指令也都是數(shù)據(jù) 。指令由單片機(jī)芯片的設(shè)計者規(guī)定的一種數(shù)字,它與我們常用的指令助記符有著嚴(yán)格的 一一對應(yīng)關(guān),不可以由 單片機(jī)的開發(fā)者更改。
三、P0口、P2口和P3的第二功能用法
初學(xué)時往往對P0口、P2口和P3口的第二功能用法迷惑不解,認(rèn)為第二功能和原功能之間
要有個切換的過程,或者說要有一條指令,事實各端口的第二功能完全是自動,不需要指令來轉(zhuǎn)換。如P3.6、P3.7分別是WR、RD信號,當(dāng)微片理機(jī)外接RAM或有外部I/O口 時,它們揮作第二功能,不能作為通用I/O口使用,只要一微處理機(jī)一執(zhí)行到MOVX指令,就會有相應(yīng)的信號從P3. 或P3.7送出,不需要事先用指令說明。事實上‘不能作為通用I/O口使用’也并不是‘不能而是(使用者)‘不會’將其作為通用I/O口使用。你完全可以在指令中按排一條S ETB P3.7
的指令,并且當(dāng)單片機(jī)執(zhí)行到這條指令時,也會使P3.7變?yōu)楦唠娖剑褂谜卟粫@么做,
因為這通常這會導(dǎo)致系統(tǒng)當(dāng)潰(即死機(jī))。
四、程序的執(zhí)行過程
單片機(jī)在通電復(fù)位后8051內(nèi)的程序計數(shù)器(PC)中的值為‘0000,所以程序總是從‘0000’單元開始執(zhí)行,也就是說:在系統(tǒng)的ROM中一定要存在‘0000’個單元,并且在‘0000’單元中存放的一定是一條指令。
五、堆棧 堆棧是一個區(qū)域,是用來存放數(shù)據(jù)的,這個區(qū)域本身沒有任何特殊之處,就是內(nèi)部RAM的一份,特殊的是它存放和取用數(shù)據(jù)的方式,即所謂的‘先進(jìn)后出,后進(jìn)先出’,并且堆棧有特的數(shù)據(jù)傳輸指令,即‘PUSH’和甈OP,有一個特殊的專為其服務(wù)的單元,即堆棧指針SP
每當(dāng)執(zhí)一次PUSH指令時,SP就(在原來值的基礎(chǔ)上)自動加1,每當(dāng)執(zhí)行一次POP指令,SP
就(在原來值基礎(chǔ)上)動減1。由于SP中的值可以用指令加以改變,所以只要在程序開始階段更改了SP值,就可以把堆棧設(shè)置在規(guī)定的內(nèi)存單元中,如在程序開始時?用一條MOV SP,#5FH指令,就時把堆棧設(shè)置在從內(nèi)存單元60H開始的單元中。一般程序的開頭總有這么條設(shè)置堆棧指針的指令,因為開機(jī)時,SP的初始值為07H,這樣就使堆棧從08H單元
開始往后8H到1FH這個區(qū)域正是8031的第二、三、四工作寄存器區(qū),經(jīng)常要被使用,這會造成數(shù)據(jù)的渾亂
六
:中斷當(dāng)單片機(jī)應(yīng)用于測控系統(tǒng)時,實時性就顯得特別重要了。而中斷技術(shù)就是處理這種實時性要求高的場合。單片機(jī)的特點是一段程序反復(fù)執(zhí)行,程序中每個指令的執(zhí)行都需要一定的執(zhí)行時間,如果程序沒有執(zhí)行到某指令,則該指令的動作就不會發(fā)生,這樣就會耽誤很多快速發(fā)生的事情,例如,按鈕按下時的下降沿。要使單片機(jī)在程序正常運行過程中,對快速動作做出反應(yīng),就必須使用單片機(jī)的中斷功能,該功能就是在快速動作發(fā)生后,單片機(jī)中斷正常運行的程序,處理快速發(fā)生的動作,處理完成后,在返回執(zhí)行正常的程序。中斷功能是需要合理控制的,在使用中的困難是需要精確地知道什么時候不允許中斷發(fā)生(屏蔽中斷)、什么時候允許中斷發(fā)生(開中斷),需要設(shè)置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應(yīng)該干什么,中斷完成后,程序應(yīng)該干什么等等。
中斷學(xué)會后,就可以編制更復(fù)雜結(jié)構(gòu)的程序,這樣的程序可以干著一件事,
監(jiān)視著一件事,一旦監(jiān)視的事情發(fā)生,就中斷正在干的事情,處理監(jiān)視的事情。
這就是中斷功能的強(qiáng)大之處。
七:匯編語言與C語言
匯編指令有自己的一套繁瑣的指令系統(tǒng),不容易熟練掌握,編寫程序不得不注意硬件細(xì)節(jié)。相對于C語言,匯編語言也有不可忽略的優(yōu)勢,就是在某些特殊場合需要高效的,占用存儲空間小的地方。但隨著技術(shù)的發(fā)展硬件的限制越來越小,C語言比較好理解,通用性和可移植性都很不錯。也不用記專門的指令集合來,所以我還是比較傾向于用C編寫程序的
接觸單片機(jī)已經(jīng)有一段時間了,我感覺自己動手學(xué)習(xí)編寫程序,調(diào)試然后在開發(fā)板上做學(xué)習(xí)的很快,看到自己看到的結(jié)果通過自己親手做出來的感覺很有成功感。
有時候單片機(jī)的學(xué)習(xí)很單調(diào),有些知識學(xué)起來很抽象,不容易理解,只能慢慢適應(yīng),一邊學(xué)習(xí)理論知識,一邊編寫程序,將程序刷入單片機(jī)進(jìn)行調(diào)試,通過這種方式才能更快速的學(xué)習(xí)單片機(jī)。同時也會從學(xué)習(xí)中體會成功的喜悅。
|
|