單片機原理及應用_第1頁
單片機原理及應用_第2頁
單片機原理及應用_第3頁
單片機原理及應用_第4頁
單片機原理及應用_第5頁
已閱讀5頁,還剩402頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、單片機原理及應用課程特點學習方法知識點既分散又連貫,組成結構和指令系統是根底;與電子技術尤其是數字電子技術關系密切;預習、復習;多動手硬件、軟件實驗;多看參考書(包括利用網上資料);其它上課、作業、答疑。單片機的概念單片機開展歷史單片機的應用特點單片機的應用領域典型單片機產品開展趨勢開發條件開發過程隨著微電子技術的不斷開展,微處理器芯片的集成度越來越高,已經可以在一塊芯片上同時集成CPU、存儲器、定時器/計數器、并行和串行接口、甚至A/D轉換器等。人們把這種超大規模集成電路芯片稱作“微控制器(MICROCONTROLLER),簡稱為單片機。單片機的出現,引起了儀器儀表結構的根本性變革,以單片機

2、為主體取代傳統儀器儀表的常規電子線路,可以容易地將計算技術與測量控制技術結合在一起,組成新一代的所謂“智能化測量控制儀表以及其他各種智能化儀器設備。 單片機的概念單片機的開展歷史初級階段19741976FAIRCHILD兩片集成芯片集成工藝限制低性能階段19761978 INTEL MCS-48 高性能階段19781982 INTEL MCS51更高性能階段1983) 多種機型并行開展單片機的應用特點 軟硬件結合、多學科交叉 應用現場環境惡劣電磁干擾、電源波動、 沖擊振動、上下溫濕度等 應用領域廣泛且意義重大硬件軟化-微控 制技術在工業自動化方面過程控制、數據采集和測控 技術、機器人技術、機械

3、電子計算機一體化技術儀器儀表方面測試儀表和醫療儀器-數字化、智能 化、高精度、小體積、低本錢、便于增加顯示報警和自診斷功能在家用電器方面冰箱、洗衣機、空調機、微波爐、電視機、音像設備等信息和通信產品方面計算機的鍵盤、打印機、磁 盤驅動器; 機、復印機、 機、考勤機在軍事方面飛機、大炮、坦克、軍艦、導彈、火箭、雷達等單片機的應用領域典型單片機產品器件廠家美國:Intel、 Motorola、 Microchip 、Atmel 荷蘭: Philips 德國:Siemens日本:Nec中國臺灣:Winbond、SST典型單片機產品根據型號可確定單片機的存儲器類型無ROM型 :80C31ROM型: 8

4、0C51EPROM型:87C51EEPROM型:89C51單片機的開展趨勢性能不斷提高CPU功能增強:速度、精度內部資源增多:A/D、D/A、EEPROM單片機的多品種:超微型化、低電壓、低功耗CMOS工藝、空閑等待和掉電停機方式單片機系統開發條件單片機芯片開發工具資料手冊 單片機系統的開發過程 通常開發一個單片機系統可按以下幾個步驟進行。(1) 明確系統設計任務,完成單片機及其外圍電路的選型工作。(2) 設計系統原理圖和PCB板,經仔細檢查PCB板后送工廠制作。 (3) 完成器件的安裝焊接。(4)根據硬件設計和系統要求編寫應用程序。(5)在線調試軟硬件。(6) 使用編程器燒寫單片機應用程序,

5、獨立運行單片機系統。 8051單片機根本結構 8051單片機的特點 8051單片機可分為無ROM型和ROM型兩種無ROM型的芯片,必須外接EPROM才能應用典型芯片為8031ROM型芯片又分為EPROM型典型芯片為8751、FLASH型典型芯片為89C51、掩膜ROM型典型芯片為8051 、一次性可編程ROMOne Time Programming,簡稱OTP的芯片典型芯片為97C51。 8051單片機的根本組成時鐘電路SFR和RAM ROMCPU定時/計數器并行端口中斷系統串行端口系 統 總 線時鐘源T0 T1P0 P1 P2 P3TXD RXD INT0 INT11一個8位微處理器CPU。

6、 2片內數據存儲器RAM和特殊功能存放器SFR。 3片內程序存儲器ROM。 4兩個定時/計數器T0、T1,可用作定時器,也可用以 對外部脈沖進行計 數。 5四個8位可編程的并行I/O端口,每個端口既可作輸 入,也可作輸出。 6一個串行端口,用于數據的串行通信。 7中斷控制系統。 8內部時鐘電路。 一個8051單片機包含以下部件8051單片機內部結構通道0驅動器通道2驅動器RAM地址鎖存器RAM通道0鎖存器通道2鎖存器ROM/EPROMB寄存器程序地址寄存器緩沖器PC遞增器程序計數器PC數據指針DPTRVCCGNDP1.0P1.7堆棧指針SPACCTMP2PSW通道3鎖存器通道1鎖存器通道1驅動

7、器通道3驅動器TMP1SCONTMODPCONTCONTL0TH1TH0TL1IESBUF(TX/RX)IP中斷、串行口和定時器邏輯振蕩器P3.0P3.7RSTEAALEPSENXTAL2XTAL1ALU(+5V)指令寄存器定時和控制邏輯指令譯碼器CPU即中央處理器,是單片機的核心部件,它完成各種運算和控制操作,CPU由運算器和控制器兩局部組成。1運算器 運算器以算術邏輯單元ALU為核心,加上累加器ACC、暫存存放器TMP和程序狀態字存放器PSW等所組成。ALU主要用于完成二進制數據的算術和邏輯運算,并通過對運算結果的判斷影響程序狀態字存放器PSW中有關位的狀態。 D7 D0PSW:8051單

