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