單片機原理及基于單片機的嵌入式系統(tǒng)設計第二版ppt課件(完整版)_第1頁
單片機原理及基于單片機的嵌入式系統(tǒng)設計第二版ppt課件(完整版)_第2頁
單片機原理及基于單片機的嵌入式系統(tǒng)設計第二版ppt課件(完整版)_第3頁
單片機原理及基于單片機的嵌入式系統(tǒng)設計第二版ppt課件(完整版)_第4頁
單片機原理及基于單片機的嵌入式系統(tǒng)設計第二版ppt課件(完整版)_第5頁
已閱讀5頁,還剩584頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機原理及基于單片機的嵌入式系統(tǒng)設計緒 論 在工業(yè)、農業(yè)、軍事、保安、金融、儀器儀表、航空航天、醫(yī)療、通訊、辦公設備、娛樂休閑、健身、體育競賽、服務領域,大量單片機-嵌入式技術已經無處不在。正迅速改變著人們傳統(tǒng)的生產和生活方式。 請稍微留心一下我們的周圍,看看身邊到底發(fā)生了什么變化?單片機技術的應用遍布國民經濟與人民生活的各個領域1.1 微型計算機系統(tǒng)結構 微機的工作過程按照“程序存儲,程序控制”的方式工作。程序存儲是指用戶根據(jù)實際應用需要將程序編寫完畢,并將程序的機器碼存放在存儲器中。用戶編程的根本目的是要求計算機能夠按照用戶需求一步步的執(zhí)行該段程序。那么計算機如何能夠理解用戶程序,并按要

2、求去執(zhí)行該段程序呢?這就是程序控制。程序控制是指CPU內的控制器按照用戶程序中的指令順序,從存儲器中取出指令,并分析指令的功能,進而發(fā)出各種控制信號,指揮計算機中的各類部件來執(zhí)行該指令。這種通過取指令、分析指令、執(zhí)行指令的操作重復執(zhí)行,直到完成程序中的全部指令操作為止。1.2 微型計算機工作過程一、如何將程序的機器碼存儲到程序存儲器中?二、如何將程序的機器碼從程序存儲器中取出?三、當CPU完成從程序存儲器中讀出程序的機器碼后,如何執(zhí)行該語句?按照“程序存儲,程序控制”的方式工作,微機必須解決以下幾個問題:對51單片機而言,將程序存儲到程序程序器中則相對復雜,必須利用51單片機芯片廠家提供的專用

3、設備(燒寫器)來完成,市場上有專門的單片機燒寫器銷售。燒寫器實際上就是完成對程序存儲器的寫操作。利用燒寫器可以將用戶程序的機器碼存儲到單片機中。1.2.1 如何將程序機器碼燒寫到程序存儲器中對于普通PC而言,其程序存放在硬盤中,此時面臨的問題就是將文件、程序內容寫入硬盤,在Windows操作系統(tǒng)中提供了圖形化的操作環(huán)境,讀者不必了解對硬盤的寫操作原理,僅需要按“保存”按鈕或“保存”菜單就可以很方便的完成該操作。1.2.2 如何將程序從程序存儲器中取出 最基本的計算機組成 存儲器 非常簡單的CPU設計與實現(xiàn)如何從程序存儲器中取程序數(shù)據(jù) 一臺簡單的計算機通常包括三個主要的子系統(tǒng),中央處理單元(CP

4、U)、存儲系統(tǒng)(用來存儲CPU正在執(zhí)行的程序和數(shù)據(jù))、輸入/輸出子系統(tǒng)(如鍵盤、顯示等) 1 最基本的計算機組成計算機系統(tǒng)采用了三總線結構。從物理上說,總線是一組導線,計算機的部件都是連在總線上的,為了將信息從一個部件傳到另一個部件,源部件先將數(shù)據(jù)輸出到總線上,然后目標部件在從總線上接收這些數(shù)據(jù)。 地址總線:與其他總線不同,地址總線是單向的,地址總線的內容總是由CPU送到地址總線上,而CPU不讀取地址總線上的數(shù)據(jù)。例如,當CPU從存儲器讀取數(shù)據(jù)或指令,或寫數(shù)據(jù)到存儲器時,必須指明要訪問的存儲器單元地址,CPU輸出地址內容到地址總線上,而存儲器從地址總線上讀取地址,并且用它來訪問正確的存儲單元。

5、對應I/O子系統(tǒng),比如鍵盤、顯示等,都有一個唯一的地址,當訪問某個I/O子系統(tǒng)時,CPU將此設備的地址放到地址總線上,每一個設備均從總線上讀取地址并且判斷自己是不是CPU正要訪問的設備。若不是則不作任何響應,若是則和CPU進行相應的數(shù)據(jù)傳輸。 數(shù)據(jù)總線: 數(shù)據(jù)是通過數(shù)據(jù)總線來傳送的,當CPU從存儲器中讀取數(shù)據(jù)時,它首先把需要訪問的存儲器地址輸出到地址總線上,發(fā)出讀操作命令,然后存儲器從地址總線上讀取地址,并根據(jù)地址訪問相應的存儲單元,同時將該存儲器單元中的數(shù)據(jù)輸出到數(shù)據(jù)總線上,這樣CPU就可以從數(shù)據(jù)總線上讀取數(shù)據(jù)了。當CPU向存儲器寫入數(shù)據(jù)時,它首先輸出地址到地址總線上,發(fā)出寫操作命令,然后輸

6、出數(shù)據(jù)到數(shù)據(jù)總線上,這樣存儲器就可以從數(shù)據(jù)總線上讀取數(shù)據(jù)并將它存儲到正確的存儲單元中。當訪問某個I/O子系統(tǒng)時其數(shù)據(jù)總線功能類似于對存儲器的訪問。 控制總線:控制總線是控制信號的集合,這些信號用來控制數(shù)據(jù)要讀入CPU還是要寫入CPU,CPU要訪問存儲器還是訪問I/O子系統(tǒng)等。 答:只有數(shù)據(jù)總線,沒有地址和控制總線,則通信方式只能采用“廣播通信方式”,若只有數(shù)據(jù)和控制總線,沒有地址總線,則每個外部設備都必須有控制總線,若外部設備多,則控制總線就必須增加,控制總線必然稱為外部設備擴展的“瓶頸”。若沒有地址總線,對應存儲器而言,在沒法確定當前數(shù)據(jù)需要存放在存儲器的那個地址單元中。問1、為什么需要三總