8、片機的CPUCYACF0RS1RS0OVPPSW中各位的意義如下:CY:進位標志。在進行加法或減法運算時,假設運算結果的最高位有進位或借位,CY=1,否那么CY=0,在執行位操作指令時,CY作為位累加器。AC:輔助進位標志。在進行加法或減法運算時,假設低半字節向高半字節有進位或借位, AC=1,否那么AC=0,AC還作為BCD碼運算調整時的判別位。F0:用戶標志。RS1和RS0:工作存放器組選擇,如下表所示。RS1RS0工作寄存器組片內RAM地址00第0組 00H07H 01第1組08H0FH 10第2組10H17H 11第3組18H1FH OV:溢出標志。當兩個帶符號的單字節數進行運算,結果

9、超出-128+127的范圍時,OV=1,表示有溢出,否那么OV=0表示無溢出。PSW中的D1位為保存位,對于8051來說沒有意義,對于8052來說為用戶標志,與F0相同。P:奇偶校驗標志。每條指令指行完畢后,都按照累加器A中“1的個數來決定P值,當“1的個數為奇數時,P=1,否那么P=0。 2控制器 控制器包括程序計數器PC、指令存放器、指令譯碼器、數據指針DPTR、堆棧指針SP、緩沖器以及定時與控制電路等。控制電路完成指揮控制工作,協調單片機各局部正常工作。程序計數器PC:當一條指令按PC所指向的地址從程序存儲器中取出之后,PC的值會自動增量,即指向下一條指令。堆棧指針SP:用來指示堆棧的起

10、始地址。80C51單片機的堆棧位于片內RAM中,而且屬于“上長型堆棧,復位后SP被初始化為07H,使得堆棧實際上由08H單元開始。指令譯碼器:當指令送入指令譯碼器后,由譯碼器對該指令進行譯碼,CPU根據譯碼器輸出的電平信號使定時控制電路產生執行該指令所需要的各種控制信號。數據指針存放器DRTR:它是一個16位存放器,由高位字節DPH和低位字節DPL組成,用來存放16位數據存儲器的地址,以便對片外64kB的數據RAM區進行讀寫操作。P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST/VPDRXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3T0/P3.4T1/

11、P3.5WR/P3.6RD/P3.7XTAL2XTAL1VSS12345678910111213141516171819208031805187514039383736353433323130292827262521222324VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/VppALE/PROGPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0 8051單片機引腳描述 電源引腳Vcc和Vss Vcc:電源端,接5V。 Vss:接地端。 時鐘電路引腳XTAL1和XTAL2 XTAL1:接外部晶振和微調電容的一端,在片內它是 振蕩器倒相放大器的輸

12、入,假設使用外部TTL時鐘時,該 引腳必須接地。 XTAL2:接外部晶振和微調電容的另一端,在片內它 是振蕩器倒相放大器的輸出,假設使用外部TTL時鐘時, 該引腳為外部時鐘的輸入端。 地址鎖存允許ALE 系統擴展時,ALE用于控制地址鎖存器鎖存P0口輸出的 低8位地址,從而實現數據與低位地址的復用。 外部程序存儲器讀選通信號PSEN PSEN是外部程序存儲器的讀選通信號,低電平有效。 程序存儲器地址允許輸入端EA /VPP 當EA為高電平時,CPU執行片內程序存儲器指令,但當 PC中的值超過0FFFH時,將自動轉向執行片外程序存儲 器指令。當EA為低電平時,CPU只執行片外程序存儲器 指令。

13、復位信號RST 該信號高電平有效,在輸入端保持兩個機器周期的高電 平后,就可以完成復位操作。 輸入/輸出端口引腳P0,P1,P2和P3 P0口P0.0P0.7:該端口為漏極開路的8位準雙向 口,它為外部低8位地址線和8位數據線復用端口, 驅動能力為8個LSTTL負載。 P1口P1.0P1.7:它是一個內部帶上拉電阻的8位 準雙向I/O口,P1口的驅動能力為4個LSTTL負載。 P2口P2.0P2.7:它為一個內部帶上拉電阻的8位 準雙向I/O口,P2口的驅動能力也為4個LSTTL負載。 在訪問外部程序存儲器時,作為高8位地址線。 P3口P3.0P3.7:為內部帶上拉電阻的8位準雙向 I/O口,

14、P3口除了作為一般的I/O口使用之外,每個引 腳都具有第二功能。特殊功能寄存器通用RAM區位尋址區00H1FH20H2FH30H7FH80HFFH80H88H90H98HA0HA8HB0HB8HD0HE0HF0H特殊功能存放器地址外部ROM內部ROM(EA=1)外部ROM(EA=0)0000H0000H0FFFH0FFFH1000HFFFFH外 部RAM(I/O口地址)0000HFFFFH內部數據存儲器外部數據存儲器程序存儲器工作存放器區8051單片機的存儲器配置 片內數據存儲器RAM 。 片外數據存儲器RAM 。 程序存儲器ROM 。 程序存儲器ROM地址空間為64kB,片外數據存儲器RAM

