單片機原理及應用教材_第1頁
單片機原理及應用教材_第2頁
單片機原理及應用教材_第3頁
單片機原理及應用教材_第4頁
單片機原理及應用教材_第5頁
已閱讀5頁,還剩150頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機原理及應用常州輕工職業(yè)技術學院前言當今,單片微型計算機技術迅速發(fā)展,由單片機技術開發(fā)的智能化測控設備和產品廣泛應用到各個領域,單片機技術產品和設備促進了生產技術水平的提高。企業(yè)迫切需要大量熟練掌握單片機技術,并能開發(fā)、應用和維護管理這些智能化產品的高級工程技術人材。單片機以體積小、功能強、可靠性好、性能價格比高等特點,已成為實現工業(yè)生產技術進步和開發(fā)機電一體化和智能化測控產品的重要手段。本教材內容分為十章。以MCS-51系列單片機為介紹對象,分別介紹MCS-51系列單片機結構原理、MCS-51單片機指令系統、匯編語言程序設計、并行I/O口的使用、并行I/O口的擴展方法及使用、中斷系統和定時/計數器、A/D轉換接口和D/A轉換接口技術、鍵盤與顯示器接口技術等內容。本教材由楊文新、龔益民、韓迎輝老師編寫,謝麗華、劉軍良老師參與本書圖表的繪制。編者2004年7月第一章認識單片機……………3第二章MCS-51單片機指令系統………………14第三章匯編語言程序設計……27第四章并行I/O口…………33第五章并行I/O口的擴展…………………40第六章中斷系統………………49第七章定時/計數器………55第八章A/D轉換接口……60第九章D/A轉換接口………63第十章鍵盤與顯示器接口…………………67附錄一WAVE軟件的操作使用附錄二ASCII碼表附錄三MCS-51單片機指令系統表附錄四單片機練習題附錄五單片機實驗指導書第一章認識單片機一、什么是單片機單片機是將CPU、存儲器、輸入/輸出接口、定時/計數器等集成在一塊芯片上,是目前銷量最大、應用面最廣、價格最便宜的微型計算機。如圖1-1所示:I/O口CPU程序存儲器定時/計數器外設取指令圖1-1單片機結構框圖例1-1單片機彩燈控制系統(單片機控制8個發(fā)光二極管每隔0.1秒輪流點亮。)使用單片機實驗板進行演示。二、典型單片機產品1.MCS-51系列美國Intel公司生產的8位字長單片機?;拘彤a品有8051、8031、8751等。2.AT89C51系列美國ATMEL公司生產的8位字長單片機。與MCS-51系列單片機兼容,內含4KB的flash存儲器。三、MCS-51單片機的內部的硬件結構及引腳(一)MCS-51單片機內部的總體硬件結構8051單片機的內部基本結構,如圖1-2所示。(二)MCS-51單片機的引腳8051單片機是HMOS工藝制造,外形為40條引腳,如圖1-3所示。因為受芯片引腳數量的限制,有很多引腳具有雙功能。1、主電源引腳VCC:芯片工作電源端,接+5V。Vss:電源接地端。2、時鐘振蕩電路引腳XTAL1:內部晶體振蕩電路的反相器輸入端。接法如圖1-5。XTAL2:內部晶體振蕩電路的反相器輸出端。接法如圖1-5。3、控制信號引腳RST————RST為復位信號輸入端。外部接復位電路。接法如圖1-4。ALE————ALE為地址鎖存允許信號。在不訪問外部存儲器時,ALE以時鐘振蕩頻率的1/6的固定頻率輸出,用示波器觀察ALE引腳上的脈沖信號是判斷單片機芯片是否正常工作的一種簡便方法?!獠砍绦虼鎯ζ鱎OM的讀選通信號。到外部ROM取指令時,自動向外發(fā)送負脈沖信號?!獮樵L問程序存儲器的控制信號。振蕩器和時鐘電路程序存儲器4KBROM數據存儲器256BRAM/SFR8051CPU兩個16位定時器/計數器中斷系統64K字節(jié)總線擴展控制并行I/O端口全雙工串行口外部時鐘源外部計數脈沖外中斷控制外部設備串行通訊圖1-28051單片機的內部基本結構4、并行I/O端口引腳P0口(P0.0~P0.7);P1口(P1.0~P1.7);P2口(P2.0~P2.7);P3口(P3.0~P3.7)。(a)引腳圖(b)邏輯符號圖1-3MCS-51引腳圖(三)復位電路與時鐘電路1.復位電路(1)復位電路單片機的RST引腳是復位信號輸入端,RST引腳上保持兩個機器周期(24個時鐘周期)以上的高電平時,可使單片機內部可靠復位。單片機常用的外部復位電路如圖1-4。(a)上電復位電路(b)上電復位兼手動復位電路圖1-4MCS-51的復位電路(2)復位狀態(tài)復位后,單片機內部的各寄存器的內容將被初始化,包括程序計數器PC和特殊功能寄存器,其中(PC)=0000H,特殊功能寄存器的狀態(tài)見表1-1。復位不影響片內RAM和片外RAM中的內容。表1-1復位后特殊功能寄存器的初始狀態(tài)SFR名稱ACCBPSWSP初始狀態(tài)00H00H00H07HSFR名稱TMODTCONTH0初始狀態(tài)00H00H00H00HTL0DPL00HTH100HDPHP0~P300HFFHTL1SBUF00H不確定00HIPIEХХХ00000B0ХХ00000BSCONPCON0ХХХХХХХB2.時鐘電路時鐘電路用于產生時鐘信號,時鐘信號是單片機內部各種微操作的時間基準,在此基礎上,控制器按照指令的功能產生一系列在時間上有一定次序的信號,控制相關的邏輯電路工作,實現指令的功能。電容容量范圍為30PF±10PF,石英晶體頻率的范圍為1.2~12MHZ,常用6MHZ或12MHz。圖1-58051的外接石英晶體的時鐘電路3.時序單位OSC時鐘ALE圖1-6時序圖(1)時鐘周期(是時鐘信號頻率fosc的倒數)時鐘周期=1/fosc(2)機器周期:機器周期=12×時鐘周期(3)指令周期一條指令從被讀取到被執(zhí)行的整個過程所需的時間稱為指令周期。思考題:fosc分別為6MHZ和12MHZ時,機器周期分別為多少?四、MCS-51單片機的內部硬件的主要功能(一)中央處理單元CPU它由運算器和控制器兩部分組成。1.運算器運算器是進行各種算術運算和邏輯運算的部件。與運算器有關的寄存器包括ACC、B、PSW。(1)累加器ACC(8位寄存器)(2)B寄存器(8位)(3)程序狀態(tài)字寄存器PSW(8位)PSW主要用于存放程序狀態(tài)信息以及運算結果的標志,所以又稱標志寄存器。其格式如下(D1位沒有定義):D7D6D5D4D3D2D1D0CYACF0RS1RS0OV—PCY——進位標志位。AC——輔助進位標志位。F0——用戶標志位RS1、RS0——工作寄存器區(qū)選擇控制位OV——溢出標志位。P——奇偶標志位。2.控制器(1)控制器的組成控制器是由程序計數器PC、指令寄存器、譯碼器、定時與控制電路等組成的。(2)程序計數器PCPC是一個16位的寄存器,PC中的內容是下一條將要執(zhí)行的指令代碼的起始存放地址。當單片機復位之后,(PC)=0000H,引導CPU到0000H地址讀取指令代碼,CPU每讀取一個字節(jié)的指令,PC的內容會自動加1,指向下一個地址,使CPU按順序去讀取后面的指令,從而引導CPU按順序執(zhí)行程序。(二)存儲器1.8051的存儲器分為兩大存儲空間:程序存儲器(ROM)空間(1)片內4KB的程序存儲器,其地址為0000H~0FFFH(2)片外64KB的程序存儲器,其地址為0000H~FFFFH數據存儲器(RAM)空間(1)片內256B的數據存儲器,00H~7FH為通用的數據存儲區(qū),80H~FFH為專用的特殊功能寄存器區(qū)FFFFHFFFFH1000H0FFFH0FFFHFFH80H7FH0000H0000H00H0000H程序存儲器內部數據存儲器外部數據存儲器60KB外部ROM4KB內部ROM(EA=1)4KB外部ROM(EA=0)特殊功能寄存器內部RAM64KB外部RAM圖1-78051的存儲器結構(2)片外64KB的數據存儲器,其地址為0000H~FFFFH與8051不同的是,8751片內包含4KB的EPROM程序存儲器,而8031內部不包含程序存儲器。2.程序存儲器(1)程序存儲器主要用于存放程序和表格常數。(2)程序存儲器分為片內、片外兩部分,總容量最大為64KB,地址為0000H~FFFFH。(3)引腳的接法對于8051、8751等片內有程序存儲器的芯片,引腳應該接高電平;對于8031這種片內無程序存儲器的芯片,引腳應該接低電平。3.數據存儲器數據存儲器主要用于存放各種數據。以下只對內部數據存儲器進行介紹。用戶區(qū)位尋址區(qū)(位地址00~7F)工作寄存器區(qū)3(R0~R7)工作寄存器區(qū)2(R0~R7)工作寄存器區(qū)1(R0~R7)工作寄存器區(qū)0(R0~R7)7FH30H2FH20H1FH00H圖1-8內部數據存儲器的結構(1)低128B的內部數據存儲器按其功能不同劃分為三個區(qū)域。①工作寄存器區(qū)(00H~1FH)該區(qū)均分為四個小區(qū),任何時候,只有一個區(qū)的工作寄存器可以工作,稱為當前工作寄存器區(qū)。當前區(qū)的選擇可通過對寄存器PSW中的RS1、RS0兩個位的設置來進行,見表1-2。表1-2當前工作寄存器區(qū)的選擇RS1RS0當前工作寄存器區(qū)001101010區(qū)1區(qū)2區(qū)3區(qū)思考題:單片機復位時,當前工作寄存器區(qū)是哪個?②位尋址區(qū)(20H~2FH)位尋址區(qū)有16個單元組成,共128個位,每個位具有位地址,表1-3中表格數據是每個位的位地址。每個單元也可作一般的數據緩沖單元使用。表1-3片內RAM的位尋址字節(jié)地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H③用戶區(qū)(30H~7FH)為一般數據緩沖區(qū),堆棧區(qū)通常也設置在這個區(qū)域內。(2)高128字節(jié)(特殊功能寄存器區(qū))8051內部有21個特殊功能寄存器(簡稱SFR),它們均為8位的寄存器,離散分布在80H~FFH區(qū)域,剩下107個單元是沒有定義的,用戶不能使用。見表1-4。有11個SFR的字節(jié)地址可被8整除(地址以0和8結尾),可以位尋址(表中已給出它們的位地址)。表1-4特殊功能寄存器地址對照表SPR名稱符號D7位地址/位定義D0字節(jié)地址B寄存器累加器A程序狀態(tài)字BF7E7D7F6F5E5D5F4E4D4F3E3D3F2E2D2F1E1D1F0E0D0(F0H)(E0H)(D0)ACCPSWE6D6CY中斷優(yōu)先級控制ACIPF0BFRS1BERS0BDOVBC------BBPBAB9B1A9A1B8B0A8A0()B8HB0HA8HA0H-----I/O端口3-----P3------B7PSB6PT1B5PX1PT0PX0B2B4B3()P3.7中斷允許控制P3.6IEP3.5AFP3.4AEP3.3ADP3.2P3.1P3.0AAACAB()EAI/O端口2---P2---A7EAA6ET1A5EX0ET0EX0A2A4A3()P2.7串行數據緩沖串行控制P2.6SBUFP2.5P2.49EP2.39DP2.2P2.1P2.09A(99H)(98H)SCON9F9C9B99919890SW0I/O端口1SW1P1SW297REN96TB895RB8TIRI929493(90H)P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0定時/計數器1(高TH1字節(jié))定時/計數器0(高TH0字節(jié))()()8DH8CH定時/計數器1(低TL1字節(jié))(8BH)定時/計數器0(低TL0(8A)字節(jié))定時/計數器方式TWODGATEC/TW1W0GATEC/TW1W0(89H)選擇定時/計數器控制TCON8F8E8D8C8B8A8988(88H)(87H)TF1TR1TF0TR0IE1IT1IE0IT0電源控制與波特PCON率選擇數據指針高字節(jié)DPH數據指針低字節(jié)DPL(83H)(82H)(81H)(80H)堆棧指針SPI/O端口0P08786858483828180P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0※五、計算機中的數制與編碼(一)常用數制數制也就是進位制,計算機中常用的進位制有二進制(B字母結尾)、十進制(D字母結尾,可省略)、十六進制(H字母結尾)等。其中二進制是計算機內部使用的,十進制、十六進制通常是人們書寫程序或描述計算機工作過程時使用的。(二)數制間的轉換三種進制的對應關系見表1-5。表1-5三種進制數對照表二進制(B)十六進制(H)十進制(D)二進制(B)十六進制(H)十進制(D)000000010010001101000101011001110123456701234567100010011010101111001101111011118989.ABCDE101112131415F1.十進制轉換為二進制整數部分的轉換方法稱為“除2取余法”。小數部分的轉換方法稱為“乘2取整法”。2.二進制轉換成十進制將二進制數的各個非零位分別乘以位權之后相加求和。3.十進制轉換成十六進制整數部分的轉換方法稱為“除16取余法”。小數部分的轉換方法稱“乘16取整法”。4.十六進制轉換成十進制將十六進制數的各個非零位分別乘以位權后相加求和。5.二進制與十六進制之間的轉換二進制數轉換成十六進制數的方法是:4位二進制數對應于1位十六進制數(對應關系見表1-4)。十六進制數轉換為二進制數的方法是:將每1位十六進制數用對應的4位二進制數替換。練習:1.將194轉換成二進制數2.將120轉換成十六進制數3.將10101000B轉換成十進制數4.將19BH轉換成十進制數5.將二進制數1011011.110B轉換為十六進制數6.將十六進制數7B.25H轉換為二進制數(三)常用二進制編碼1.二進制編碼的十進制數十進制數用二進制編碼的形式來表示,稱為二——十進制編碼,即:BCD碼(BinaryCodeDecimal)。最常用的是8421BCD碼。表1-5列出了BCD碼(8421碼)與十進制數的對照表?;Q時,可以按4位對應1位的原則,進行轉換。表1-6BCD(8421)碼與十進制數的對照表十進制數BCD碼0000000100100011十進制數BCD碼0101011001111000100101234567890100課堂練習:(1)將79.32轉換成BCD碼(2)將BCD碼10000110.0101轉換成十進制2.字符編碼(ASCll碼)計算機中的各種字符,包括0~9數字、大小寫英文字母、標點符號及用于控制的特殊符號等,也必須用二進制編碼表示。在計算機中一般統一使用ASCII碼來表示字符。ASCII碼是美國信息交換標準代碼的簡稱。每個字符的ASCII碼是由7位二進制數構成,第八位(最高位)通常定為奇偶校驗位。例如:數字0~9的ASCII碼為30H~39H;大寫字母A~Z的ASCII碼為41H~5AH。(四)帶符號數的表示在計算機中是使用數字“0”和“1”來表示數的符號的。如,“+”號用“0”表示;“–”號用“1”表示。一個數在計算機中有三種表示方法:原碼、反碼、補碼。下面以8位帶符號數為例進行介紹。1、原碼最高位(D7位)作符號位,用“0”或“1”表示數的正或負,其余位為數值位,用來表示該數的大小,即絕對值。例:[+112]原碼=01110000B[–112]原碼=11110000B原碼所能表示的十進制范圍是:–127~+127。2、反碼正數的反碼與原碼相同;負數的反碼,符號位為1,數值位是將原碼的數值位按位取反(即原來是“0”的,取為“1”,原來是“1”的,取為“0”)。例:[+112]反碼=01110000B[–112]反碼=10001111B反碼可表示的十進制范圍是:–127~+127。3、補碼表示法正數的補碼與原碼相同;負數的補碼,符號位為“1”,數值位是將反碼的數值位加1形成。例:[+112]補碼=01110000B[–112]補碼=10010000B用補碼可表示的十進制范圍是:–128~+127。因為帶符號數用補碼表示,可以簡化運算,所以較常用。(五)無符號數無符號的8位二進制數沒有符號位,8位均為數值位。即:8位無符號二進制數對應的十進制范圍為(0~255)。第二章MCS-51單片機指令系統一、指令的表達形式每條指令有兩種不同的表達形式:1.二進制代碼(機器碼)指令2.助記符(匯編語言)指令助記符指令:MOVA,#30H二進制代碼指令:0111010000110000助記符指令必須轉換成二進制代碼指令才能存入存儲器。本章僅介紹助記符指令格式,對應的機器碼格式可參考附錄。二、匯編語言指令格式操作碼[第一操作數][,第二操作數][,第三操作數](1)操作碼:用來規(guī)定指令進行何種操作,是指令中不能空缺的部分。(2)操作數:表示參與指令操作的數據或數據所在的地址。為可選項。有兩個操作數時,前一個為目的操作數,后一個為源操作數。三、指令中有關操作數符號的說明Rn——工作寄存器R0~R7(n=0、1、2…7)。Ri——工作寄存器R0和R1(i=0或1)。Direct——內部RAM的單元地址,地址范圍為00~FFH。#data——8位立即數,即常數。#data16——16位立即數。addr16——16位目的地址。Addrll——11位目的地址。四、MCS-51單片機指令系統MCS—51的指令按功能分為五大類:數據傳送、算術運算、邏輯運算、控制轉移和位操作指令。(一)數據傳送類指令注意:源操作數在傳送前后保持不變。1.內部數據傳送指令指令功能說明MOVA,Rn;A←(Rn)MOVA,direct;A←(direct)MOVA,@Ri;A←((Ri))MOVA,#data;A←#dataMOVRn,A;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←#dataMOVdirect,A;direct←(A)MOVdirect,Rn;direct←(Rn)MOVdirect,@Ri;direct←((Ri))MOVdirect1,direct2;direct1←(direct2)MOVdirect,#data;direct←#dataMOV@Ri,A;(Ri)←(A)MOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←#dataMOVDPTR,#data16;DPTR←#data16【例2-1】設(30H)=40H,(40H)=10H,(P1)=0CAH,試判斷下列程序執(zhí)行后的結果。MOVR0,#30HMOVA,@R0;R0←#30H;A←(30H),(A)=40HMOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1;R1←(A),(R1)=40H;B←(40H),(B)=10H;(R1)←(P1),(40H)=0CAH;P2←(P1),(P2)=0CAH結果是:(A)=40H,(B)=10H,(40H)=0CAH,(P2)=0CAH2.外部數據傳送指令此類指令完成對片外RAM單元中數據的讀/寫操作。(1)讀指令MOVXA,@DPTRMOVXA,@Ri(2)寫指令;A←((DPTR));A←((Ri))MOVX@DPTR,AMOVX@Ri,A;(DPTR)←(A);(Ri)←(A)注意:用R0和R1間接尋址時,要占用P2寄存器放外部RAM的高8位地址,R0和R1放低8位地址。使用時,要先將低8位地址送入Ri(R0或R1),高8位地址送入P2寄存器,然后再用上述指令?!纠?-2】將片外RAM1000H單元中的內容送到2000H單元。方法一MOVDPTR,#1000H;DPTR←#1000HMOVXA,@DPTRMOVDPTR,#2000H;DPTR←#2000HMOVX@DPTR,A;(DPTR)←(A);A←((DPTR))方法二MOVP2,#10H;P2←#10HMOVR0,#00H;R0←#00HMOVXA,@R0;A←((R0))MOVP2,#20H;P2←#20HMOVX@R0,A;(R0)←(A)注意:在兩個片外RAM單元之間是不能直接進行數據的傳送的,必須經過片內的累加器A來間接地傳送。3.訪問程序存儲器的傳送指令(查表指令)MOVCA,@A+PC;PC←(PC)+1,A←((A)+(PC))MOVCA,@A+DPTR;A←((A)+(DPTR))其功能是到程序存儲器中查表格數據送入累加器A。程序存儲器中除了存放程序之外,還會放一些表格數據,又稱查表指令。指令中的操作數為表格數據。前一條指令將A中的內容與PC的內容相加得到16位表格地址;后一條指令是將A中的內容與DPTR中的內容相加得到16位表格地址。4.數據交換指令XCHA,Rn;(A)←→(Rn)XCHA,direct;(A)←→(direct)XCHA,@Ri;(A)←→((Ri))XCHDA,@Ri;(A)3~0←→((Ri))3~05.堆棧操作指令在片內RAM的00H~7FH地址區(qū)域中,可設置一個堆棧區(qū),主要用于保護和恢復CPU的工作現場。(1)進棧指令PUSHdirect;SP←(SP)+1;(SP)←(direct);(2)出棧指令POPdirect;direct←((SP));SP←(SP)-1;二、算術運算類指令注意大部分指令的執(zhí)行結果將影響程序狀態(tài)字PSW的有關標志位。(一)加法指令ADDA,Rn;A←(A)+(Rn)ADDA,direct;A←(A)+(direct)ADDA,@Ri;A←(A)+((Ri))ADDA,#data;A←(A)+dataADDCA,Rn;A←(A)+(Rn)+(CY)ADDCA,direct;A←(A)+(direct)+(CY)ADDCA,@Ri;A←(A)+((Ri))+(CY)ADDCA,#data;A←(A)+data+(CY)如果把參加運算的兩個操作數看作是無符號數(0~255),加法運算對CY標志位的影響如下:(1)若結果的第7位向前有進位(C7’=1),CY=1(2)若結果的第7位向前無進位(C7’=0),CY=0【例2-3】設有兩個無符號數放在A和R2中,設(A)=0C6H(198),(R2)=68H(104),執(zhí)行指令:ADDA,R2試分析運算結果及對標志位的影響。解:寫成豎式(A)11000110198(R2)+01101000+104(A)100101110302結果是:(A)=2EH,CY=1。(二)加1指令INCA;A←(A)+1INCRn;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1這組指令的功能是使源操作數的值加1?!纠?-4】設有兩個16位無符號數,被加數存放在內部RAM的30H(低位字節(jié))和31H(高位字節(jié))中,加數存放在40H(低位字節(jié))和41H(高位字節(jié))中。試寫出求兩數之和,并把結果存放在30H和31H單元中的程序。參考程序為:MOVR0,#30H;地址指針R0賦值MOVR1,#40H;地址指針R1賦值MOVA,@R0ADDA,@R1;被加數的低8位送A;被加數與加數的低8位相加,和送A,并影響CY標志MOV@R0,A;和的低8位存30H單元INCR0INCR1;修改地址指針R0;修改地址指針R1MOVA,@R0;被加數的高8位送AADDCA,@R1;被加數和加數的高8位與CY相加,和送AMOV@R0,A;和的高8位存31H單元(三)減法指令1.帶借位減法指令SUBBA,Rn;A←(A)–(Rn)–(CY)SUBBA,direct;A←(A)–(direct)–(CY)SUBBA,@Ri;A←(A)–((Ri))–(CY)SUBBA,#data;A←(A)–data–(CY)該組指令的功能是從累加器A減去源操作數及標志位CY,其結果再送累加器A。CY位在減法運算中是作借位標志。SUBB指令對標志位的影響如下:(1)若第7位向前有借位(C7’=1),則CY=1;(2)若第7位向前無借位(C7’=0),則CY=0,【例2-5】在A和R3中存有兩個無符號數,設(A)=98H,(R3)=6AH,CY=1,執(zhí)行指令:SUBBA,R3分析執(zhí)行結果及對標志位的影響解:(A)1001100098H(R3)–011010106AHCY–1–1(A)001011012DH結果是:(A)=2DH,CY=02.減1指令DECA;A←(A)-1DECRn;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←((Ri))-1這組指令的功能是使源操作數的值減1。(四)十進制調整指令DAA指令專用于實現BCD碼的加法運算,其功能是將累加器A中按二進制相加后的結果調整成BCD碼相加的結果。(1)ADD或ADDC指令的結果是二進制數之和。(2)DA指令的結果是BCD碼之和十進制調整指令執(zhí)行時會對Cy位產生影響?!纠?-6】MOVA,#75HMOVR3,#69HADDA,R3;(A)=DEH,CY=0MOVB,A;(B)=DEHDAA;(A)=44H,CY=1(五)乘法指令MULAB;BA←(A)×(B)指令的功能是把累加器A和寄存器B中兩個8位無符號整數相乘,并把乘積的高8位存于寄存器B中,低8位存于累加器A中。乘法運算指令執(zhí)行時會對標志位產生影響:CY標志總是被清0,即CY=0;OV標志則反映乘積的位數,若OV=1,表示乘積為16位數;若OV=0,表示乘積為8位數。(六)除法指令DIVAB;A商,B余←(A)÷(B)指令的功能是把累加器A和寄存器B中的兩個8位無符號整數相除,所得商的整數部分存于累加器A中,余數存于B中。除法指令執(zhí)行過程對標志位的影響:CY位總是被清0,OV標志位的狀態(tài)反映寄存器B中的除數情況,若除數為0,則OV=1,表示本次運算無意義,否則,OV=0。三、邏輯運算類指令在MCS—51指令系統中,邏輯運算類指令有25條,可實現與、或、異或等邏輯運算操作。這類指令有可能會影響CY和P標志位的狀態(tài)。(一)累加器A的邏輯操作指令1、累加器A清0CLRA;A←00H2、累加器A取反CPLA;A←()【例2-7】設(A)=33H,執(zhí)行指令CPLA結果是:(A)=0CCH3、累加器A循環(huán)左移D7←D0RLA利用左移指令,可實現對A中的無符號數乘2的目的?!纠?-8】執(zhí)行下列指令后,A中的內容如何變化?MOVA,#11H;(A)=11H(17)RLARLARLARLA;(A)=22H(34);(A)=44H(68);(A)=88H(136);(A)=11H(17)4、累加器A帶進位循環(huán)左移CYD7←D0RLCA5、累加器A循環(huán)右移D7→D0RRA對累加器A進行的循環(huán)右移,可實現對A中無符號數的除2運算。6、累加器A帶進位循環(huán)右移CYD7→D0RRCA7、累加器A半字節(jié)交換D7~D4D3~D0SWAPA功能是將累加器A中內容的高4位與低4位互換?!纠?-9】設(A)=63H,執(zhí)行指令SWAPA結果為:(A)=36H。(二)邏輯與指令ANLA,Rn;A←(A)∧(Rn)ANLA,direct;A←(A)∧(direct)ANLA,@Ri;A←(A)∧((Ri))ANLA,#data;A←(A)∧#dataANLdirect,A;direct←(direct)∧(A)ANLdirect,#data;direct←(direct)∧#data功能是將目的操作數和源操作數按位進行邏輯與操作,結果送目的操作數。在程序設計中,邏輯與指令主要用于對目的操作數中的某些位進行屏蔽(清0)。方法是:將需屏蔽的位與“0”相與,其余位與“1”相與即可。(三)邏輯或指令ORLA,Rn;A←(A)∨(Rn)ORLA,direct;A←(A)∨(direct)ORLA,@Ri;A←(A)∨((Ri))ORLA,#data;A←(A)∨#dataORLdirect,A;direct←(direct)∨(A)ORLdirect,#data;direct←(direct)∨#data功能是將目的操作數和源操作數按位進行邏輯或操作,結果送目的操作數。邏輯或指令可對目的操作數的某些位進行置位。方法是:將需置位的位與“1”相或,其余位與“0”相或即可,常用于組合數據。(四)邏輯異或指令XRLA,Rn;A←(A)⊕(Rn)XRLA,direct;A←(A)⊕(direct)XRLA,@Ri;A←(A)⊕((Ri))XRLA,#data;A←(A)⊕#dataXRLdirect,A;direct←(direct)⊕(A)XRLdirect,#data;direct←(direct)⊕#data功能是將目的操作數和源操作數按位進行邏輯異或操作,結果送目的操作數。邏輯異或指令可用于對目的操作數的某些位取反,而其余位不變。方法是:將要取反的這些位和“1”異或,其余位則和“0”異或即可?!纠?-10】將工作寄存器R2中數據的高4位和R3中的低4位拼成一個數,并將該數存入30H。MOVR0,#30H;R0作地址指針MOVA,R2ANLA,#0F0H;屏蔽低4位MOVB,A;中間結果存B寄存器MOVA,R3ANLA,#0FH;屏蔽高4位ORLA,B;組合數據MOV@R0,A;結果存30H單元?!纠?-11】分析下列程序的執(zhí)行結果。MOVA,#77H;(A)=77HXRLA,#0FFHANLA,#0FHMOVP1,#64H;(A)=77H⊕FFH=88H;(A)=88H∧0FH=08H;(P1)=64HANLP1,#0F0H;(P1)=64H∧F0H=60HORLA,P1;(A)=08H∨60H=68H四、控制轉移類指令轉移指令的功能是通過修改程序計數器PC的值,使程序執(zhí)行的順序發(fā)生變化,從而改變程序執(zhí)行的方向。(一)無條件轉移指令無條件轉移指令是使程序無條件轉移到指定的地址去執(zhí)行。1、長轉移指令LJMPaddr16;PC←addr16指令的功能是將指令提供的16位地址(addr16)送入PC,然后程序無條件地轉向目標地址(addr16)處執(zhí)行。addr16可表示的地址范圍是(0000H~FFFFH)。2、絕對轉移指令AJMPaddr11;PC←(PC)+2PC10~0←addr11指令的功能是先使程序計數器PC值加2(完成取指并指向下一條指令的地址),然后將指令提供的addrll作為轉移目的地址的低11位,和PC當前值的高5位形成16位的目標地址,程序隨即轉移到該地址處執(zhí)行。3、相對轉移指令SJMPrel;PC←(PC)+2+rel操作數為相對尋址方式。指令的功能是先使PC+2(完成取指并指向下一條指令地址),然后把PC當前值與地址偏移量rel相加作為目標轉移地址。即:目標地址=PC+2+rel=(PC)+relrel是一個帶符號的8位二進制數的補碼(數值范圍是–128~+127),所以SJMP指令的轉移范圍是:以PC當前值為起點,可向前(“–”號表示)跳128個字節(jié),或向后(“+”號表示)跳127字節(jié)。當滿足轉移范圍的條件下,可采用“SJMPaddr16”形式。4、間接轉移指令JMP@A+DPTR;PC←(A)+(DPTR)指令的功能是將累加器A中8位無符號數與DPTR的16位內容相加,和作為目標地址送入PC,實現無條件轉移。(二)條件轉移指令條件轉移指令要求對某一特定條件進行判斷,當滿足給定的條件,程序就轉移到目標地址去執(zhí)行,條件不滿足則順序執(zhí)行下一條指令。可用于實現分支結構的程序。這類指令中操作數都為相對尋址方式,目標地址的形成與SJMP指令相類似。當滿足轉移范圍的條件下,均可用“addr16”代替“rel”。1、累加器A的判零轉移指令JZrel;若(A)=0則PC←(PC)+2+rel,若(A)≠0則PC←(PC)+2JNZrel;若(A)≠0則PC←(PC)

溫馨提示

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

最新文檔

評論

0/150

提交評論