7、線,只有數(shù)據(jù)總線不可以?問2、鼠標、鍵盤是外部IO設備,為什么不是三總線?答:在計算機中硬件設計了三總線協(xié)議和PS/2或USB協(xié)議的接口轉換電路,即將并行數(shù)據(jù)改為串行數(shù)據(jù)傳輸方式存儲器用于存儲數(shù)據(jù)的一組電路,雖然在設計中它不是嚴格的組合電路,一個存儲器元件有多個存儲單元,每個單元存儲固定長度的二進制值,不同的存儲器芯片,其存儲單元的數(shù)量和大小也不相同,存儲器芯片存儲容量大小由單元數(shù)乘以每個單元的位數(shù)確定。存儲器一般分為隨機讀寫存儲器(RAM)和只讀存儲器(ROM)。2 存儲器隨機存取存儲器(RAMRandom Access Memory):簡稱隨機存儲器或讀寫存儲器。是一種既能寫入又能讀出數(shù)據(jù)

8、的存儲器。但當機器斷電或關機時,存儲器中存儲的信息會立即消失。只讀存儲器(ROMRead Only Memory):是計算機內部一種只能讀出數(shù)據(jù)信息而不能寫入信息的存儲器。但當機器斷電或關機時,只讀存儲器中的信息不會丟失。存儲器可以形象的把它理解成裝了很多元件盒的元件儲存柜,元件儲存柜放很多元件盒,每個元件盒中放不同的元件,當用戶需要某一元件時,必須知道該元件放在那個元件盒中,即需要對元件盒進行編號,否則只能一個個元件盒查找。對應于存儲器,編號即為存儲器的地址,元件盒內的元件就是存儲數(shù)據(jù)。例如一個大小為5128位的存儲器芯片有512個存儲單元,每個單元8位就可以理解成元件柜共512個元件盒,那

9、么如果想找到對應的元件盒里的元件就必須對元件盒進行編號,若采用二進制編號,則512個單元共需要9位二進制,即對應存儲器的地址。 對元件盒里元件個數(shù)可以采用8位計數(shù),即一個元件盒最多可存放255個元件,即可以得到對應元件盒中的數(shù)據(jù)信息。存儲器芯片的地址輸入選擇它其中的一個單元,有個單元的存儲器芯片需要N位的地址輸入,通常標記A【N10】,對于大小為5128位的存儲器芯片而言,其地址總線為A【8.0】。存儲器芯片中的數(shù)據(jù)引腳常用于訪問數(shù)據(jù),數(shù)據(jù)總線的每一位都有一個引腳,對于M位的數(shù)據(jù)總線在,這些引腳通常標記為D【M10】,對于大小為5128位的存儲器芯片而言,其數(shù)據(jù)總線為D【7.0】。 問:為什么

10、數(shù)據(jù)總線不是三根?答:若數(shù)據(jù)總線是三根,則存儲器中存儲的數(shù)據(jù)最大只能為8,若數(shù)據(jù)總線8根,則存儲的數(shù)據(jù)最大為256這一節(jié)描述和設計一個非常簡單的CPU,這個CPU在現(xiàn)實中是沒有任何應用價值的,因為它太簡單了,但是目的是為了讀者理解CPU的具體工作原理。為了說明CPU的設計過程,考慮一個小型的有點不實用的CPU,這款CPU的特點是: CPU僅能夠訪問64字節(jié)的存儲空間(程序存儲器和數(shù)據(jù)存儲器共用) 每個字節(jié)是8位 CPU只包含一個程序員可以訪問的寄存器,即一個標記為ACC的8位累加器3 非常簡單的CPU設計與實現(xiàn)指令集通常由三大類指令組成,傳送類指令、運算(包括邏輯運算)類指令、轉移類指令三部分

11、組成。在這款CPU中,僅設計4條指令,按照等長編碼模塊,利用高二位對指令類型進行編碼,低6位AAAAAA表示地址線,如下表11所示。MOV指令代表“傳送類”指令,ADD指令代表“運算類”指令,AND指令代表“邏輯運算類”指令,LJMP指令代表“轉移類”指令。該CPU的指令集對上面這個CPU而言,可以說:麻雀雖小,五臟具全,從系統(tǒng)結構的指令集設計而言,這個系統(tǒng)包括運算類、傳送類、轉移類、邏輯運算類指令。根據(jù)該款CPU的特點,可以看出該CPU可訪問64字節(jié)的存儲器空間,所以其地址總線是A5.0。由于每個字節(jié)是8位,所以其數(shù)據(jù)總線為D70。CPU設計到這里,還缺什么?除了ACC累加器以外,CPU還需

12、要一些其他的寄存器,以便完成取數(shù)據(jù)、譯碼和執(zhí)行指令所必須的內部操作,這些寄存器為:一個6位的程序計數(shù)器(PC),它的內容為將被執(zhí)行的指令在程序存儲器中的存儲地址。一個6位的地址寄存器(AR),CPU不能直接將地址信息送往地址總線,CPU首先將地址信息送給地址寄存器AR,AR通過地址總線A5.0向存儲器提供地址。一個8位的數(shù)據(jù)寄存器(DR),CPU不能直接將數(shù)據(jù)信息送往數(shù)據(jù)總線,CPU首先將數(shù)據(jù)信息送給數(shù)據(jù)寄存器DR,DR通過數(shù)據(jù)總線D70從存儲器讀寫指令數(shù)據(jù)。一個2位的指令寄存器(IR),它用來存放從存儲器中取回指令的操作碼。至此,一個簡單的CPU總算設計完成,一個CPU該有的都有了,能夠完成

13、一些簡單的操作。在CPU能夠執(zhí)行某條指令之前,它必須將這條指令從存儲器中取出來,CPU從程序存儲器中取程序數(shù)據(jù)的具體操作過程 將當前要執(zhí)行指令的存儲地址送到程序計數(shù)器中,由于地址總線A【5.0】的內容必須從地址寄存器送出,因此第一步就是要把程序計數(shù)器PC的內容拷貝到AR中,這樣,取指令周期的第一步狀態(tài)就是: 第一步: ARPC4 如何從程序存儲器中取程序數(shù)據(jù) CPU從存儲器中讀取指令數(shù)據(jù):CPU必須發(fā)一個READ信號,該信號從CPU控制總線輸出到存儲器控制總線上,CPU給存儲器足夠的時間按照CPU提供的地址訪問相應的存儲單元M,同時存儲器將訪問的數(shù)據(jù)(即指令的機器碼)發(fā)送到數(shù)據(jù)總線D【70】上