15、也有64kB的尋址區,在地址上是與ROM重迭的。8051單片機通過不同信號來選通ROM或RAM。當從外部ROM中取指令時,采用選通信號PSEN,而從外部RAM中讀寫數據時那么采用讀RD和寫WR信號或來選通,因此不會因地址重迭而發生混亂。 8051在物理上有3個存儲器空間片內數據存儲器RAM 片內RAM有256個字節,其中00H7FH地址空間是直接尋址區,該區域內從00H1FH地址為工作存放器區,安排了4組工作存放器,每組都為R0R7,在某一時刻,CPU只能使用其中任意一組工作存放器,由程序狀態字PSW中RS0和RS1的狀態決定。 片內RAM的20H2FH地址單元為位尋址區,其中每個字節的每一位

16、都規定了位地址。每個地址單元除了可進行字節操作之外,還可進行位操作。 片內RAM的80HFFH地址空間是特殊功能存放器SFR區,對于51子系列在該區域內安排了21個特殊功能存放器,對于52子系列那么在該區域內安排了26個特殊功能寄器,同時擴展了128個字節的間接尋址片內RAM,地址也為80FFH,與SFR區地址重迭。 片內數據存儲器中的位地址特殊功能存放器地址及功能表 片外數據存儲器RAM 當片內RAM不能滿足數量上的要求時,可通過總線端口和其他I/O口擴展外部RAM,其最大容量可達64KB字節。 在片內數據存儲器中,數據區和擴展的I/O口是統一編址的,使用的指令也完全相同,因此,用戶在應用系

17、統設計時,必須合理地進行外部RAM和I/O端口的地址分配,并保證譯碼的唯一性。程序存儲器ROM 程序存儲器ROM包括片內ROM和片外ROM兩個局部。主要用來存放編好的用戶程序和表格常數,它以16位的程序計數器PC作為地址指針,尋址空間為64KB。當EA接高電平時,單片機從片內ROM的4kB字節存儲器區取指令,當指令地址超過0FFFH后,自動地轉向片外ROM取指令。當EA接低電平時,所有的取指操作均對片外程序存儲器進 行。8051單片機的CPU時序1 單片機的時鐘電路2 振蕩周期、時鐘周期、機器周期和指令周期3 單片機指令的取指和執行時序 單片機的時鐘電路單片機時鐘電路通常有兩種形式:1內部振蕩

18、方式:8051單片機片內有一個用于構成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。把放大器與作為反響元件的晶體振蕩器或陶瓷諧振器連接,就構成了內部自激振蕩器并產生振蕩時鐘脈沖。2外部振蕩方式:外部振蕩方式就是把外部已有的時鐘信號引入單片機內。 XTAL2XTAL1MCS-51C1C2CYSXTAL2XTAL1MCS-51+5VVSSTTL外部時鐘源內部振蕩方式 外部振蕩方式P1P2S1振蕩周期時鐘周期機器周期機器周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2

19、P2P2P2P28051單片機各種周期的相互關系 振蕩周期、時鐘周期、機器周期、指令周期P21振蕩周期:為單片機提供時鐘信號的振 蕩源的周期。2時鐘周期:振蕩源信號經二分頻后形成 的時鐘脈沖信號,為振蕩周期的2倍。 3機器周期:完成一個根本操作所需的時 間,通常為12個振蕩周期。4指令周期:指CPU執行一條指令所需要 的時間,一個指令周期通常含有14 個機器周期。 振蕩周期1/12s 時鐘周期1/6s 機器周期1s 指令周期14s 8051單片機外接晶振為12MHz時四個周期的具體值復位電路及復位狀態1復位電路 單片機復位電路包括片內、片外兩局部。外部復位電路就是為內部復位電路提供兩個機器周期

20、以上的高電平而設計的。8051單片機通常采用上電自動復位和按鍵手動復位兩種方式。單片機運行出錯或進入死循環時,可按復位鍵重新運行。 C1 22F RST R11K+5V+5V803180518751(a)上電復位電路(b)按鍵復位電路 C1 22F RSTR2200803180518751 R11K上電復位和按鍵復位電路特殊功能寄存器初始狀態特殊功能寄存器初始狀態ACC00HTMOD00HPC0000HTCON00HPSW00HTH000HSP07HTL000HDPL00HTH100HDPH00HTL100HP0P3FFHSBUF不定IP00000BSCON00HIE000000BPCON00

21、000B2復位狀態8051單片機的并行I/O口 8051單片機有4個雙向并行的8位I/O口P0P3。P0口為三態雙向口,可驅動8個TTL電路,P1、P2、P3口為準雙向口作為輸入時,需要先向口鎖存器寫入1,故稱為準雙向口,其負載能力為4個TTL電路。1P0口的結構VCCP0.X鎖存器讀鎖存器地址/數據控制D讀引腳寫鎖存器內部總線QQMUXT2P0.XT1CL2P1口的結構 VCC P1.X鎖存器讀鎖存器D讀引腳寫鎖存器內部總線QQTP1.X內部上拉電阻CL3P2口的結構VCCP2.X鎖存器讀鎖存器地址控制D讀引腳 寫鎖存器內部總線QQMUXTP2.X內部上拉電阻CL4P3口的結構VCCP3.X

