劉英會(huì) 岳偉利 張宗彩
摘要
單片機(jī)與我們的生活息息相關(guān),由于其體積小,容易嵌入各種玩具,電器中,受到廣大廠商的歡迎。可大部分使用者對(duì)單片機(jī)的工作原理并不清楚,尤其是單片機(jī)的匯編語(yǔ)言與機(jī)器語(yǔ)言的關(guān)系。本文中以信號(hào)燈閃爍系統(tǒng)的設(shè)計(jì)仿真為例,對(duì)其匯編過(guò)程進(jìn)行了詳細(xì)的分析。通過(guò)本文的闡述,幫助更多的初學(xué)者快速掌握單片機(jī)。
【關(guān)鍵詞】指令系統(tǒng) 閃爍系統(tǒng)
一個(gè)完整的單片機(jī)系統(tǒng)除了需要硬件電路的支持,軟件設(shè)計(jì)也必不可少。指令是單片機(jī)能夠識(shí)別和執(zhí)行的命令,一個(gè)單片機(jī)能夠執(zhí)行全部指令的集合稱(chēng)為這個(gè)單片機(jī)的指令系統(tǒng)。由于單片機(jī)的硬件只能識(shí)別二進(jìn)制數(shù),因此最初的指令采用二進(jìn)制表示,后來(lái)用八進(jìn)制和十六進(jìn)制表示,這些都稱(chēng)為機(jī)器語(yǔ)言。機(jī)器語(yǔ)言不易理解,編制程序容易出錯(cuò),為了便于閱讀和書(shū)寫(xiě),一些廠商根據(jù)指令功能和操作對(duì)象的不同,給出不同指令的英文縮寫(xiě)符號(hào),稱(chēng)為助記符。用助記符表示的指令稱(chēng)為匯編語(yǔ)言指令。
需要注意的是,匯編語(yǔ)言不能直接運(yùn)行,它要匯編為機(jī)器語(yǔ)言指令后才能運(yùn)行。但多數(shù)人對(duì)單片機(jī)的匯編過(guò)程并不了解,本文以信號(hào)燈的閃爍系統(tǒng)設(shè)計(jì)及仿真為例,闡述匯編語(yǔ)言編譯為機(jī)器語(yǔ)言的具體過(guò)程。
1 MCS-51系列單片機(jī)的指令系統(tǒng)
以數(shù)據(jù)傳送指令為例,單片機(jī)的數(shù)據(jù)傳送指令是編程時(shí)使用最多的指令。用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP,根據(jù)這些指令作用的不同,將其分為內(nèi)部數(shù)據(jù)傳送指令、外部數(shù)據(jù)傳送指令、訪問(wèn)程序存儲(chǔ)器指令、堆棧操作指令和數(shù)據(jù)交換指令5類(lèi)。如“MOV A,Rn”對(duì)應(yīng)的機(jī)器語(yǔ)言“E8?EF”,再如“MOV A,direct”對(duì)應(yīng)的機(jī)器語(yǔ)言“E5 direct”。由此可見(jiàn),匯編語(yǔ)言與機(jī)器語(yǔ)言之間存在一一對(duì)應(yīng)關(guān)系,而編譯為機(jī)器語(yǔ)言后占用多大的存儲(chǔ)空間,由字節(jié)數(shù)決定。
2 信號(hào)燈閃爍系統(tǒng)設(shè)計(jì)與仿真
通過(guò)制作一個(gè)最簡(jiǎn)單的單片機(jī)系統(tǒng)——信號(hào)燈閃爍系統(tǒng),闡述匯編語(yǔ)言編譯為機(jī)器語(yǔ)言的過(guò)程。在單片機(jī)的P0.0端口上接上一個(gè)發(fā)光二極管L1,編制匯編程序使L1不停地一閃一滅,時(shí)間間隔為0.2S。
2.1 硬件設(shè)計(jì)
本系統(tǒng)采用單片機(jī)為51系列,硬件系統(tǒng)結(jié)構(gòu)由電源電路、時(shí)鐘電路、復(fù)位電路和LED信號(hào)燈電路。
2.2 軟件設(shè)計(jì)
從硬件設(shè)計(jì)的電路原理圖可以看出,當(dāng)P0.0端口輸出高電平時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,L1熄滅,這里可以使用SETBP0.0指令使P0.0端口輸出高電平,當(dāng)P0.0端口輸出低電平時(shí),L1點(diǎn)亮;
由于單片機(jī)指令的執(zhí)行時(shí)間很短,屬于微秒級(jí),要求彩燈閃爍時(shí)間間隔為0.2秒,相對(duì)于微秒來(lái)說(shuō),相差太大,所以在執(zhí)行彩燈點(diǎn)亮和熄滅指令時(shí),插入延時(shí)程序,達(dá)到我們的要求。
2.3 利用keil C51集成開(kāi)發(fā)軟件編輯、編譯和連接程序
新建工程,選擇51芯片,新建文件編輯匯編源程序,將匯編文件保存為.asm形式,將文件添加進(jìn)工程里,單擊編譯按鈕,對(duì)匯編源文件進(jìn)行編譯、鏈接,在保存工程的文件夾中將生產(chǎn).hex文件。
單擊“debug”進(jìn)行程序的調(diào)試,start debug。
在程序由匯編語(yǔ)言轉(zhuǎn)化為機(jī)器語(yǔ)言過(guò)程中,編譯后存儲(chǔ)在程序存儲(chǔ)器以0000H為首地址的單元中。
由圖1可知,程序編譯后存儲(chǔ)在程序存儲(chǔ)器以0000H為首的地址單元中,每條匯編語(yǔ)言占用的字節(jié)數(shù)由指令決定,占用1-3字節(jié)不等。而每條匯編語(yǔ)言與機(jī)器語(yǔ)言間的一一對(duì)應(yīng)關(guān)系由上表清晰可見(jiàn)。
3 結(jié)論
通過(guò)單片機(jī)信號(hào)燈閃爍系統(tǒng)的設(shè)計(jì)過(guò)程可知,雖然在keil編程軟件中我們使用的匯編語(yǔ)言,但實(shí)際寫(xiě)入單片機(jī)的是二進(jìn)制的機(jī)器語(yǔ)言,匯編語(yǔ)言的每一條指令與機(jī)器語(yǔ)言之間存在一一對(duì)應(yīng)的關(guān)系。初學(xué)者可以通過(guò)查詢相關(guān)資料對(duì)單片機(jī)的五類(lèi)匯編語(yǔ)言的匯編過(guò)程有更深入的了解。
參考文獻(xiàn)
[1]曹建樹(shù),代峰燕等.應(yīng)用型工科院校單片機(jī)課程教學(xué)改革與實(shí)踐[J].實(shí)驗(yàn)室研究與探索,2012(03):129-131
[2]王愛(ài)華.淺談單片機(jī)匯編語(yǔ)言教學(xué)[J].黑龍江科技信息,2009(17):143.
[3]陳龍,張亞君.Proteus仿真軟件在單片機(jī)實(shí)驗(yàn)教學(xué)中的應(yīng)用[J].實(shí)驗(yàn)技術(shù)與管理,2009(08):73-75.
[4]許超,吳新杰,張丹.基于Proteus和Keil的單片機(jī)課程教學(xué)改革[J].遼寧大學(xué)學(xué)報(bào)(自然科學(xué)版),2011(01):27-29.