14、,CPU通過數(shù)據(jù)總線將這些數(shù)據(jù)讀入并且存儲到DR中。實際上另一個操作也將在這里完成,增加程序計數(shù)器,以便能訪問下一條指令。所以第二步實際上是完成如下操作。其中(M)表示存儲單元M中的內容。 第二步: DR(M), PCPC1 上述兩步完成后,CPU已經得到程序的機器碼,作為取指令的一部分,CPU還必須完成兩件事情,首先,它必須將DR的高兩位拷貝到IR,這兩位表示那條指令將要執(zhí)行,同時在取指令階段CPU將DR的低6位拷貝到AR中,這樣這兩個操作可以表示如下。 第三步: IRDR7.6, ARDR5.0完成上面三步操作后,CPU將程序存儲器內容取出,其高二位存放在指令寄存器IR中,為操作碼信息,通

15、過IR的值可以判斷該指令為四條指令中的哪一條。低6存放在地址寄存器AR中,為執(zhí)行指令操作的操作數(shù)的地址編碼。例如進行ADD加法操作,則必須以AR單元的內容為地址去訪問存儲器,并取出該存儲單元的內容和累加器ACC中的內容進行相加,那么如何以AR單元的內容為地址去訪問存儲器,該存儲單元的內容又是如何得到呢?即CPU完成 對存儲器的讀操作。 CPU以AR單元的內容為地址去訪問存儲器,從存儲器中讀取操作數(shù)。CPU發(fā)一個讀信號,該信號從CPU控制總線輸出到存儲器控制總線上,CPU給存儲器足夠的時間按照CPU提供的AR單元的內容作為地址訪問相應的存儲單元,同時存儲器將訪問的數(shù)據(jù)(即指令的操作數(shù))發(fā)送到D【

16、7.0】上,CPU通過數(shù)據(jù)總線將這些數(shù)據(jù)讀入并且存儲到DR中。所以第四步實際上是完成如下操作。(AR)表示以AR單元的內容為地址所對應的存儲單元的內容。 第四步: DR(AR)1.2.3 CPU讀出指令碼和操作數(shù)后如何執(zhí)行 當CPU把一條指令從存儲器中取出來以后,它必須判斷所取的是那條指令,對于這個最簡單的CPU而言,有四條指令,根據(jù)等長編碼原理,可以將四條指令依次編碼為00,01,10,11。指令寄存器IR的值由當前指令類型決定,指令寄存器IR中的值將決定調用那個執(zhí)行周期, 為執(zhí)行“傳送類”指令,CPU必須完成兩件事情。首先必須從存儲器中取出一個操作數(shù),然后將這個操作數(shù)送入累加器中。操作數(shù)的

17、取值通過對存儲器的讀操作已經將操作數(shù)取出。現(xiàn)在兩個操作數(shù)分別放在ACC和DR中,因此對于ADD指令,主要進行下面的操作。第五步:MOV: ACCDR當前指令執(zhí)行完畢后,開始取下一條指令。即將當前PC值送入AR中,重新開始下一條指令的執(zhí)行。1 MOV指令執(zhí)行周期為執(zhí)行“加法”指令,CPU必須完成兩件事情。首先必須從存儲器中取出一個操作數(shù),然后必須將這個操作數(shù)和累加器中當前的值相加,并把結果存回到累加器中。操作數(shù)的獲取通過第四步對存儲器的讀操作已經完成。現(xiàn)在兩個操作數(shù)分別放在ACC和DR中,因此對于ADD指令,主要完成下面的操作。第五步:ADD: ACCACCDR2 ADD指令執(zhí)行周期與加法指令類

18、似,為執(zhí)行“與操作”指令,CPU必須完成兩件事情。首先必須從存儲器器中取出一個操作數(shù),然后必須將這個操作數(shù)和累加器中當前的值相“與”操作,并把結果存回到累加器中?,F(xiàn)在兩個操作數(shù)都在ACC和DR中,因此對于AND指令,主要進行下面的操作。第五步: AND: ACCACCDR 3 AND指令執(zhí)行周期由于LJMP指令中不需要操作數(shù),所以LJMP指令與上述三條指令執(zhí)行略有不同,不需要第四步操作。CPU只需要完成將要跳轉的目標地址送給程序計數(shù)器即可。因此與上述指令第四和第五步操作不同,LJMP指令執(zhí)行周期相對簡單,由于地址已經存儲在AR,僅需要將AR的值送給PC指針,因此對于LJMP指令,僅需要如下操作

19、即可。第四步: LJMP: PCAR 為了更形象的說明上述過程,可以用圖來說明所設計的CPU的狀態(tài)圖,包括了取指、譯碼和執(zhí)行周期。 4 LJMP指令執(zhí)行周期1.3 單片機發(fā)展歷史1971年intel公司研制成功世界上第一臺4位微處理器;1973年intel公司研制成功8080 8位微處理器;1976年intel公司推出MCS-48系列8位單片機;80年代初在MCS-48單片機基礎上推出MCS-51系列單片機。 計算機系統(tǒng)通常由多塊印刷電路板制成:多板機 主板顯卡聲卡存儲器接口網卡輸入輸出接口內存條CPUCPUCPU芯片內存條存儲器接口存儲器芯片輸入輸出接口輸入輸出接口芯片定時計數(shù)器芯片A/D、

20、D/A芯片單板機 印 刷 電 路 板 單 硅 晶 片 CPU存儲器控制電路定時器時鐘電路I / O口單片機1.4 單片機發(fā)展趨勢1 低功耗CMOS化 2 微型單片化 3 主流與多品種共存 1 小巧靈活、成本低,易于產品化。它能方便的組裝成各種智能化的控制設備及各種智能儀器儀表。2 面向控制,能針對性地解決從簡單到復雜的各類控制任務,因而能獲得最佳的性能價格比。3 抗干擾能力強,適應溫度范圍寬,在各種惡劣的環(huán)境條件下都能可靠地工作,這是其他機種無法比擬的。4 可以很方便地實現(xiàn)多機和分布控制。使整個控制系統(tǒng)的效率和可靠性大為提高。1.5 單片機特點Intel公司:8048、8051(8位);809

21、6(16位);80960(32位)。Motorola公司:MC-6801(8位);68H16(16位);68HC332(32位)。另外日本NEC公司;荷蘭Philips公司等由于8位單片機基本能滿足目前大多數(shù)應用系統(tǒng)的要求,所以目前8位單片機仍是應用主流。 1.6 主要單片機廠商 MCS-51是指由美國INTEL公司生產的一系列單片機的總稱,這一系列單片機包括了很多品種,如8031,8051,8751,8951,8032,8052,8752,8952等,其中8051是最早最典型的產品,該系列其它單片機都是在8051的基礎上進行功能的增、減、改變而來的,所以人們習慣于用8051來稱呼MCS-51