22、鎖存器讀鎖存器第二輸出功能D讀引腳 寫鎖存器內部總線QQTP3.X內部上拉電阻第二輸入功能CLP3.2P3.3位線引腳第二功能P3.010RXD(串行輸入口)P3.111TXD(串行輸出口)12INT0(外部中斷0)13INT1(外部中斷1)P3.414T0(定時器0的計數輸入)P3.515T1(定時器1的計數輸入)16WR(外部數據存儲器寫脈沖)17RD(外部數據存儲器讀脈沖)P3.7 P3.6 P3口的第二功能1地址總線AB:地址總線寬度為16位,由P0口經地址鎖存器提供低8位地址A0 A7;P2口直接提供高8位地址A8A15。地址信號是由CPU發出的,故地址總線是單方向的。2數據總線DB

23、:數據總線寬度為8位,用于傳送數據和指令,由P0口提供。3控制總線CB:控制總線隨時掌握各種部件的狀態,并根據需要向有關部件發出命令,主要有PSEN、WR、 RD信號。8051單片機的片外總線結構8051與外部存儲器、I/O端口的連接8051單片機的指令系統指令和助記符 指令本身是一組二進制數代碼,為了便于記憶,將這些代碼用具有一定含義的指令助記符來表示,助記符一般采用英文單詞的縮寫 。例: 指令代碼 助記符 功能 740A MOV A,#0AH 將十六進制數0AH放 入累加器A中 指令的字節數 一條指令由操作碼和操作數組成。操作碼指明執行什么操作,例如數的傳送、加法、減法等。操作數那么表示這

24、條指令所完成的操作對象,即是對誰進行操作。操作數可以是一個數,或者是一個數所在的內存地址。指令由指令字節組成,不同的指令,指令的字節數不相同。有單字節指令、雙字節指令和三字節指令。 尋址方式1 存放器尋址2 直接尋址3 立即尋址4 存放器間接尋址5 變址尋址6 相對尋址7 位尋址存放器尋址 以通用存放器的內容為操作數的尋址方式。通用存放器為A、B 、DPTR以及R0R7 。 例: CLR A ;A0 INC DPTR ;DPTRDPTR+1 ADDR5,# 20H ;R5#20H+R5直接尋址 指令中直接給出操作數地址的尋址方式,能進行直接尋址的存儲空間有SFR存放器和內部數據RAM。 例:

25、MOVPSW,# 20H ;PSW#20H MOVA,30H ;A(30H)立即尋址 指令中直接給出操作數的尋址方式。立即操作數用前面加有#號的8位或16位數來表示。 例: MOVA,# 60H ;A#60H MOVDPTR,# 3400H;DPTR#3400H MOV30H,# 40H;30H單元#40H 存放器間接尋址 以存放器中內容為地址,以該地址中內容為操作數的尋址方式。間接尋址的存儲器空間包括內部數據RAM和外部數據RAM。能用于存放器間接尋址的存放器有R0,R1和DPTR。在存放器名稱前面加一個符號來表示存放器間接尋址。 例: MOV A , R0 ;A (R0) MOVX DPT

26、R,A ;外部RAM(DPTR)A 片內RAM30HR034HA30H34H MOV A ,R0 操作示意圖片外RAM2000HDPTR30HA2000H30HMOVX DPTR,A 操作示意圖5 變址尋址 變址尋址是以某個存放器的內容為根本地址,然后在這個基址上加以地址的偏移量,才是真正的操作數地址。 例: MOVC A, A+DPTR ;AA+DPTR MOVC A, A+PC ;AA+PC MOVC A, A+DPTR 操作示意圖程序存儲器02F1HDPTRA0302H1EH11HA執行前1EHA執行后+相對尋址 以當前程序計數器PC的內容為根底,加上指令給出的一字節補碼數偏移量形成新的

27、PC值的尋址方式。相對尋址用于修改PC值,主要用于實現程序的分支轉移。 例: SJMP 08H ;PCPC+2+08H SJMP 08H 操作示意圖程序存儲器SJMP200AH08H2000H+208H執行前PC2000H執行后PC7 位尋址 位尋址只能對有位地址的單元作位尋址操作。位尋址其實是一種直接尋址方式,不過其地址是位地址。 例: SETB 10H ;將10H位置1 MOV 32H,C ;32H進位位C CLR PSW.4 ;將RS1位清0指令分類說明1 數據傳送類指令2 算術運算類指令3 邏輯運算與循環類指令4 程序轉移類指令5 子程序調用及返回指令6 位操作指令數據傳送類指令 助記

28、符 說明 MOV、MOVX、MOVC 傳送操作 XCH、XCHD、SWAP 交換操作 PUSH、POP 堆棧操作 源操作數尋址方式: 立即尋址、直接尋址、存放器尋址、 存放器間接尋址、變址尋址。 目的操作數尋址方式: 直接尋址、存放器尋址、存放器間接尋址 除了目的操作數為ACC的指令影響奇偶標志P外,一般不影 響標志位。直接地址direct累加器A直接地址direct間接地址Ri寄存器Rn立即數#data寄存器DPTR8051單片機片內數據傳送圖1 以累加器為目的操作數的指令4條 MOV A,Rn MOV A,directMOV A,RiMOV A,#data 這組指令功能將源操作數指定內容送

