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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

評論

0/150

提交評論