22、系列單片機,而8031是早些年在我國最流行的單片機,所以很多場合會看到8031的名稱。 MCS-51系列 INTEL公司將MCS-51的核心技術授權給了很多其它公司,所以有很多公司在做以8051為核心的單片機,當然,功能或多或少有些改變,以滿足不同的需求,其中89C51就是這幾年在我國非常流行的單片機,它是由美國ATMEL公司開發(fā)生產的。 AT89系列 補充 單片機的開發(fā)過程1、任務分析2、設計并制作硬件3、編寫軟件。在編寫軟件之前,首先要確定一些常數(shù)、地址,然后用文本編緝器編寫軟件,編寫好后,用編譯器對源程序文件編譯、查錯,直到沒有語法錯誤4、應用仿真機對軟件進行調試,直到程序運行正確5、運

23、行正確后,就可以寫片(將程序固化在EPROM中) 仿真是單片機開發(fā)過程中非常重要的一個環(huán)節(jié),除了一些極簡單的任務,一般產品開發(fā)過程中都要進行仿真,仿真的主要目的是進行軟件調試,當然借助仿真器,也能進行一些硬件排錯。一塊單片機應用電路板包括單片機部份及為達到使用目的而設計的應用電路,仿真就是利用仿真器來代替應用電路板(稱目標機)的單片機部份,對應用電路部份進行測試、調試。 仿真分軟件模擬仿真和利用仿真器仿真兩類。 仿真、仿真器軟件模擬仿真 是指用仿真軟件來模擬單片機運行情況,一般我們學習指令系統(tǒng)時常用這種方式,它不能進行硬件系統(tǒng)的調試和故障診斷。利用仿真器仿真 利用仿真器以及微機可以進行軟硬件系

24、統(tǒng)的調試和故障診斷。在仿真調試過程中,可以以各種運行方式運行程序(斷點、單步、跟蹤),還可以觀察到單片機內部存儲器、寄存器等的狀態(tài)。源程序 ORG 0000H LJMP START ORG 040HSTART:NOP LOOP:NOP LJMP LOOP ;循環(huán) END ;結束目標文件也就是最終寫入EPROM的文件:02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFF

25、F FF FF FF FF FF FF FFFF FF FF FF FF FF FF FF 00 00 02 00 41 FF FF FF舉例說明(完成一段空操作程序)問:如何學習單片機?1、了解單片機外部硬件接口以便設計硬件電路2、熟悉單片機指令系統(tǒng)和程序設計方法學習單片機的方法:1、預習、復習;2、多動手(硬件、軟件實驗);3、多看參考書(包括利用網上資料);4、其它(上課、作業(yè)、答疑)第2章 MCS-51單片機結構和原理 2.1MCS-51系列單片機特性2.2從外部引腳初看51單片機2.3從引腳使用二看單片機2.4從內部結構三看51單片機2.5并行輸入/輸出端口 MCS-51系列單片機特

26、性 MCS-51系列單片機雖已有10多種產品,但可分為兩大系列:MCS-51子系列與MCS-52子系列。MCS-51子系列中主要有8031、8051、8751 三種類型。而MCS-52子系列也有3種類型8032、8052、8752。各子系列配置見下表所示。 圖2-1 MCS-51系列單片機特性 從圖2-1所示可以看出,MCS-51系列單片機的兩個子系列在性能上略有差異。8031、 80C31芯片僅在制造工藝上有所不同,其他完全相同,對于8051、80C51、8751、87C51、MCS-52系列單片機的制造工藝也是如此,即C系列芯片采用CHMOS工藝。對于制造工藝為CHMOS的單片機,由于采用

27、CMOS技術制造,因此具有低功耗的特點。如8051功耗約為630 mW,而80C51的功耗只有120 mW。8031沒有片內ROM,即8031芯片外部必須外擴程序程序器。8051芯片片內集成4K容量的ROM,8751芯片片內集成4K容量的EPROM,與MCS-51相比,MCS-52子系列片內程序存儲器ROM從4 KB增至8 KB。片內數(shù)據(jù)存儲器由128個字節(jié)增至256個字節(jié)。定時器/計數(shù)器增加了一個,中斷源增加了12個。 MCS51系列單片機芯片均為40個引腳, HMOS工藝制造的芯片采用雙列直插(DIP)方式封裝, 其引腳示意及功能分類如圖23所示。 CMOS工藝制造的低功耗芯片也有采用方型

28、封裝(PLCC)的, 但為44個引腳, 其中4個引腳是不使用的2.2 從外部引腳一看51單片機VCC(40腳): 接+5 V電源正端; VSS(20腳): 接+5 V電源地端1. 主電源引腳Vcc和Vss XTAL1:接外部晶振和微調電容的一端,在片內它是振蕩器倒相放大器的輸入,若使用外部TTL時鐘時,該引腳必須接地。XTAL2:接外部晶振和微調電容的另一端,在片內它是振蕩器倒相放大器的輸出,若使用外部TTL時鐘時,該引腳為外部時鐘的輸入端。2. 外接晶體引腳XTAL1和XTAL2:地址鎖存允許信號當8051上電正常工作后,ALE引腳不斷向外輸出脈沖信號,此頻率為振蕩器頻率的1/6,當CPU訪

29、問外部存儲器時(振蕩頻率的1/12),ALE輸出信號作為鎖存低8位地址的控制信號,不訪問片外存儲器時,ALE端以振蕩頻率的1/6固定輸出脈沖,因此ALE信號可用作對外輸出時鐘或定時信號。所以利用ALE引腳可以很方便的判斷單片機是否正常工作。當單片機上電復位后,用示波器測ALE引腳,若有脈沖輸出,則說明單片機最小系統(tǒng)外圍電路連接正確,單片機正常工作。該引腳的第二功能在對片內帶有4K容量EPROM的8751編程時作為編程脈沖輸入端。但是目前市面上很難買到8751芯片,通常都是89C51或89S51,所以該引腳的第二功能可以不必了解RST(9腳):復位引腳對于微機系統(tǒng)都是必不可少的,該引腳可以保證程