29、到A中。 2 以存放器Rn為目的操作數的指令 3條 MOV Rn,A MOV Rn,direct MOV Rn,#data 這組指令功能是把源操作數指定的內容送入當前工作存放 器,源操作數不變。 3 以直接地址為目的操作數的指令5條MOV direct,AMOV direct,RnMOV direct1,direct2MOV direct,RiMOV direct,#data 這組指令功能是把源操作數指定的內容送入由直接地址指出的片內存儲單元。例: MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,R1MOV 0A0H,#34HMOV P2,#34H4 以間接地址為目

30、的操作數的指令3條MOV Ri,A MOV Ri,directMOV Ri,#data 功能:把源操作數指定的內容送入以R0或R1中內容為 地址的片內存儲單元。例:MOV R0,AMOV R1,20HMOV R0,#34H5 十六位數的傳遞指令1條MOV DPTR,#data168051是8位機,這是唯一的一條16位立即數傳遞指令。功能:將一個16位的立即數送入DPTR中去。其中高8位 送入DPH,低8位送入DPL。 例:MOV DPTR,#1234H執行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數,那么結果也一樣。 如下面兩條指令: MOV DPH,#

31、35H MOV DPL,#12H。 相當于執行了 MOV DPTR,#3512H。6 累加器A與片外RAM之間的數據傳遞類指令(4條) MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A說明: 1.在8051中,與外部RAM存儲器打交道的只可以是累加器A 。所有需要送入外部RAM的數據必需要通過A送去,而所有要讀入的外部RAM中的數據也必需通過A讀入。 在此我們可以看出內外部RAM的區別了,內部RAM間可以直接進行數據的傳遞,而外部那么不行。 比方,要將外部RAM中某一單元設為0100H單元的數據送入另一個單元設為0200H單元,也必須先將0100H單元中的

32、內容讀入A,然后再送到0200H單元中去。 2.要讀或寫外部RAM,必須要知道RAM的地址,采用DPTR時,地址被直接放在DPTR中的。采用RiR0或R1時,由于Ri只是8位的存放器,所以只提供低8位地址。高8位地址由P2口來提供。 3.使用時應先將要讀或寫的地址送入DPTR或Ri中,然后再用讀寫命令。 例:將外部RAM中100H單元中的內容送入外部RAM中200H單元中。MOV DPTR,#0100HMOVX A,DPTRMOV DPTR,#0200HMOVX DPTR,A7 讀程序存儲器指令2條 MOVC A,A+DPTR MOVC A,A+PC 本組指令是將ROM中的數送入A中。本組指令

33、也被稱為查表指 令,常用此指令來查一個已做好在ROM中的表格說明:查找到的結果被放在A中,因此,本條指令執行前后,A 中的值不一定相同。例:有一個數在R0中,要求用查表的方法確定它的平方值此 數的取值范圍是0-5MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR ORG 0100HDB 0,1,4,9,16,25 8 堆棧操作2條PUSH directPOP direct 第一條為壓入指令,將direct中的內容送入堆棧中,第二條為 彈出指令,將堆棧中的內容送回到direct中。例: MOV SP,#10H MOV 40H,#50H PUSH 40H POP 30H 執

34、行第一條PUSH 40H指令是這樣的:將SP中的值加1,變為11H,然后將40H中的值送到11H單元中,因此執行完本條指令后,內存11H單元的值是50H,同樣,執行POP 30H時,是將11H中的值送入到30H單元中,即執行完本條指令后,30H單元中的值變為50H。 9 交換指令5條XCH A,RnXCH A, directXCH A, RiXCHD A, RiSWAP A例: A中的內容為34HMOV R6, #29HXCH A, R6SWAP AXCH A, R6 XCHD A, R0算術運算類指令 主要用于8位無符號數運算;也可用于帶符號數運算。包括:加、減、乘、除、加1、減1運算指令,

35、指令操作將影響PSW中有關狀態位。 1 加法指令ADD A,#data ADD A,direct ADD A,Rn ADD A,Ri 用途:將A中的值與源操作數所指內容相加,最終結果 存在A中。1不帶進位位的加法指令4條例1:ADD A,#47HADD A,34HADD A,R7ADD A,R0例2:MOV A,#0AEH ;-82ADD A,#81H ;-127那么執行完本條指令后,A中的值為2FHPSW中狀態位 C=1,AC=0,OV=1,P=1對無符號數:結果為12FH;對帶符號數:OV=1,有錯。2帶進位位的加法指令4條ADDC A,Rn; ARnCYAADDC A,direct; A

36、(direct )CYAADDC A,Ri; A(Ri)CYAADDC A,#data; AdataCYA用途:將A中的值和其后面的值以及進位位C中的值相加, 最終結果存在A,常用于多字節數運算中。例: 先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1那么到了PSW中的CY位了。換言之,CY就相當于是100H。 然后再做10H + 30H + CY,結果是41H,所以最終的結果是4107H。1067H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H30A0

37、H4107H又例: 先做67H+20H=87H,沒有超過0FFH,因此最終保存在A中的是87H,而PSW中的CY=0。 然后再做10H + 30H + CY,結果是40H,所以最終的結果是4087H。1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H3020H4087H3 加1指令5條INC A;A+1A,影響P標志INC Rn;Rn+1RnINC direct;(direct)+1(direct)INC Ri;(Rn)+1(Rn)INC DPTR;DPTR+1DPTR功能很簡單,就是將后面目

38、標中的值加1。例:A=12H,R0=33H,(21H)=32H, (34H)=22H,DPTR=1234H。連續執行下面的指令: INC A INC R0 INC 21H INC R0 INC DPTR; A=13H; R0=34H;21H=33H;34H=23H; DPTR=1235HDA A在進行BCD碼加法運算時,跟在ADD和ADDC指令之后,用來對BCD碼加法運算結果進行自動修正。例:A=00010101代表十進制數15 ADD A,#84 十進制調整指令1條; A=1DH,按二進制規律加; A=23H,按十進制規律加DA A2 減法指令8條SUBB A,Rn ; ARnCYASUBB

39、 A,direct ; A(direct )CYASUBB A,Ri ; A(Ri)CYASUBB A,#data; AdataCYA將A中的值減去源操作數所指內容以及進位位C中的值,最終結果存在A中。說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令在做第一次相減時,只要將CY清零即可。1 帶借位的減法指令4條2 減1指令4條DEC A ;A-1A,DEC Rn;Rn-1RnDEC direct ;(direct)-1(direct)DEC Ri;(Rn)-1(Rn) 與加1指令類似。 3 乘法指令1條MUL AB ;ABBA此指令的功能是將A和B中的兩個8位無符號數相乘,結果將為16

40、無符號數。其中高8位放在B中,低8位放在A中。在乘積大于FFH時,0V置1,否那么OV為0;而CY總是0。例: A=4EH,B=5DH,執行MUL AB指令后,乘積是1C56H,所以在B中放的是1CH,而A中放的那么是56H。 4 除法指令1條DIV AB;AB的商A,余數B此指令的功能是將A中的8位無符號數除B中的8位無符號數,商放在A中,余數放在B中。如果在做除法前B中的值是00H,也就是除數為0,那么0V=1。例:A=11H,B=04H,執行DIV AB指令后,結果為:A=04H,B=1。邏輯運算與循環類指令主要用于對2個操作數按位進行邏輯操作,結果送到A或直接尋址單元。 主要操作 與、

41、或、異或、移位、取反、清零等。 對標志位的影響 除了目的操作數為ACC的指令影響奇偶標志P外,一般不影響標志位。1 邏輯或指令6條ORL A,Rn ;ARnAORL A,direct ;A(direct)AORL A,Ri ;A(Ri)AORL A,#data ;AdataAORL direct,A ;(direct)A(direct)ORL direct,#data ;(direct)data(direct)影響P標志例:71H和56H相或:01110001 71H 01010110 56H 01110111 即77H后兩條指令,假設直接地址為I/O端口,那么為“讀改寫操作。2 邏輯與指令

42、6條ANL A,Rn ;ARnAANL A,direct ;A(direct)AANL A,Ri ;A(Ri)AANL A,#data ;AdataAANL direct,A ;(direct)A(direct)ANL direct,#data ;(direct)data(direct)影響P標志例:71H和56H相與:01110001 71H 01010110 56H 01010000 即50H后兩條指令,假設直接地址為I/O端口,那么為“讀改寫操作。例:71H和56H相異或: 01110001 71H ) 01010110 56H 3 邏輯異或指令6條XRL A,Rn ;A RnAXRL

43、A,direct ;A (direct)AXRL A,Ri ;A (Ri)AXRL A,#data ;A dataAXRL direct,A ;(direct) A(direct)XRL direct,#data ;(direct) data(direct)影響P標志00100111 即27H后兩條指令,假設直接地址為I/O端口,那么為“讀改寫操作。 4 取反與清0指令2條取反:CPL A ;/AA例:假設A=5CH, 執行CPL A 結果:A=A3H清0:CLR A ;0A5 循環移位指令4條RL ARR ARLC ARRC AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0

44、后兩條指令,影響P和CY標志。例:假設A=5CH,CY=1,執行RLC A后, 對RLC、RRC指令,在CY=0時RLC相當于乘以2RRC相當于除以2結果:A=B9H,CY=0,P=10101 110011011 10010綜合舉例:ANL A,#0FH ;屏蔽A的高4位SWAP AANL P1,#0FH ;清P1口高4位ORL P1,A ;P1口高4位輸出A的低4位; 把累加器A中的低4位狀態,通過P1口的高4位輸出, P1口的低4位狀態不變。程序轉移類指令此類指令一般不影響PSW。包括以下類型:無條件轉移和條件轉移相對轉移和絕對轉移長轉移和短轉移調用與返回指令 無條件轉移類指令4條 短轉移

45、類指令:AJMP addr11 長轉移類指令:LJMP addr16 相對轉移指令:SJMP rel 間接轉移指令:JMP A+DPTR1上面的前三條指令,統統理解成:PC值改變,即跳轉到一個標號處。 那么他們的區別何在呢?跳轉的范圍不同。 短轉移類指令:AJMP addr11 長轉移類指令:LJMP addr16 相對轉移指令:SJMP rel轉移范圍:2KB64KB-128+127指令構成不同。 AJMP、LJMP后跟的是絕對地址, 而SJMP后跟的是相對地址。 指令長度不同 原那么上,所有用SJMP或AJMP的地方都可以用 LJMP來替代。散轉指令:JMP A+DPTR 這條指令的用途也