30、序跑飛后重新開始執(zhí)行程序。對51單片機復位而言,高電平有效,只要在該引腳上輸入兩個機器周期以上的高電平,就可完成復位操作。 (29腳):訪問外部程序存儲器選通信號,低電平有效。(不必了解)引腳為高電平時,CPU訪問內部ROM,但當PC指針超過0FFFH時(4K),自動轉向執(zhí)行外部ROM,引腳為低電平,則訪問外部ROM。:訪問內部或外部ROM選擇信號四個8位雙向I/O端口(P0、P1、P2、P3);每一條I/O線都能獨立地作輸入或輸出。P0口(3239)低8位地址/數(shù)據(jù)線復用或I/O口。P1口(18) 常用的I/O口。P2口(2128)常用I/O口或高8位地址線。P3口(1017)常用I/O口,

31、每個引腳還具有第二功能I/O口引腳(32個引腳)P3口第二功能2.3 從引腳使用二看單片機單片機最小系統(tǒng)的必備條件1、電源2、EA引腳3、晶體振蕩電路4、復位電路2.3.1 單片機最小系統(tǒng)的實現(xiàn)單片機的定時控制功能是由片內的時鐘電路和定時電路來完成的, 而片內的時鐘產生有兩種方式: 一種是內部時鐘方式; 一種是外部時鐘方式片內振蕩器及時鐘信號的產生 采用內部時鐘方式時, 片內的高增益反相放大器通過XTAL1、 XTAL2外接作為反饋元件的片外晶體振蕩器(呈感性)與電容組成的并聯(lián)諧振回路構成一個自激振蕩器, 向內部時鐘電路提供振蕩時鐘。 振蕩器的頻率主要取決于晶體的振蕩頻率, 一般晶體可在1.2

32、12 MHz之間任選, 電容C1、 C2可在530 pF之間選擇, 電容的大小對振蕩頻率有微小的影響, 可起頻率微調作用。復位電路 通過某種方式, 使單片機內各寄存器的值變?yōu)槌跏紶顟B(tài)的操作稱為復位。 復位是單片機的初始化操作,其主要功能是把PC指針初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。 如何進行復位呢?只要在單片機的RST引腳上給出2個機器周期的高電平就可以完成復位操作(一般復位正脈沖寬度大于10 ms)。復位分為上電復位和外部復位兩種方式。(a) 上電復位電路; (b) 上電/外部復位電路 單片機最小系統(tǒng) 計算機在執(zhí)行指令時, 通常將一條指令分解為若干基本的微操作, 這些

33、微操作所對應的脈沖信號在時間上的先后次序稱為計算機的時序。 為便于理解時序, 先介紹幾個常用名詞振蕩周期:振蕩周期指為單片機提供定時信號的振蕩源的周期或外部輸入時鐘的周期。時鐘周期(狀態(tài)周期): 2個振蕩周期為1個狀態(tài)周期,用S表示。它分為P1節(jié)拍和P2節(jié)拍,通常在P1節(jié)拍完成算術邏輯操作,在P2節(jié)拍完成內部寄存器之間的傳送操作。2.3.2 時鐘信號機器周期:一個機器周期是指CPU訪問存儲器一次所需要的時間。MCS51的一個機器周期包括12個振蕩周期,分成6個狀態(tài):S1S6,每個狀態(tài)又分為兩拍,稱為P1和P2,因此一個機器周期中的12個振蕩周期表示為S1P1、S1P2S6P1、S6P2指令周期

34、:指令周期即執(zhí)行一條指令所占用的全部時間,通常為14個機器周期例如: 外接晶振為12 MHz時, MCS51單片機的4個時間周期的具體值為: 振蕩周期=1/12 s; 狀態(tài)周期=1/6 s; 機器周期=1 s; 指令周期=14 s2.3.3 復位狀態(tài)MCS51單片機復位后, 程序計數(shù)器PC和特殊功能寄存器復位的狀態(tài)如下表。 復位不影響片內RAM存放的內容, 而ALE、 在復位期間將輸出高電平 PC=0000H 表示復位后程序的入口地址為0000H; PSW=00H, 其中RS1(PSW.4)=0, RS0(PSW.3)=0, 表示復位后單片機選擇工作寄存器0組; SP=07H 表示復位后堆棧在

35、片內RAM的08H單元處建立; P0口P3口端口電平為全1狀態(tài);定時器/計數(shù)器、 串行口、 中斷系統(tǒng)等特殊功能寄存器復位后的狀態(tài)對各功能部件工作狀態(tài)的影響, 將在后續(xù)有關章節(jié)介紹2.4 從內部結構三看51單片機8051內部集成了一臺微型計算機的各個部分。其中主要有CPU、存儲器(4KB ROM、128B RAM)、四個8位可編程I/O、定時/計數(shù)器、串行口等。很多工作寄存器及特殊功能寄存器(SFR),各部分通過內部總線相連。單片機結構框圖 頻率基準源 計數(shù)器 內部總線 中斷 中斷 控制 并行I/O口 串行輸入/輸出 8051振蕩器及定時電路4K/8K字節(jié)程序存儲器ROM128/256字節(jié)數(shù)據(jù)存

36、儲器RAM2個16位定時器/計數(shù)器8051CPU64K字節(jié)總線擴展控制可編程I/O口48位可編程串行口2.4.1 中央處理器CPU 中央處理器是單片機內部的核心部件, 它決定了單片機的主要功能特性。 它由運算部件和控制部件兩大部分組成 運算部件以一個可進行8位算術運算和邏輯運算的單元ALU為核心, 加上8位累加器A、 寄存器B、 暫存器TMP1和TMP2、 程序狀態(tài)寄存器PSW及專門用于位操作的布爾處理機組成的,它能實現(xiàn)數(shù)據(jù)的算術邏輯運算, 位變量處理和數(shù)據(jù)傳送操作。 1 運算部件ALU:可對4位、8位和16位數(shù)據(jù)進行操作。不僅能完成加(帶進位加)、 減(帶借位減)、 乘、 除、 加1、 減1

37、及BCD加法的十進制調整等算術運算,還能進行邏輯“與”、 “或”、 “異或”、 求補、 清零等邏輯運算, 并具有數(shù)據(jù)傳送, 程序轉移等功能算術邏輯單元ALUACC簡稱累加器A, 為一個8位寄存器, 它是CPU中使用最頻繁的寄存器。 進入ALU作算術和邏輯運算的操作數(shù)多來自于A, 運算結果也常送回A保存。累加器ACC程序狀態(tài)字寄存器PSW(8位)是一個標志寄存器, 它保存指令執(zhí)行結果的特征信息, 以供程序查詢和判別。寄存器B8位寄存器,寄存器B是為ALU進行乘除法設置的,在進行乘除運算時,B寄存器用來存放一個操作數(shù),也用來存放運算后的一部分結果,若不作乘除運算,則作為通用寄存器使用程序狀態(tài)字CY