46、是跳轉,轉到什么地方去呢?這可不能由標號簡單地決定了。 轉移地址由A+DPTR形成,并直接送入PC。指令對A、DPTR和標志位均無影響。 本指令可代替眾多的判別跳轉指令,又稱為散轉指令,多用于多分支程序結構中。2第四條指令與前三條指令相比有所不同 條件轉移指令8條條件轉移指令是指在滿足一定條件時進行相對轉移,否那么程序繼續執行本指令的下一條指令。一、判A內容是否為0轉移指令2條 JZ rel ;如果A=0,那么轉移,否那么順序執行。 JNZ rel ;如果A0,就轉移。轉移到相對于當前PC值的8位移量的地址去。即: 新的PC值=當前PC+偏移量rel在編寫匯編語言源程序時,可以直接寫成: JZ

47、 標號 ;即轉移到標號處。二、比較不等轉移指令4條CJNE A,#data,rel CJNE A,direct,relCJNE Rn,#data,relCJNE Ri,#data,rel此類指令的功能是將兩個操作數比較,如果兩者相等,就順序執行,如果不相等,就轉移。同樣地,使用時,可以將rel理解成標號,即:CJNE A,#data,標號CJNE A,direct,標號CJNE Rn,#data,標號CJNE Ri,#data,標號利用這些指令,可以判斷兩數是否相等。但有時還想得知兩數比較之后哪個大,哪個小,本條指令也具有這樣的功能:如果兩數不相等,那么CPU還會用CY進位位來反映哪個數大,哪

48、個數小。如果前面的數大,那么CY=0,否那么CY=1。因此在程序轉移后再次利用CY就可判斷出哪個數大,哪個數小了。三、減1不為0轉移指令2條DJNZ Rn,relDJNZ direct,relDJNZ指令的執行過程是這樣的:它將第一個參數中的值減1,然后看這個值是否等于0,如果等于0,就往下執行,如果不等于0,就轉移到第二個參數所指定的地方去。例: LOOP: DJNZ 10H,LOOP 例: MOV 23H,#0AH CLR ALOOP: ADD A,23H DJNZ 23H,LOOP SJMP $上述程序段的執行過程是:將23H單元中的數連續相加,存至A中,每加一次, 23H單元中的數值減

49、1,直至減到0,共加23H次。 子程序調用與返回指令一、調用指令2條 LCALL addr16 ;長調用指令(3字節) ACALL addr11 ;短調用指令(2字節)上面兩條指令都是在主程序中調用子程序,兩者的區別:對短調用指令,被調用子程序入口地址必須與調用指令下一條指令的第一字節在相同的2KB存儲區之內。使用時可以用標號表示子程序首地址二、返回指令 2條子程序執行完后必須回到主程序,如何返回呢?只要執行一條返回指令就可以了。RET;子程序返回指令RETI;中斷子程序返回指令兩者不能互換使用。空操作指令1條 NOP空操作,就是什么事也不干,停一個周期,一般用作短時間的延時。位操作指令805

50、1單片機的硬件結構中,有一個位處理器又稱布爾處理器,它有一套位變量處理的指令集,包括位變量傳送、邏輯運算、控制程序轉移等。在8051中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區:內部RAM的20H-2FH這16個字節單元,即128個位單元(位地址空間位007FH);可以位尋址的特殊功能存放器。 以PSW中位4 RS1 為例。直接(位)地址方式:如 D4H;點操作符號方式:如 PSW.4,D0H.4;位名稱方式:如 RS1;用戶定義名方式:如用偽指令 bitSUB.REG bit RS1定義后,可用SUB.REG代替RS1。位地址表達方式 位傳送指令2條 MOV C,bit;bi

51、t CMOV bit,C;C bit這組指令的功能是實現位累加器CY和其它位地址之間的數據傳遞。例:MOV C,P1.0;將P1.0的狀態送給C。 MOV P1.0,C ;將C中的狀態送到P1.0 ;引腳上去。位清0和置位4條 位清0指令 CLR C ;使CY=0 CLR bit ;使指令的位地址等于0。 例:CLR P1.0 ;即使P1.0變為0 位置1指令 SETB C ;使CY=1 SETB bit ;使指定的位地址等于1。 例:SETB P1.0 ;使P.0變為1 位邏輯運算指令 6條 位與指令 ANL C,bit ;Cy與指定位的值相與,結果送CyANL C,/bit ;先將指定的位

52、地址中的值取出后取反,再和Cy相與,結果送回Cy。但注意:指定的位地址中的值本身并不發生變化。例:ANL C,/P1.0位取反指令 CPL C ;使Cy值取反。CPL bit ;使指定的位的值取反。例:CPL P1.0位或指令 ORL C,bitORL C,/bit 位條件轉移指令5條 判Cy轉移指令 JC relJNC rel 第一條指令的功能是如果Cy=1就轉移,否那么就順序執行。 第二條指令那么和第一條指令相反,即如果Cy=0就轉移,否那么就順序執行。 判位變量轉移指令 JB bit,relJNB bit,rel JBC bit,rel第一條指令:如果指定的bit=1,那么轉移,否那么順

53、序執行,第二條指令功能相反。第三條指令是如果指定的bit=1,那么轉移,并把該位清0,否那么順序執行。 匯編語言程序設計匯編語言格式與偽指令匯編語言源程序由以下兩種指令構成匯編語句指令語句偽指令指示性語句匯編語句的格式: 標號:操作碼操作數;注釋3. 偽指令:控制匯編用的特殊指令,這些指令不屬于指令系統,不產生機器代碼。 常用的偽指令 ORG 定位目的程序的起始地址。 格式:ORG 表達式 表達式必須為16位地址值。如:ORG 0000H END 匯編語言程序結束偽指令。 一定放在程序末尾!常用的偽指令 EQU 賦值偽指令。 格式: 字符名稱 EQU 數值或匯編符號 例:AAEQU30HK1E