38、(PSW.7)進位標志位。 AC(PSW.6)輔助進位(或稱半進位)標志。 F0(PSW.5)由用戶定義的標志位。 RS1(PSW.4)、 RS0(PSW.3)工作寄存器組選擇位。 OV(PSW.2)溢出標志位。 由硬件置位或清零PSW.1未定義位。 P(PSW.0)奇偶標志位。 POVRS0RS1F0ACCYPSW.7PSW.0程序狀態(tài)字格式及含義 布爾處理(即位處理)是MCS51單片機ALU所具有的一種功能。 單片機指令系統(tǒng)中的布爾指令集(17條位操作指令), 存儲器中的位地址空間, 以及借用程序狀態(tài)標志寄存器PSW中的進位標志CY作為位操作“累加器”, 構成了單片機內的布爾處理機。布爾處

39、理機 2 控制部件控制部件是單片機的神經中樞,它包括程序計數(shù)器PC、指令寄存器IR、指令譯碼器ID、振蕩和定時電路等部件。程序計數(shù)器PC:由兩個8位的計數(shù)器PCH和PCL組成,共16位,PC實際上是程序的字節(jié)地址計數(shù)器,PC中的內容可對64KB的ROM(程序存儲器)直接尋址,也可對片外RAM尋址。指令寄存器IR、指令譯碼器ID僅限于CPU對其操作,用戶沒有辦法編程改變這些寄存器的值。2.4.2 51單片機存儲器及存儲空間MCS51單片機存儲器從物理結構上可分為: 片內、 片外程序存儲器(8031和8032沒有片內程序存儲器)與片內、 片外數(shù)據(jù)存儲器4個部分; 從尋址空間分布可分為: 程序存儲器

40、、 內部數(shù)據(jù)存儲器和外部數(shù)據(jù)存儲器3大部分; 從功能上可分為: 程序存儲器、 內部數(shù)據(jù)存儲器、 特殊功能寄存器、 位地址空間和外部數(shù)據(jù)存儲器5大部分MCS51系列單片機存儲器包括片內ROM(或EPROM)和RAM外, 另外還有128個字節(jié)的RAM區(qū)作為特殊功能寄存器(SFR)區(qū)。 片內、 片外程序存儲器和數(shù)據(jù)存儲器各自總容量為64 KB。2.4.3 程序存儲器1、程序存儲器的編址 計算機的工作是按照事先編制好的程序一條條順序執(zhí)行的, 程序存儲器就是用來存放這些已編好的程序和表格常數(shù), 它由只讀存儲器ROM或EPROM組成。 2. 程序運行的入口地址 實際應用時, 程序存儲器的容量由用戶根據(jù)需要

41、擴展, 而程序地址空間原則上也可由用戶任意安排。 但程序最初運行的入口地址, MCS51單片機是固定的, 用戶不能更改。 程序存儲器中有復位和中斷源共7個固定的入口地址見下表MCS51單片機復位和 中斷入口地址 2.4.4 內部數(shù)據(jù)存儲器MCS51系列單片機的內部數(shù)據(jù)存儲器由讀寫存儲器RAM組成, 用于存儲數(shù)據(jù)。 它由RAM塊和特殊功能寄存器(SFR)塊組成, 其結構如圖所示。 內部RAM塊的00H1FH區(qū), 共分4個組, 每組有8個工作寄存器R0R7, 共32個內部RAM單元。由PSW中的2位RS1、RS0來決定選哪一組為當前工作寄存器: 1 工作寄存器區(qū)(00H1FH)注:工作寄存器共有4

42、組,通過程序狀態(tài)字PSW中的PSW.3(RS0)和PSW.4(RS1)兩位來選擇哪1組寄存器工作。單片機上電復位后,RS1=RS0=0,CPU自動選擇第0組為當前工作寄存器組。根據(jù)需要,可利用傳送類指令對PSW字節(jié)操作或用位操作指令改變RS1和RS0的狀態(tài),以切換當前工作寄存器組。用戶通過軟件編程修改PSW中RS0和RS1兩位的狀態(tài),就可任選一個工作寄存器工作,這個特點使MCS-51單片機具有快速現(xiàn)場保護功能,對于提高程序的效率和響應中斷的速度是很有利的。若程序中并不需要4個工作寄存器組,那么剩下的工作寄存器組所對應的單元也可以作為一般的數(shù)據(jù)緩沖區(qū)使用 2 位尋址區(qū)(20H2FH) 20H2F

43、H單元為位尋址區(qū), 這16個單元(共計128位)的每1位都有一個8位表示的位地址, 位地址范圍為00H7FH3 數(shù)據(jù)緩沖區(qū) 30H7FH30H7FH是數(shù)據(jù)緩沖區(qū),也即用戶RAM區(qū),共80個單元。用戶變量的定義都是在該緩沖區(qū)內。數(shù)據(jù)緩沖區(qū)主要為用戶進行字節(jié)操作指令時提供字節(jié)變量定義。 在程序實際運行中, 往往需要一個后進先出的RAM區(qū), 在子程序調用、 中斷服務處理等場合用以保護CPU的現(xiàn)場, 這種后進先出的緩沖區(qū)稱為堆棧。 MCS51單片機堆棧區(qū)不是固定的, 原則上可設在內部RAM的任意區(qū)域內, 但為了避開工作寄存器區(qū)和位尋址區(qū), 一般設在60H以后的范圍內, 棧頂?shù)奈恢糜蓪iT設置的堆棧指針寄

44、存器SP(8位)指出。4 堆棧與堆棧指針MCS51單片機在使用堆棧之前,先給SP賦值,以規(guī)定堆棧的起始地址,稱為棧底。當數(shù)據(jù)壓入堆棧后,SP自動加1,即RAM地址單元加1,以指出當前堆棧位置,8051的這種堆棧結構屬向上生長型, 如下圖注:用戶編程只需要規(guī)定棧底地址后,不對堆棧操作,堆棧操作由編譯器完成。2.4.5 特殊功能寄存器(SFR)特殊功能寄存器SFR, 又稱為專用寄存器。 它專用于控制、 管理單片機內算術邏輯部件、 并行I/O口鎖存器、 串行口數(shù)據(jù)緩沖器、 定時器/計數(shù)器、 中斷系統(tǒng)等功能模塊的工作, SFR的地址空間為80HFFH先介紹部分特殊功能寄存器,其他在以后課程中介紹1、累

45、加器ACC(E0H)2、寄存器B(F0H)3、程序狀態(tài)寄存器PSW(D0H)4、堆棧與堆棧指針5、數(shù)據(jù)指針寄存器DPTR注:PC也為雙字節(jié)寄存器,但是不在80H FFH范圍內數(shù)據(jù)指針寄存器DPTR 16位寄存器,包括兩個8位寄存器DPL和DPH,地址分別為82H和83H。DPTR既可以作為一個16位寄存器來處理,也可以作為兩個獨立的8位寄存器來使用。 DPTR主要用于訪問外部RAM時作為地址指針,也可訪問ROM中的表格常數(shù)。注:單片機中唯一的16位寄存器注:PC也為16位寄存器,但存在控制部件中,不屬于特殊功能寄存器2.5 并行輸入/輸出接口 1. P0口結構 P0口作為低八位地址/數(shù)據(jù)分時復

46、用口, 也可作為通用I/O接口。P0口作為通用I/O使用時,必須外接上拉電阻 2、P1口結構 P1只有一種功能, 即通用輸入輸出I/O接口3. P2口結構 P2口作為高八位地址線, 也可作為通用I/O接口。4、P3口結構P3除作為通用輸入輸出I/O接口,還擁有第二功能,大多數(shù)情況下P3口作為第二功能。負載能力全部針對端口作為輸出而言,P0作為輸出時可驅動8個LS型TTL負載P1、P2、P3作為輸出時可驅動4個LS型TTL負載端口負載能力和接口要求第4章 匯編語言程序設計4.1 偽指令 4.1.1 為什么要使用偽指令 4.1.2 MCS51單片機的偽指令4.2 匯編語言程序設計 4.2.1 順序

47、結構 4.2.2 分支程序 4.2.3 循環(huán)結構 4.2.4 子程序設計和子程序調用 4.1.1 為什么要使用偽指令匯編源程序是由一條條匯編語句構成,匯編語句是匯編源程序的基本元素。前一章詳細介紹了MCS51單片機的111條匯編語句,但是當需要利用這些匯編語句進行編程時,會發(fā)現(xiàn)這些問題: 存儲空間分配問題:在利用高級語言(如C語言)編程時,用戶無需考慮存儲空間的分配,因為操作系統(tǒng)和軟件編譯器幫助用戶解決了這些問題,使得存儲空間分配對用戶來說是透明的,但是對MCS51單片機而言,存儲空間分配是用戶必須解決的一個問題,即存儲空間分配對用戶不再是透明的。但是在指令系統(tǒng)一章卻沒有介紹任何指令能夠實現(xiàn)對

48、存儲空間的分配。 變量和常量的定義:在高級語言(C語言)編程中,首先介紹了常量和變量的定義(Define、int,char等),但是在指令系統(tǒng)一章卻沒有介紹任何指令能夠實現(xiàn)對常量和變量的定義。 數(shù)組的定義:在高級語言(C語言)編程中,可以定義數(shù)組,數(shù)組在編程中被大量使用,但是在指令系統(tǒng)一章卻沒有介紹任何指令能夠實現(xiàn)對數(shù)組的定義。綜上所述,僅靠MCS51單片機的111條匯編指令還是無法解決編程中遇到的上述問題,所以MCS51單片機提供了偽指令來解決上述問題。為什么要使用偽指令(續(xù))4.1.2 MCS51單片機的偽指令偽指令不是真正的指令,無對應的機器碼,在匯編時不產生可供CPU直接執(zhí)行的機器碼(

49、即目標程序),只是用來對匯編過程進行某種控制。例如規(guī)定匯編生成的目標程序在程序存儲器中的存放區(qū)域,給源程序中的符號或標號賦值以及指示匯編的結束等。MCS51單片機常用偽指令有下面幾種。1 ORG(匯編起始命令) ORG偽指令稱為匯編起始命令,常用于匯編語言源程序或數(shù)據(jù)塊開頭。ORG偽指令的格式:【標號:】 ORG 16位地址或標號 在ORG偽指令格式中,標號段為任選項,通常省略。ORG偽指令的功能是將該偽指令后的程序機器碼按照ORG偽指令提供的16位地址或標號存入相應的程序存儲器中。即規(guī)定目標程序在程序存儲器中存放的起始地址【注】在用戶程序中,ORG偽指令僅需要用于復位和中斷服務入口地址、主程

50、序入口地址設置,其他子程序不必使用ORG偽指令。 2 END(匯編結束命令)END偽指令的格式: 【標號:】 END在END偽指令格式中,標號段為任選項,通常省略。END偽指令的功能是通知匯編程序結束匯編。在END之后所有的匯編指令均不予以匯編成機器碼?!咀ⅰ縀ND偽指令必須放在所有用戶程序的后面,不是放在主程序的后面。3 EQU(賦值命令) EQU偽指令的格式: 字符名稱 EQU 數(shù)據(jù)或匯編符號在EQU偽指令的格式中,注意字符名稱和標號的區(qū)別(標號后面有冒號,字符名稱后沒有冒號),經匯編編譯后,字符名稱和數(shù)據(jù)或匯編符號完全等價,在用戶程序中,字符名稱可以代替數(shù)據(jù)或匯編符號,在程序中字符名稱可

51、以作為數(shù)據(jù)(常量)、地址(變量)、位地址(一般情況下不使用EQU定義位變量,而是采用BIT定義位變量)。其中常量和變量可以是8位的,也可以是16位的。EQU偽指令的功能是給常量賦值或給變量賦地址。在程序編寫中,通常會遇到兩種類型的數(shù)據(jù): 常量、變量。利用EQU偽指令可以將字符名稱設置為常量或變量,但是不管用戶希望字符名稱設置為常量或變量,EQU偽指令格式都是相同的(C語言中采用Define和Int兩種不同的方式),那么如何區(qū)分此時字符名稱是常量還是變量呢?現(xiàn)舉例說明。例:A10 EQU 30 .Main: MOV A, #A10 ;將A10作為常量使用MOV A, A10 ;將A10作為變量使

52、用,A10表示片內30H單元地址MOV A, 30H ;此指令和上面一條指令等效4 DATA(數(shù)據(jù)地址賦值命令) DATA偽指令的格式為: 字符名稱 DATA 表達式DATA偽指令的功能與EQU類似,這兩條偽指令的主要區(qū)別在于EQU定義的字符名稱必須先定義后使用,而DATA定義的字符名可以先使用后定義。 【注】根據(jù)C語言和其他編程語言的思維定勢,對變量都是采用“先定義、后使用”原則,所以DATA偽指令很少被使用,都是采用EQU偽指令來定義變量和常量。 5 DB(定義字節(jié)命令)DB偽指令的格式為: 【標號:】 DB 項或項表在DB偽指令的格式中,標號為任選項,項或項表可以是一個8位二進制數(shù)據(jù)、用