54、QU40HMOV A,AA; (30HAMOV A,K1;40HA常用的偽指令DB 從指定單元開始定義存儲假設干個字節的數據或ASCII碼字符,常用于定義數據常數表。格式:DB 字節常數 或 ASCII字符例:ORG 1000HDB34H,0DEH,A,BDB0AH,0BH,20常用的偽指令DW 從指定單元開始定義存儲假設干個字的數據 或ASCII碼字符。 格式:DW字常數或ASCII字符 例: ORG 2000HDW1234H,BDW0AH,20常用的偽指令 BIT 位地址符號指令。 把位地址賦于規定的字符名稱。 格式:字符名稱BIT位地址例:ABCBITP1.1QQBITP3.2匯編語言程

55、序設計應用 在進行應用匯編程序設計時,首先要確定算法,算法的優劣很大程度上決定了程序的效率,另外還要盡可能畫出程序框圖,以便于分析程序流程。定點數運算子程序定點數:小數點固定的數。 可以把小數點固定在數值的最高位之前, 對于有符號的數,小數點應在符號位與最高數值位之間,即: 符號位 數值局部 也可以把小數點固定在最低數值位后面,即: 符號位 數值局部定點數表示方式(1)原碼表示法 符號位為0表示正數,符號位為1表示負數 如:二進制數00110100表示十進制數+52二進制數10110100表示十進制數-52 (2)補碼表示法正數的補碼表示與原碼相同, 即最高位為0, 其余位為數值位。負數用補碼

56、表示時, 最高位為1, 數值位要按位取反后再在最低位加1,才是該負數的數值。 例如:十進制數+51的二進制補碼為00110011十進制數 -51的二進制補碼為11001101 例: 雙字節數取補子程序。 將(R4R5)中的雙字節數取補,結果送R4R5。 CMPT:MOV A,R5 CPL A ADD A,#1 MOV R5,A MOV A,R4 CPL A ADDC A,#0 MOV R4,A RET例: 雙字節原碼數左移一位子程序。 將(R2R3)左移一位,結果送R2R3,不改變符號位, 不考慮溢出。 DRL1:MOV A,R3CLR CRLC AMOV R3,AMOV A,R2RLC AM

57、OV ACC.7,C ;恢復符號位MOV R2,ARET例: 雙字節原碼右移一位子程序。 將(R2R3)右移一位,結果送R2R3,不改變符號位。 DRR1:MOV A,R2MOV C,ACC.7 ;保護符號位CLR ACC.7 ;移入0RRC AMOV R2,AMOV A,R3RRC AMOV R3,ARET例: 雙字節補碼右移一位子程序。 將(R2R3)右移一位,結果送R2R3,不改變符號位。CRR1:MOV A,R2MOV C,ACC.7 ;保護符號位RRC A ;移入符號位MOV R2 ,AMOV A,R3RRC AMOV R3,ARET例:雙字節無符號數加法子程序。 將(R2R3)和(

58、R6R7)兩個無符號數相加,結果送R4R5。NADD: MOV A,R3ADD A,R7MOV R5,AMOV A,R2ADDC A,R6MOV R4,ARET例:雙字節無符號數減法子程序。 將(R2R3)和(R6R7)兩個雙字節數相減,結果送R4R5。NSUB1:MOV A,R3CLR CSUBB A,R7MOV R5,AMOV A,R2SUBB A,R6MOV R4,ARET例:雙字節原碼加減運算子程序。 (R2R3)和(R6R7)為兩個原碼表示的數,最高位為符號位,求(R2R3)(R6R7)結果送R4R5。程序中DADD為原碼加法子程序入口,DSUB為原碼減法子程序入口。出口時CY=1發

59、生溢出,CY=0為正常。 DSUB:MOV A, R6 ;減法入口CPL ACC.7 ;取反符號位MOV R6, A DADD: MOV A, R2 ;加法入口MOV C, ACC.7MOV F0, C ;保存被加數符號位XRL A, R6MOV C, ACC.7 ;C=1,異號,C=0,同號MOV A, R2 CLR ACC.7 ;清0被加數符號MOV R2, AMOV A, R6CLR ACC.7 ;清0加數符號MOV R6, AJC DAB2ACALL NADD ;同號執行加法MOV A, R4JB ACC.7, DABEDAB1: MOV C, F0 ;恢復結果的符號MOV ACC.7

60、, CMOV R4, ARETDABE: SETB CRET ;溢 出DAB2: ACALL NSUB1 ;異號執行減法MOV A, R4JNB ACC.7, DAB1ACALL CMPT ;不夠減,取補CPL F0 ;符號位取反SJMP DAB1例: 無符號二進制乘法程序。 將(R2R3)和(R6R7)兩個雙字節無符號數相乘,結果送R4R5R6R7。NMUL:MOV R4,#0MOV R5,#0MOV R0,#16 ;16位二進制數CLR CNMLP:MOV A,R4 ;右移一位RRC AMOV R4,AMOV A,R5RRC AMOV R5,AMOV A,R6RRC AMOV R6,AMO

溫馨提示

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

評論

0/150

提交評論