53、逗號分開的一串8位二進制數(shù)據(jù)、括在單引號中的ASCII字符串。DB偽指令的功能是將匯編程序從標號對應的程序存儲器地址(若沒有標號,則從該DB偽指令的匯編地址)開始,存入DB偽指令后的項或項表數(shù)據(jù),類似于C語言中數(shù)組的定義。例:TABLE: DB 0A3H ;項或項表為一個8位二進制數(shù)據(jù) DB 26H, 03H ;項或項表為用逗號分開的一串8位二進制數(shù)據(jù) DB ABC ;項或項表為括在單引號中的ASCII字符串 經匯編后從TABLE對應的程序存儲器地址開始依次存放 A3H,26H,03H,41H,42H,43H,其中41H,42H,43H分別為A,B,C的ASCII碼。【注】實際應用中當一串8位

54、二進制數(shù)據(jù)超過一行后,下一行必須以DB開始,對ASCII字符串可以采用abc或a, b ,c6 DW(定義字命令)DW偽指令的格式為: 【標號:】 DW 16位數(shù)據(jù)項或項表DW偽指令的功能是把DW后的16位數(shù)據(jù)項或項表從當前地址連續(xù)存放。16位數(shù)據(jù)項或項表采用高8位在前,低8位后在后原則存放。 例:TABLE:DW 1234H,23H,10H假設經匯編后,TABLE對應的程序存儲器地址單元為1000H,那么從1000H單元開始依次存放如下:(1000H)=12H(1001H)=34H(1002H)=00H(1003H)=23H(1004H)=00H (1005H)=10H采用DW偽指令,兩個逗

55、號之間的數(shù)據(jù)表示16位二進制數(shù),即23H是表示0023H,所以(1002H)=00H,而不是(1002H)=23H 【注】因為MCS51單片機為8位單片機,所以DB指令經常被使用,而DW指令并不常用,常用于帶字符的液晶顯示程序。與DB偽指令一樣,當16位數(shù)據(jù)項或項表超過一行后,下一行同樣以DW開始。7 DS 定義存儲空間命令DS偽指令的格式為: 【標號:】 DS 表達式DS偽指令的功能是指在匯編時,從指定地址開始保留DS之后表達式的值所規(guī)定的存儲單元以備后用。 例: TABLE: DS 08H DB 30H,8AH假設經匯編后,TABLE對應的程序存儲器地址單元為1000H,從1000H保留8

56、個單元,然后從1008H按DB命令給內存賦值,即(1008H)=30H,(1009H)=8AH【注】在單片機編程中,極少需要預先開辟存儲空間,所以DS偽指令很少被使用8 BIT ( 位地址符號命令)BIT偽指令的格式為: 字符名 BIT 位地址BIT偽指令的功能是把BIT后的位地址值賦給字符名。其中字符名不是標號,其后沒有冒號。 例如: LED1 BIT P1.0 FLAG BIT 02H匯編后,P1口第0位的位地址90H就賦給了LED1,而位尋址空間02H定義為FLAG?!咀ⅰ颗cEQU指令功能類似,兩種區(qū)別在于EQU偽指令是對字節(jié)常量或變量的定義,BIT偽指令是對位變量的定義。注意BIT偽指

57、令不能定義位常量,因為MCS51單片機沒有提供位常量操作指令,只提供位變量操作指令。 4.2 匯編語言程序設計 4.2.1 順序結構 4.2.2 分支程序 4.2.3 循環(huán)結構 4.2.4 子程序設計和子程序調用4.2.1 順序程序順序結構是最簡單的一種程序結構,這種程序中即無分支,也無循環(huán),也不調用子程序,從第一條指令開始按順序一條一條執(zhí)行指令,直到結束。典型的順序結構程序流程如圖4.1所示。 圖4.1 順序結構程序流程圖 例4-1:試編制單字節(jié)的乘法程序,假設被乘數(shù)放在R0,乘數(shù)放在R1中,結果高8位放在30H,低8位放在31H?!揪幊趟悸贰繂纹瑱C提供了乘法指令(MUL AB),該指令要求

58、乘數(shù)和被乘數(shù)必須存放在累加器A和寄存器B中,同時兩數(shù)相乘的結果也存放在累加器A和寄存器B中。根據(jù)題目要求和單片機乘法指令的定義,程序應包括以下部分: 首先必須將乘數(shù)(R0)和被乘數(shù)(R1)分別取出存放到累加器A和寄存器B中, 利用乘法指令將存放在A和B中的數(shù)相乘 相乘后的結果,按題意要求進行存儲。 利用SJMP $ 指令實現(xiàn)程序的死等待,即單片機執(zhí)行該語句后,PC指針將不再改變,一直執(zhí)行該語句,主要為用戶在仿真環(huán)境下調試程序方便。 死等待指令常用下面兩種方式:SJMP $ 和 HERE: LJMP HERE 【例4-1源程序】ORG 0000H LJMP MAINORG 0030HMAIN:

59、MOV A,R0 MOV B,R1 MUL AB MOV 31H,A MOV 30H,B SJMP $ 例4-2:將單字節(jié)十六進制無符號數(shù)轉換成非壓縮的BCD碼,設被轉換數(shù)放在R0,BCD碼百位放在30H,十位放在31H,個位放在32H中。【編程思路】 非壓縮的BCD碼是指一個字節(jié)中低四位存放一個BCD碼,高四位為零,壓縮BCD碼是指一個字節(jié)存放兩個BCD碼,即高四位和低四位分別存放一個BCD碼。 單字節(jié)十六進制無符號數(shù)最大為255,即其BCD碼需要三位來表示,即百位、十位、個位。 本題編程的關鍵在于需要將單字節(jié)十六進制無符號數(shù)的百位、十位、個位依次求出,這里采用將單字節(jié)十六進制除以100得到

60、百位、余數(shù)再除以10得到十位,個位即是除以10后的余數(shù)。 按照題意將百位、十位、個位依次存儲在題目要求的存儲單元?!纠?-2源程序】 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV B,#64H MOV A,R0 DIV AB ; 將單字節(jié)十六進制除以100 MOV 30H,A XCH A,B MOV B,#0AH ; 將單字節(jié)十六進制除以10 DIV AB MOV 31H,A MOV 32H,B SJMP $例4-3:試編制雙字加法程序,設被加數(shù)的高8位放在30H中,低8位放在31H中,加數(shù)的高8位放在32H,低8位放在33H中。加法結果的高8位放在34H中,低

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論