版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)技術(shù)及應(yīng)用清華大學(xué)基礎(chǔ)工業(yè)訓(xùn)練中心馮一兵8/10/20231單片機(jī)技術(shù)及應(yīng)用8/1/20231
第一章單片機(jī)的基礎(chǔ)知識(shí)第二章MCS-51單片機(jī)的初步認(rèn)識(shí)第三章MCS-51的指令系統(tǒng)
8/10/20232第一章單片機(jī)的基礎(chǔ)知識(shí)8/1/20232
第四章匯編語(yǔ)言程序設(shè)計(jì)第五章定時(shí)器/計(jì)數(shù)器第六章中斷的基本概念第七章串行口的應(yīng)用8/10/20233第四章匯編語(yǔ)言程序設(shè)計(jì)8
第一章單片機(jī)的基礎(chǔ)知識(shí)1.1微計(jì)算機(jī)與單片機(jī)
單片機(jī)是計(jì)算機(jī)的一種。一臺(tái)完整的計(jì)算機(jī)由硬件和軟件共同組成。計(jì)算機(jī)的軟件由各種程序組成,包括操作系統(tǒng)(如windows)和各種應(yīng)用程序(如word),計(jì)算機(jī)的硬件由下列幾個(gè)部份構(gòu)成:CPU、存儲(chǔ)器、外部設(shè)備及接口。單片機(jī)主要用于簡(jiǎn)單的數(shù)據(jù)采集和控制,原本的意思是將CPU、存儲(chǔ)器和外設(shè)接口(I/O)集成在一個(gè)芯片(singlechip)上的處理器(Processor),后來(lái)的正式名稱(chēng)是微控制器(microcontroller)。因此在網(wǎng)上查找資料時(shí),可以使用微控制器作為關(guān)鍵詞查找。8/10/20234第一章單片機(jī)的基礎(chǔ)知識(shí)8/單片微型計(jì)算機(jī)就是將CPU、RAM、ROM、定時(shí)/計(jì)數(shù)器和多種接口都集成到一塊集成電路芯片上的微型計(jì)算機(jī)。因此,一塊芯片就構(gòu)成了一臺(tái)計(jì)算機(jī)。它已成為工業(yè)控制領(lǐng)域、智能儀器儀表、尖端武器、日常生活中最廣泛使用的計(jì)算機(jī)。8/10/20235單片微型計(jì)算機(jī)就是將CPU、RAM、ROM、定時(shí)/計(jì)數(shù)器和多CPU:CPU(centralcontrolunit)的全稱(chēng)是中央處理器。負(fù)責(zé)計(jì)算機(jī)的計(jì)算和控制計(jì)算機(jī)的運(yùn)行。
存儲(chǔ)器:存儲(chǔ)器存放各種程序和數(shù)據(jù)。存儲(chǔ)器分為內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器兩部分。外部存儲(chǔ)器大家都比較熟悉,如硬盤(pán)、光盤(pán)、軟盤(pán)等等。內(nèi)部存儲(chǔ)器有兩種:一部分稱(chēng)為ROM(只讀存儲(chǔ)器),存放最基本的程序,主要用于計(jì)算機(jī)啟動(dòng)時(shí)使用,如在PC機(jī)中存放BIOS;另一部分成為RAM,它能夠隨時(shí)讀寫(xiě)。存放正在運(yùn)行的程序和使用的數(shù)據(jù)。內(nèi)部存儲(chǔ)器的讀寫(xiě)速度遠(yuǎn)遠(yuǎn)高于外部存儲(chǔ)器,而外部存儲(chǔ)器的容量則遠(yuǎn)遠(yuǎn)大于內(nèi)部存儲(chǔ)器。
外部輸入輸出設(shè)備(I/O)及接口:用于和人打交道。如顯示器、鍵盤(pán)、鼠標(biāo)等等,硬盤(pán)、光盤(pán)等也屬于外部設(shè)備8/10/20236CPU:CPU(centralcontrol
1.2MCS-51系列單片機(jī)20世紀(jì)80年代初,Intel推出了MCS-51系列單片機(jī),3個(gè)基本型:
8031:內(nèi)部沒(méi)有程序存儲(chǔ)器
8051:內(nèi)部有程序存儲(chǔ)器(ROM4K)8751:內(nèi)部有可編程可改寫(xiě)程序存儲(chǔ)器(EPROM4K)Intel在推出MCS-51體系結(jié)構(gòu)后不久,開(kāi)放了8051內(nèi)核技術(shù),為MCS-51系列單片機(jī)的發(fā)展起了很大作用。
8/10/202371.2MCS-51系列單片機(jī)8/1/20237
在Intel公司推出了MCS-51不久便實(shí)施了最徹底的技術(shù)開(kāi)放政策;在眾多電器商、半導(dǎo)體商的積極參與下,將MCS-51發(fā)展成了眾多型號(hào)系列的80C51MCU家族。MCS-51經(jīng)典的體系結(jié)構(gòu)、極好的兼容性和Intel公司的開(kāi)放政策不僅使眾多廠家參與發(fā)展,也誘使半導(dǎo)體廠家對(duì)MCS-51實(shí)行為所欲為的改造。8/10/202388/1/20238
Philips公司著力發(fā)展基于51內(nèi)核的控制功能及外圍單元,把MCS-51迅速推進(jìn)到80C51的MCU時(shí)代。另外基于FlashROM的在線(xiàn)可編程(ISP)技術(shù),改變了單片機(jī)應(yīng)用系統(tǒng)的結(jié)構(gòu)模式和開(kāi)發(fā)運(yùn)行條件。P80C51P80C52Atmel公司推出了采用FlashROM技術(shù)的AT89C51AT89C52AT89S52等,增加了一些外部接口功能。Cygnal公司2003年推出51內(nèi)核的SOC(片上系統(tǒng))型單片機(jī),C8051F系列單片機(jī)。
8/10/20239Philips公司著力發(fā)展基于51內(nèi)核的控制功能及外
1.3計(jì)算機(jī)中常用的幾個(gè)術(shù)語(yǔ)1.3.1電平(level):計(jì)算機(jī)和數(shù)字電路中常使用電平一詞,用于反映信號(hào)(signal)的狀態(tài)。一個(gè)信號(hào)或者作為數(shù)字電路的一個(gè)輸入,或者作為數(shù)字電路的輸出。通常使用+5V直流電源作為數(shù)字電路的供電電源,一個(gè)信號(hào)有2個(gè)穩(wěn)定的狀態(tài),一個(gè)稱(chēng)為高電平,一個(gè)稱(chēng)為低電平。高電平是指電壓在+2.7V以上、5V以下的狀態(tài),低電平是指+0.8V以下、0V以上的狀態(tài)。因此,對(duì)于一個(gè)器件,輸出3.1V或者輸出3.8V還是輸出4.3V本質(zhì)上是一樣的,都屬于高電平狀態(tài);同樣輸出0.7V還是0.3V也屬于同一種狀態(tài),即低電平狀態(tài),也沒(méi)有什么差別。咱們這次做實(shí)驗(yàn),用的是+5V直流電源。判斷一個(gè)電路是否正常工作,要按上述標(biāo)準(zhǔn)進(jìn)行。隨著技術(shù)的快速發(fā)展,現(xiàn)在許多器件使用+3.3V甚至2.2V直流電源,對(duì)這些器件,高電平、低電平的定義也進(jìn)行了相應(yīng)修改。8/10/2023101.3計(jì)算機(jī)中常用的幾個(gè)術(shù)語(yǔ)8/1/202310
1.3.2二進(jìn)制和十六進(jìn)制 由于數(shù)字電路中一個(gè)信號(hào)只有2個(gè)穩(wěn)定的狀態(tài):高電平(用“1”表示)和低電平(用“0”表示),因此在計(jì)算機(jī)中,數(shù)據(jù)采用的是二進(jìn)制而不是十進(jìn)制。二進(jìn)制數(shù)就是以2為基數(shù),數(shù)符為0、1,逢二進(jìn)一。書(shū)寫(xiě)時(shí),右邊代表低位,左邊代表高位。下面是二進(jìn)制數(shù)的例子:
(8)(4)(2)(1)0110等于十進(jìn)制61010等于十進(jìn)制101111等于十進(jìn)制15
8/10/2023111.3.2二進(jìn)制和十六進(jìn)制8/1/202311雖然計(jì)算機(jī)中采用的是二進(jìn)制,不過(guò)有時(shí)卻不太方便,因此有時(shí)使用十六進(jìn)制,即把二進(jìn)制數(shù)中的4位作為一組一起表示。在十六進(jìn)制中,數(shù)符為0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A、B、C、D、E、F分別代表十進(jìn)制的10、11、12、13、14、15。如:二進(jìn)制數(shù)01011001表示為十六進(jìn)制數(shù)59二進(jìn)制數(shù)00111111表示為十六進(jìn)制數(shù)3F十六進(jìn)制數(shù)只是為了方便人們的閱讀和書(shū)寫(xiě),計(jì)算機(jī)實(shí)際處理的還是二進(jìn)制數(shù)。在匯編語(yǔ)言和其它高級(jí)語(yǔ)言中,為了將二進(jìn)制數(shù)、十六進(jìn)制數(shù)和十進(jìn)制數(shù)加以區(qū)分,在二進(jìn)制數(shù)后加一個(gè)后綴B,在十六進(jìn)制數(shù)后加一個(gè)后綴H,十進(jìn)制數(shù)后不加任何后綴。如:01011100B8585H0D3H十六進(jìn)制數(shù)如果最高位是字母,則必須前面加一個(gè)0。
8/10/202312雖然計(jì)算機(jī)中采用的是二進(jìn)制,不過(guò)有時(shí)卻不太方便,因此有時(shí)使用1.3.3位(bit)、字節(jié)(byte)、字(word)在二進(jìn)制中,每一“位”叫bit,一般通俗稱(chēng)為位。連續(xù)的8位組織在一起稱(chēng)為一個(gè)字節(jié)(byte)。字節(jié)是計(jì)算機(jī)組織數(shù)據(jù)的基本單位。我們通常說(shuō)一個(gè)計(jì)算機(jī)的內(nèi)存多大,比如100M,指的就是它的內(nèi)存是100M字節(jié)。再比如說(shuō)一個(gè)硬盤(pán)是100G,也是指這個(gè)硬盤(pán)能夠存儲(chǔ)100G個(gè)字節(jié)的數(shù)據(jù)。1M等于100萬(wàn),1G等于1000M。 字(word)是每種特定的計(jì)算機(jī)組織數(shù)據(jù)和進(jìn)行運(yùn)算的單位。比如計(jì)算機(jī)做加法時(shí)能夠一次做多少位二進(jìn)制數(shù)的加法。每種計(jì)算機(jī),字長(zhǎng)差別很大,單片機(jī)字長(zhǎng)一般是8位或者16位,而PC機(jī)字長(zhǎng)則有64位甚至更多。我們通常說(shuō)這是多少位的計(jì)算機(jī)就是指該計(jì)算機(jī)的字長(zhǎng)是多少位。8/10/2023131.3.3位(bit)、字節(jié)(byte)、字(word)81.3.4
寄存器(register)
CPU中有很多寄存器。所謂寄存器就是可以存放東西的地方,這些東西可以是指令、地址等,也可以是數(shù)。寄存器的長(zhǎng)度(位數(shù))等于計(jì)算機(jī)的字長(zhǎng)。一個(gè)8位單片機(jī)中寄存器的長(zhǎng)度就是8位。一個(gè)64位PC機(jī)中寄存器的位數(shù)就是64位。下面介紹一些CPU中常用的寄存器。
指令寄IR(InstructionRegister):存放CPU從存儲(chǔ)器中取出的指令碼。CPU對(duì)指令進(jìn)行譯碼,產(chǎn)生各種控制信號(hào),這些控制信號(hào)指揮CPU內(nèi)部的各種部件完成該指令規(guī)定的動(dòng)作,比如對(duì)2個(gè)數(shù)做加法、減法、邏輯與、從存儲(chǔ)器中取一個(gè)數(shù)、向存儲(chǔ)器中寫(xiě)一個(gè)數(shù)、將一個(gè)數(shù)向外部設(shè)備輸出、從外部設(shè)備輸入一個(gè)數(shù)等等。8/10/2023141.3.4寄存器(register)8/1/2023141.3.5程序計(jì)數(shù)器PC(ProgramCounter):指出程序中當(dāng)前指令在 存儲(chǔ)器中的地址。程序是由一條條指令構(gòu)成的,它們存放在存儲(chǔ)器中。存放程序的存儲(chǔ)器叫做程序存儲(chǔ)器。存儲(chǔ)器由許多單元組成,每個(gè)單元像個(gè)小房間,可以向里放東西,也可以從中取東西。每個(gè)單元對(duì)應(yīng)一個(gè)存儲(chǔ)器地址(就像房間的房間號(hào))。8/10/2023151.3.5程序計(jì)數(shù)器PC(ProgramCounte
1.3.6數(shù)據(jù)、地址、指令:之所以將這三者放在一起,是因?yàn)檫@三者的本質(zhì)都是一樣的──數(shù)字,或者說(shuō)都是一串‘0’和‘1’組成的序列。換言之,地址、指令也都是數(shù)據(jù)。
指令:由單片機(jī)芯片的設(shè)計(jì)者規(guī)定的一種數(shù)字,它與我們常用的指令助記符有著嚴(yán)格的一一對(duì)應(yīng)關(guān)系,不可以由單片機(jī)的開(kāi)發(fā)者更改。
地址:是尋找單片機(jī)內(nèi)部、外部的存儲(chǔ)單元、輸入輸出口的依據(jù),內(nèi)部單元的地址值已由芯片設(shè)計(jì)者規(guī)定好,不可更改,外部的單元可以由單片機(jī)開(kāi)發(fā)者自行決定,但有一些地址單元是一定要有的(詳見(jiàn)程序的執(zhí)行過(guò)程)。
數(shù)據(jù):這是由微處理器處理的對(duì)象,在各種不同的應(yīng)用電路中各不相同,8/10/2023161.3.6數(shù)據(jù)、地址、指令:之所以將這三者放在一1.3.7總線(xiàn):在計(jì)算機(jī)中,各部件是以處理器(CPU)為核心的,各部件都要與處理器相連接,各部件之間的工作必須相互協(xié)調(diào),如果處理器和各部件間單獨(dú)連線(xiàn),則線(xiàn)的數(shù)量將多得驚人,所以在處理機(jī)中引入了總線(xiàn)的概念,各個(gè)部件共同享用連線(xiàn),所有器件的8根數(shù)據(jù)線(xiàn)全部接到8根公用的線(xiàn)上,即相當(dāng)于各個(gè)器件并聯(lián)起來(lái)。但僅這樣還不行,如果有兩個(gè)器件同時(shí)送出數(shù)據(jù),一個(gè)為0,一個(gè)為1,那么,接收方接收到的究竟是什么呢?這種情況是不允許的,所以要對(duì)器件進(jìn)行選擇和控制,使器件分時(shí)工作,任何時(shí)候只能有一個(gè)器件發(fā)送或接受數(shù)據(jù)。器件的數(shù)據(jù)線(xiàn)也就被稱(chēng)為數(shù)據(jù)總線(xiàn),器件所有的控制線(xiàn)被稱(chēng)為控制總線(xiàn)。在單片機(jī)內(nèi)部或者外部存儲(chǔ)器及其它器件中有存儲(chǔ)單元,這些存儲(chǔ)單元要被分配地址,才能使用,由于存儲(chǔ)單元比較多,所以,用于地址分配的線(xiàn)也較多,這些線(xiàn)被稱(chēng)為地址總線(xiàn)。8/10/2023171.3.7總線(xiàn):在計(jì)算機(jī)中,各部件是以處理器(CPU)為核8/10/2023188/1/2023181.4程序的執(zhí)行過(guò)程8/10/2023191.4程序的執(zhí)行過(guò)程8/1/202319一個(gè)計(jì)算機(jī)是這樣工作的。當(dāng)加電之后,時(shí)鐘信號(hào)產(chǎn)生,并且自動(dòng)產(chǎn)生一個(gè)復(fù)位信號(hào)。復(fù)位信號(hào)將程序計(jì)數(shù)器PC復(fù)位為0;CPU以PC的值為存儲(chǔ)器地址從存儲(chǔ)器0單元中取出第一條指令放到指令寄存器IR中;然后CPU對(duì)IR中的指令進(jìn)行譯碼,產(chǎn)生各種控制信號(hào),這些控制信號(hào)完成該指令規(guī)定的功能;在完成該指令功能的同時(shí),程序計(jì)數(shù)器PC加1,為從存儲(chǔ)器中取出下一條指令做準(zhǔn)備。第一條指令執(zhí)行結(jié)束以后,CPU以PC的值為存儲(chǔ)器地址從存儲(chǔ)器1單元中取出第2條指令放到指令寄存器IR中,…,一直繼續(xù)下去,直到程序執(zhí)行結(jié)束。單片機(jī)在通電復(fù)位后8051內(nèi)的程序計(jì)數(shù)器(PC)中的值為‘0000’,所以程序總是從‘0000’單元開(kāi)始執(zhí)行,也就是說(shuō):在MCS-51程序存儲(chǔ)器中一定要存在‘0000’這個(gè)單元,并且在‘0000’單元中存放的一定是一條指令。8/10/202320一個(gè)計(jì)算機(jī)是這樣工作的。當(dāng)加電之后,時(shí)鐘信號(hào)產(chǎn)生,并且1.5單片機(jī)應(yīng)用的開(kāi)發(fā)過(guò)程1、電路板的制作2、目標(biāo)文件的生成:利用PC機(jī)上的開(kāi)發(fā)軟件,編寫(xiě)源程序,經(jīng)匯編(或編譯)后生成目標(biāo)文件(.HEX).3、目標(biāo)程序的燒寫(xiě):將目標(biāo)程序裝入到單片機(jī)芯片或存儲(chǔ)器芯片中。使用編程器或采用在系統(tǒng)編程(ISP)技術(shù).
8/10/2023211.5單片機(jī)應(yīng)用的開(kāi)發(fā)過(guò)程8/1/202321第二章MCS-51單片機(jī)的初步認(rèn)識(shí)2.1引腳功能電源引腳Vcc(40):電源+5V
0.5VGnd(20):地時(shí)鐘XTAL1(19):內(nèi)部振蕩器輸入端XTAL2(18):內(nèi)部振蕩器輸出端
8/10/202322第二章MCS-51單片機(jī)的初步認(rèn)識(shí)8/8/10/2023238/1/202323(a)內(nèi)部時(shí)鐘方式,(b)外部時(shí)鐘方式晶振6MHZ電容5-30P復(fù)位電路(9)電容C22ufR21-2KR1200
復(fù)位后程序計(jì)數(shù)器PC=0000H程序從0000H地址單元開(kāi)始執(zhí)行,復(fù)位時(shí)間大約5-10mS,RST引腳加高電平8/10/202324(a)內(nèi)部時(shí)鐘方式,(b)外部時(shí)鐘方式晶振6MHZ電容EA(31):輸入EA引腳接高電平時(shí),從內(nèi)部程序存儲(chǔ)器開(kāi)始,當(dāng)程序超過(guò)內(nèi)部程序器的容量時(shí)轉(zhuǎn)到外部程序存儲(chǔ)器取指令。EA引腳接低電平時(shí),單片機(jī)轉(zhuǎn)到外部程序存儲(chǔ)器中取指令(無(wú)論片內(nèi)是否有程序存儲(chǔ)器)。外部程序存儲(chǔ)器的地址從0000H開(kāi)始編址。8/10/202325EA(31):輸入8/1/2023252.2實(shí)驗(yàn)1指令的初步認(rèn)識(shí)8/10/2023262.2實(shí)驗(yàn)1指令的初步認(rèn)識(shí)8/1/202326
從上一節(jié)我們看到MCS-51有40個(gè)管腳,我們已經(jīng)用了6個(gè),還有34個(gè),這34個(gè)管腳中有32個(gè)分成了4組,每組8個(gè),分別叫做P0.0-P0.7P1.0-P1.7P2.0-P2.7P3.0-P3.7分別叫做P0口、P1口、P2口、P3口。這4個(gè)口都是雙向(既可以輸出也可以輸入)口,但又有所不同,P0口、P2口、P3口除可以用作輸入輸出以外還有第二功能,以后用到時(shí)再講。我們的第一個(gè)實(shí)驗(yàn)是要用單片機(jī)點(diǎn)亮一只發(fā)光二極管LED或者同時(shí)點(diǎn)亮8只發(fā)光二極管。我們將這8只發(fā)光二極管接在P1.0-P1.7上(管腳1-8)。8/10/202327從上一節(jié)我們看到MCS-51有40個(gè)管腳,我們已經(jīng)用在這個(gè)圖中如果想讓某一個(gè)發(fā)光二極管(比如第1個(gè))亮怎么辦呢?當(dāng)1腳是高電平時(shí),LED不亮,只有1腳是低電平時(shí),LED才發(fā)亮。也就是說(shuō),我們要能夠讓1引腳按要求變?yōu)楦呋虻碗娖骄涂梢粤?。我們又怎樣讓它變‘高’或變‘低’呢??jì)算機(jī)能聽(tīng)得懂的命令稱(chēng)之為計(jì)算機(jī)的指令。在MCS-51中,讓一個(gè)引腳輸出高電平或低電平的指令有兩種,一種是SETB和CLR指令,這種叫做位操作指令。我們要1腳輸出高電平,只要寫(xiě)SETBP1.0,要1腳輸出低電平,只要寫(xiě)CLRP1.0就可以了。還有一種就是數(shù)據(jù)傳送指令,比如MOVP1,#data。這種指令一次同時(shí)改變P1口8位的狀態(tài)。我們要1腳輸出高電平,只要寫(xiě)MOVP1,#01H,要1腳輸出低電平,只要寫(xiě)MOVP1,#00H就可以了。
8/10/202328在這個(gè)圖中如果想讓某一個(gè)發(fā)光二極管(比如第1個(gè))亮怎么辦呢?我們?cè)鯓硬拍苡?jì)算機(jī)執(zhí)行這條指令呢?第一步借助計(jì)算機(jī)里的編輯軟件編寫(xiě)源程序?,F(xiàn)在普遍使用的是KeilC51軟件。計(jì)算機(jī)是看不懂SETBCLR之類(lèi)的指令,所以第二步把指令翻譯成計(jì)算機(jī)能懂的方式,再讓計(jì)算機(jī)去讀。計(jì)算機(jī)能懂什么呢?它只懂一樣?xùn)|西——數(shù)字。因此我們得把SETBP1.0變?yōu)椋―2H,90H),把CLRP1.0變?yōu)椋–2H,90H),至于為什么是這兩個(gè)數(shù)字,這也是由51芯片的設(shè)計(jì)者--INTEL規(guī)定的,我們不去研究。這個(gè)翻譯的過(guò)程在計(jì)算機(jī)術(shù)語(yǔ)中叫做編譯。編譯后生成的文件叫做目標(biāo)文件。第三步就要把目標(biāo)文件寫(xiě)入到單片機(jī)中去。有兩種方法一種是要借助于一個(gè)硬件工具“編程器”。還有一種就是在線(xiàn)編程ISP.
8/10/202329我們?cè)鯓硬拍苡?jì)算機(jī)執(zhí)行這條指令呢?第一步借助計(jì)算機(jī)里的編輯軟ORG0000H;存儲(chǔ)器ROM起始地址LJMP0100H;跳轉(zhuǎn)到主程序地址ORG0100H;主程序起始地址CLRP1.0;執(zhí)行指令ENDORG0000H;存儲(chǔ)器ROM起始地址CLRP1.0;執(zhí)行指令ENDORG0000H;存儲(chǔ)器ROM起始地址MOVP1,#11111110B;執(zhí)行指令END8/10/202330ORG0000H;存儲(chǔ)器ROM起始地址8/1/20233這里ORG、END是偽指令,分號(hào)后面的是注釋?zhuān)@些都是不往單片機(jī)中寫(xiě)入的,ORG是表示從程序存儲(chǔ)器ROM(只讀存儲(chǔ)器)的什么地址開(kāi)始存儲(chǔ),END表示指令結(jié)束。LJMP是跳轉(zhuǎn)指令,因?yàn)樾酒脑O(shè)計(jì)者規(guī)定,單片機(jī)ROM中的開(kāi)始一些字節(jié)有專(zhuān)門(mén)的用途,所以我們把指令從0100H這個(gè)地址開(kāi)始存儲(chǔ)。8/10/2023318/1/2023318/10/2023328/1/2023322.3單片機(jī)匯編語(yǔ)言程序初步認(rèn)識(shí)2.3.1在前邊的實(shí)驗(yàn)中我們只是點(diǎn)亮了一個(gè)LED,我們還可以讓它閃爍。閃爍實(shí)際上就是要燈亮一段時(shí)間,再滅一段時(shí)間,也就是說(shuō)要P1.0不斷地輸出低和高電平。但是程序是不是可以直接寫(xiě)入:SETBP1.0CLRP1.0這是不行的。第一,計(jì)算機(jī)執(zhí)行指令的時(shí)間很快,執(zhí)行完SETBP1.0后,燈是滅了,但在極短時(shí)間(微秒級(jí))后,計(jì)算機(jī)又執(zhí)行了CLRP0.0指令,燈又亮了,所以根本看不出燈曾經(jīng)滅過(guò)。第二,在執(zhí)行完CLRP1.0后,不會(huì)再去執(zhí)行SETBP1.0指令,以后再也沒(méi)有機(jī)會(huì)讓LED滅了。為了解決這兩個(gè)問(wèn)題,我們可以做如下設(shè)想,第一,在執(zhí)行完SETBP1.0后,延時(shí)一段時(shí)間(幾秒或零點(diǎn)幾秒)再執(zhí)行第二條指令,就可以看出LED曾經(jīng)滅過(guò)了。第二,在執(zhí)行完第二條指令后,讓計(jì)算機(jī)再去執(zhí)行第一條指令,不斷地兜圈,我們稱(chēng)之為"循環(huán)",這樣就可以完成任務(wù)了。8/10/2023332.3單片機(jī)匯編語(yǔ)言程序初步認(rèn)識(shí)8/1/2023338/10/2023348/1/202334ORG0000H;存儲(chǔ)器ROM起始地址LJMP0100H;跳轉(zhuǎn)到主程序地址ORG0100H;主程序起始地址LOOP:SETBP1.0;熄滅LED,LCALLDELAY;調(diào)用延時(shí)子程序CLRP1.0;點(diǎn)亮LEDLCALLDELAY;調(diào)用延時(shí)子程序LJMPLOOPDELAY:MOVR7,#250;工作寄存器R7賦初值D1:MOVR6,#250;工作寄存器R6賦初值D2:DJNZR6,D2;62500DJNZR7,D1RETEND8/10/202335ORG0000H由這個(gè)實(shí)驗(yàn)我們可能會(huì)提出這樣幾個(gè)問(wèn)題?1、程序中R6R7代表什么意思?2、程序的延遲是怎么實(shí)現(xiàn)的?延遲時(shí)間的長(zhǎng)短怎么確定?3、什么是匯編語(yǔ)言,匯編語(yǔ)言的基本格式是怎樣的?8/10/202336由這個(gè)實(shí)驗(yàn)我們可能會(huì)提出這樣幾個(gè)問(wèn)題?8/1/2023362.3.2工作寄存器什么是工作寄存器呢?計(jì)算機(jī)做運(yùn)算時(shí),為了要得到最終結(jié)果,往往要有很多的中間結(jié)果,這些中間結(jié)果要有個(gè)地方才行。所以在單片機(jī)中有一個(gè)區(qū)域稱(chēng)為RAM(RAM隨機(jī)存儲(chǔ)器),也叫數(shù)據(jù)存儲(chǔ)器,也就是隨時(shí)可以將數(shù)據(jù)寫(xiě)進(jìn)去,也可以在需要的時(shí)候?qū)?shù)據(jù)讀出來(lái)。在MCS-51單片機(jī)中,片內(nèi)RAM有128個(gè)字節(jié),其中最低的32個(gè)字節(jié)開(kāi)辟為工作寄存器區(qū)。8/10/2023372.3.2工作寄存器8/1/2023378/10/2023388/1/2023382.3.3CPU時(shí)序的基本概念
在上面一個(gè)實(shí)驗(yàn)中我們知道DJNZR6,D2這句話(huà)會(huì)被執(zhí)行62500次,但是執(zhí)行這么多次需要多長(zhǎng)時(shí)間呢?是否滿(mǎn)足我們的要求呢?在計(jì)算機(jī)中,為了便于管理,常把一條指令的執(zhí)行過(guò)程劃分為若干個(gè)階段,每一階段完成一項(xiàng)工作。例如,取指令、存儲(chǔ)器讀、存儲(chǔ)器寫(xiě)等,這每一項(xiàng)工作稱(chēng)為一個(gè)基本操作。完成一個(gè)基本操作所需要的時(shí)間稱(chēng)為機(jī)器周期。我們規(guī)定:計(jì)算機(jī)訪問(wèn)一次存儲(chǔ)器的時(shí)間,稱(chēng)之為一個(gè)機(jī)器周期。這是一個(gè)時(shí)間基準(zhǔn),一個(gè)機(jī)器周期包括12個(gè)時(shí)鐘周期。設(shè)一個(gè)單片機(jī)工作于12M晶振,它的時(shí)鐘周期是1/12(微秒)。它的一個(gè)機(jī)器周期是12*(1/12)也就是1微秒。在工作于6M晶振的單片機(jī)中,它的機(jī)器周期是2微秒。MCS-51單片機(jī)的所有指令中,有一些完成得比較快,只要一個(gè)機(jī)器周期就行了,有一些完成得比較慢,得要2個(gè)機(jī)器周期,還有兩條指令要4個(gè)機(jī)器周期才行。8/10/2023392.3.3CPU時(shí)序的基本概念8/1/202339
現(xiàn)在讓我們來(lái)計(jì)算剛才那段延時(shí)程序的延遲時(shí)間。首先必須知道晶振的頻率,我們所用晶振為6M,這樣一個(gè)機(jī)器周期就是2微秒。而DJNZ指令是雙周期指令,所以執(zhí)行一次需要4個(gè)微秒。一共執(zhí)行62500次,正好250000微秒,也就是250毫秒。發(fā)光二極管在一秒鐘內(nèi)亮滅各兩次。問(wèn)題:如果我們想改變二極管亮滅的頻率,該怎么辦呢?8/10/202340現(xiàn)在讓我們來(lái)計(jì)算剛才那段延時(shí)程序的延遲時(shí)間。首先必須2.4MCS-51存儲(chǔ)器組織2.4.1RAM(隨機(jī)存儲(chǔ)器)ROM(只讀存儲(chǔ)器)RAMCPU在運(yùn)行時(shí)能隨時(shí)進(jìn)行數(shù)據(jù)的寫(xiě)入讀出,電源關(guān)閉時(shí),所存信息丟失。ROM寫(xiě)入信息后,關(guān)閉電源,信息不丟失的存儲(chǔ)器,也叫非易失性存儲(chǔ)器。因此,寫(xiě)入和擦除過(guò)程比RAM復(fù)雜。根據(jù)寫(xiě)入和擦除過(guò)程的不同分:掩膜ROM、光擦除ROM、電可擦除ROM、Flash(閃存)。8/10/2023412.4MCS-51存儲(chǔ)器組織8/1/2023418/10/2023428/1/202342
2.4.2MCS-51程序存儲(chǔ)器80C51分程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,程序存儲(chǔ)器分片內(nèi)和片外兩部分,最大64K.當(dāng)EA接高電平時(shí),首先從片內(nèi)存儲(chǔ)器取指令,當(dāng)超過(guò)范圍時(shí)系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)到片外程序存儲(chǔ)器取指令。80C51片內(nèi)程序存儲(chǔ)器大小是4K(0000H-0FFFH)。隨著半導(dǎo)體技術(shù)的發(fā)展,現(xiàn)在常用的89C5X單片機(jī),使用Flash技術(shù)內(nèi)部程序存儲(chǔ)器可以達(dá)16K、32K或64K.所以一般只使用內(nèi)部程序存儲(chǔ)器就夠了。復(fù)位后,程序的第一條指令總是從0000H地址讀取。8/10/2023432.4.2MCS-51程序存儲(chǔ)器8/1/2023432.4.3MCS-51數(shù)據(jù)存儲(chǔ)器也分片內(nèi)RAM和片外RAM。片內(nèi)RAM128個(gè)字節(jié),地址00H-7FH,片外RAM最大64K,地址0000H-FFFFH●工作寄存器區(qū)32個(gè)00H-1FH●位尋址區(qū)20FH-2FH16個(gè)字節(jié),128位,00H-7FH被尋址的位可以進(jìn)行位操作。沒(méi)有用到的單元可以按通用RAM進(jìn)行字節(jié)操作。位操作還是字節(jié)操作,由指令區(qū)分例如:SETB00H;使20H單元的D0位置“1”MOV20H,#01H;兩條指令的區(qū)別是:第二條D0為“1”,D1-D7都為“0”,第一條D0為“1”,D1-D7保持不變.
8/10/2023442.4.3MCS-51數(shù)據(jù)存儲(chǔ)器8/1/202344字節(jié)地址位地址
2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20HD7D6D5D4D3D2D1D07FH7EH7DH7CH7BH7AH79H78H77H76H75H74H73H72H71H70H6FH6EH6DH6CH6BH6AH69H68H67H66H65H64H63H62H61H60H5FH5EH5DH5CH5BH5AH59H58H57H56H55H54H53H52H51H50H4FH4EH4DH4CH4BH4AH49H48H47H46H45H44H43H42H41H40H3FH3EH3DH3CH3BH3AH39H38H37H36H35H34H33H32H31H30H2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H1FH1EH1DH1CH1BH1AH19H18H17H16H15H14H13H12H11H10H0FH0EH0DH0CH0BH0AH09H08H07H06H05H04H03H02H01H00H8/10/202345字節(jié)地址位地址
2FH2EH2D
●通用RAM區(qū)80個(gè),一般用于堆?;蚱渌僮鳌衿釸AM64K0000H-FFFFH低地址與片內(nèi)RAM重合。靠指令區(qū)分:MOV38H,#80H;片內(nèi)RAMMOVX@DPTR,#80H片外RAM8/10/202346●通用RAM區(qū)80個(gè),一般用于堆?;蚱渌僮?/2.4.4MCS-51的特殊功能寄存器(SFR)●21個(gè),與片內(nèi)RAM統(tǒng)一編址,分布在80H-FFH地址空間內(nèi)?!褡止?jié)地址能被8整除的(即十六進(jìn)紙的地址碼尾數(shù)為0或8的)單元可以具有位地址功能。例如:P0(字節(jié)地址80H位地址80H-87H)P1(字節(jié)地址90H位地址90H-97H)P2(字節(jié)地址A0H位地址A0H-A7H)P3(字節(jié)地址B0H位地址B0H-B7H)ACC(字節(jié)地址E0H位地址E0H-E7H)●每個(gè)寄存器都有一個(gè)名字,不用記它的地址號(hào)。8/10/2023472.4.4MCS-51的特殊功能寄存器(SFR)8/1/符號(hào)單元地址名稱(chēng)位地址符號(hào)地址*ACCE0H累加器ACC.7~ACC.0E7H~E0H*BF0H乘法寄存器B.7~B.0F7H~F0H*PSWD0H程序狀態(tài)字PSW.7~PSW.0D7H~D0HSP81H堆棧指針
DPL82H數(shù)據(jù)存儲(chǔ)器指針(低8位)
DPH83H數(shù)據(jù)存儲(chǔ)器指針(高8位)
*IEA8H中斷允許控制器IE.7~I(xiàn)E.0AFH~A8H*IPB8H中斷優(yōu)先控制器IP.7~I(xiàn)P.0BFH~B8H*P080H通道0P0.7~P0.087H~80H*P190H通道1P1.7~P1.097H~90H*P2A0H通道2P2.7~P2.0A7H~A0H*P3B0H通道3P3.7~P3.0B7H~B0HPCON87H電源控制及波特率選擇
*SCON98H串行口控制SCON.7~SCON.09FH~98HSBUF99H串行數(shù)據(jù)緩沖器
*TCON88H定時(shí)控制TCON.7~TCON.08FH~88HTMOD89H定時(shí)器方式選擇
TL08AH定時(shí)器0低8位
TL18BH定時(shí)器1低8位
TH08CH定時(shí)器0高8位
TH18DH定時(shí)器1高8位
8/10/202348符號(hào)單元地址名稱(chēng)位地址符號(hào)地址*ACCE0H累加器ACC.●累加器(Acc)運(yùn)算指令的目標(biāo)寄存器,用于訪問(wèn)外部存儲(chǔ)器的唯一寄存器。●B寄存器(B)專(zhuān)用于乘除法指令,亦可作通用寄存器?!穸褩V羔槪⊿P)棧指針復(fù)位狀態(tài)07H●數(shù)據(jù)指針(DPTR)16位寄存器,由兩個(gè)8位寄存器DPH與DPL組成。主要作用是提供訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或I/O端口的地址。DPH與DPL可作為通用寄存器使用。●程序計(jì)數(shù)器(PC)即指令指針。16位寄存器,為CPU提供當(dāng)前待取的指令地址。CPU每讀取一個(gè)字節(jié)的指令內(nèi)容,PC即自動(dòng)加一。復(fù)位狀態(tài)為0000H。不能在程序中直接讀或修改PC的內(nèi)容?!?/p>
8/10/202349●累加器(Acc)●8/1/2023492.5MCS-51的并行口操作2.5.1●4個(gè)并行口,8位,輸入/輸出,每一條口線(xiàn)都可以單獨(dú)用作位輸入/輸出?!馪0口:用作地址/數(shù)據(jù)總線(xiàn),分時(shí)復(fù)用技術(shù),執(zhí)行輸出指令時(shí),低8位地址信息、8位數(shù)據(jù)信息先后出現(xiàn)在P0口(地址/數(shù)據(jù)總線(xiàn))上。執(zhí)行輸入指時(shí),先輸出8位地址,然后數(shù)據(jù)進(jìn)入內(nèi)部數(shù)據(jù)總線(xiàn)?!馪2口:在有外部ROM或擴(kuò)展了外部RAM時(shí),用作地址的高8位。
8/10/2023502.5MCS-51的并行口操作8/1/2023508/10/2023518/1/202351單片機(jī)在讀寫(xiě)外部數(shù)據(jù)時(shí),P0口上首先出現(xiàn)的是低8位地址,然后是數(shù)據(jù)信號(hào),當(dāng)然地址信號(hào)與指令數(shù)據(jù)信號(hào)之間有一段緩沖的過(guò)度時(shí)間,這就要求,在數(shù)據(jù)信號(hào)出現(xiàn)以前必須把低8位的地址信號(hào)保存起來(lái),這時(shí)是用ALE選通脈沖去控制鎖存器把低8位地址予以鎖存。這就是說(shuō)在一個(gè)單片機(jī)的系統(tǒng)中,只要外部擴(kuò)展有存儲(chǔ)器或輸入輸出設(shè)備,就必須增加一片鎖存器器件(74LS273或74LS373)。所以單片機(jī)上有一個(gè)引腳ALE,用來(lái)區(qū)別P0輸出的是地址還是數(shù)據(jù)。
8/10/202352單片機(jī)在讀寫(xiě)外部數(shù)據(jù)時(shí),P0口上首先出現(xiàn)的是低8位地址,然后
●P3口的第二功能P3.0RXD(串行口數(shù)據(jù)輸入)P3.1TXD(串行口數(shù)據(jù)輸出)P3.2INT0(外部中斷0輸入)P3.3INT1(外部中斷1輸入)P3.4T0(定時(shí)器0外部輸入)P3.5T1(定時(shí)器1外部輸入)P3.6WR(外部數(shù)據(jù)存儲(chǔ)器“寫(xiě)”控制信號(hào))P3.7RD(外部數(shù)據(jù)存儲(chǔ)器“讀”控制信號(hào))●P1口:I/O口8/10/202353●P3口的第二功能8/1/2023532.5.2
什么時(shí)間用到口的第二功能?要不要預(yù)先設(shè)置?回答是:不用,靠指令來(lái)區(qū)分?!馦OVX指令時(shí):P0P2P3(WRRD)●外部取指令時(shí):P0P2●串口I/O功能處于運(yùn)行狀態(tài)用到RXDTXD●外部中斷已打開(kāi)時(shí)用到INT0INT1●定時(shí)器/計(jì)數(shù)器處于外部計(jì)數(shù)狀態(tài)時(shí)用到T0T18/10/2023542.5.2什么時(shí)間用到口的第二功能?要不要預(yù)先設(shè)置?8/2.5.3并行口使用注意事項(xiàng)1、P0口做為I/O使用時(shí),要接上拉電阻。(一般5K-10K)其他幾個(gè)口內(nèi)部有上拉電阻。2、注意每根口線(xiàn)的負(fù)載能力(最大吸收電流),和整個(gè)口吸收電流的總和限制。3、4個(gè)口都是雙向口。當(dāng)需要讀口的引腳狀態(tài)時(shí),必需先向口鎖存器寫(xiě)入“1”,然后再讀數(shù)據(jù)。8/10/2023552.5.3并行口使用注意事項(xiàng)8/1/2023558/10/2023568/1/202356
第三章MCS-51的指令系統(tǒng)3.1指令:是CPU按照人們的意圖來(lái)完成某種操作的命令。一臺(tái)計(jì)算機(jī)的CPU所能執(zhí)行的全部指令的集合稱(chēng)為這個(gè)CPU的指令系統(tǒng)。MCS-51指令系統(tǒng)共有111條指令。
單字節(jié)指令:49條單周期指令:64條雙字節(jié)指令:48條雙周期指令:45條三字節(jié)指令:17條四周期指令:2條8/10/202357第三章MCS-51的指令系統(tǒng)8/符號(hào)約定:Rn表示當(dāng)前工作寄存器中的R0
R7Direct表示對(duì)內(nèi)部單元直接尋址的8位地址Ri表示8位地址指針
R0或
R1,地址在R0或R1中。DPTR表示16位地址指針,地址在DPTR中。#data表示8位立即數(shù)。#data16表示16位立即數(shù)。A+基地址表示以A為變址寄存器。addr11表示短轉(zhuǎn)移的11位地址。addr16表示長(zhǎng)轉(zhuǎn)移的16位地址。rel表示相對(duì)轉(zhuǎn)移的地址偏移量。bit表示位地址。(xx)表示XX單元的內(nèi)容,如(A)表示寄存器A的內(nèi)容。((xx))表示以(xx)為指針,所指單元的內(nèi)容。例如,((DPTR))表示數(shù)據(jù)指針DPTR所指單元的內(nèi)容。8/10/202358符號(hào)約定:8/1/202358程序狀態(tài)字(PSW)Cy:進(jìn)位(借位)標(biāo)志;位操作累加器。AC:半進(jìn)位(借位)標(biāo)志,低半字節(jié)向上有進(jìn)位(借位)時(shí)。F0:用戶(hù)標(biāo)志,由用戶(hù)自行設(shè)置,在程序運(yùn)行中標(biāo)識(shí)某種狀態(tài)。OV:溢出標(biāo)志。有符號(hào)數(shù)加減運(yùn)算發(fā)生溢出時(shí)置位。P:奇偶標(biāo)志(標(biāo)識(shí)Acc的當(dāng)前奇偶狀態(tài)),奇數(shù)個(gè)1時(shí),P=1
RS1RS0:寄存器組選擇8/10/202359程序狀態(tài)字(PSW)RS1RS0:寄存器組選擇8/1/202●累加器(Acc)運(yùn)算指令的目標(biāo)寄存器,用于訪問(wèn)外部存儲(chǔ)器的唯一寄存器。●B寄存器(B)專(zhuān)用于乘除法指令,亦可作通用寄存器?!穸褩V羔槪⊿P)棧指針復(fù)位狀態(tài)07H●數(shù)據(jù)指針(DPTR)16位寄存器,由兩個(gè)8位寄存器DPH與DPL組成。主要作用是提供訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或I/O端口的地址。DPH與DPL可作為通用寄存器使用?!癯绦蛴?jì)數(shù)器(PC)即指令指針。16位寄存器,為CPU提供當(dāng)前待取的指令地址。CPU每讀取一個(gè)字節(jié)的指令內(nèi)容,PC即自動(dòng)加一。復(fù)位狀態(tài)為0000H。不能在程序中直接讀或修改PC的內(nèi)容。8/10/202360●累加器(Acc)8/1/2023603.2尋址方式基本尋址方式:寄存器尋址直接尋址寄存器間接尋址立即尋址擴(kuò)展尋址方式:變址尋址相對(duì)尋址位尋址8/10/2023613.2尋址方式8/1/2023613.2.1寄存器尋址:操作數(shù)放在寄存器中,指令中直接給出該寄存器的名稱(chēng)的尋址方式例如:若(R0)=30H,指令MOVA,R0執(zhí)行后(A)=30H采用寄存器尋址的寄存器可以為:工作寄存器R0-R7累加器A寄存器B數(shù)據(jù)指針DPTR8/10/2023623.2.1寄存器尋址:操作數(shù)放在寄存器中,指令中直接給3.2.3直接尋址:在指令中給出了參與運(yùn)算的操作數(shù)所在單元的地址,或所在位的位地址。例如:MOVA,20H若(20H)=55H指令運(yùn)行后(A)=55H即把20單元的內(nèi)容(數(shù))送累加器A直接尋址方式可以有3種地址空間:1、內(nèi)部RAM:00H-7FH2、21個(gè)特殊功能寄存器3、位尋址空間
8/10/2023633.2.3直接尋址:在指令中給出了參與運(yùn)算的操作數(shù)所在單3.2.4立即尋址:指令碼中直接給出操作數(shù)的尋址方式緊跟在操作碼之后的操作數(shù)稱(chēng)為立即數(shù),立即數(shù)可以是一個(gè)字節(jié),也可以是兩個(gè)字節(jié),并要用“#”來(lái)標(biāo)識(shí)。例如:MOVA,#50H注意與MOVA,50H的區(qū)別MOVDPTR,#2100H由于立即數(shù)是一個(gè)常數(shù),所以只能作為源操作數(shù)。立即尋址對(duì)應(yīng)的尋址空間位ROM空間8/10/2023643.2.4立即尋址:指令碼中直接給出操作數(shù)的尋址方式8/13.2.5寄存器間接尋址:寄存器中的內(nèi)容為地址,從該地址去取操作數(shù)的尋址方式。作為地址寄存器的寄存器只有R0、R1、DPTR,在指令中表示為@R0、@R1、@DPTR。若(R0)=30H,(30H)=5AH,指令MOVA,@R0z執(zhí)行后(A)=5AH.寄存器間接尋址的尋址范圍:1、片內(nèi)RAM00H-7FH(采用@R0@R1)2、片外RAM0000H-FFFFH@DPTR指出地址,也可由@R0和@R1指出操作數(shù)所在單元的低8位地址,此時(shí)高8位地址由P2口提供。
●片內(nèi)RAM的數(shù)據(jù)傳送用MOV類(lèi)指令,片外RAM的數(shù)據(jù)傳送用MOVX類(lèi)指令8/10/2023653.2.5寄存器間接尋址:寄存器中的內(nèi)容為地址,從該地址3.2.6位尋址方式對(duì)位地址中的內(nèi)容進(jìn)行操作的尋址方式.位尋址方式的實(shí)質(zhì)是屬于位的直接尋址。例如:MOVC,00H若位地址00H的內(nèi)容為1,執(zhí)行后PSW.7(Cy)的內(nèi)容為1.CLR07HSETBACC.6位尋址空間:1、片內(nèi)RAM的20H-2FH單元的128個(gè)可尋址位2、SFR的可尋址位(常用符號(hào)位地址表示)
8/10/2023663.2.6位尋址方式對(duì)位地址中的內(nèi)容進(jìn)行操作的尋址方式3.3數(shù)據(jù)傳送類(lèi)指令3.3.1MOV型指令將源操數(shù)內(nèi)容送到目的操作數(shù)中,或?qū)⒃床僮鲾?shù)和目的操作數(shù)進(jìn)行交換。1、以累加器為目的的操作數(shù)(4條)MOVA,#DATA;MOVA,direct;MOVA,Rn;MOVA,@Ri;2、以直接地址為目的的操作數(shù)(5條)MOVdirect,#DATA;MOVdirect,direct;MOVdirect,Rn;MOVdirect,@Ri;MOVdirect,A8/10/2023673.3數(shù)據(jù)傳送類(lèi)指令8/1/202367舉例并說(shuō)出指令運(yùn)行結(jié)果:
MOVA,R1;將工作寄存器R1中的值送入到累加器A中,R1中的值保持不變。
MOVA,50H;將內(nèi)存50H單元中的值送入到累加器A中,50H單元中的值保持不變。
MOVA,@R1;先看R1中是什么值,把這個(gè)值當(dāng)做地址,并將這個(gè)地址單元中的值送入累加器A中,前面我們已學(xué)過(guò),這是寄存器間接尋址方式。
8/10/202368舉例并說(shuō)出指令運(yùn)行結(jié)果:
MOVA,R1;將工作寄存器R
3、以寄存器Rn為目的操作數(shù)(3條)MOVRn,#DATA;MOVRn,directMOVRn,A4、以寄存器間接尋址為目的操作數(shù)(3條)MOV@Ri,#DATA;MOV@Ri,directMOV@Ri,A5、以數(shù)據(jù)指針為目的的16位數(shù)據(jù)傳送(1條)MOVDPTR,#DATA16;
8/10/2023693、以寄存器Rn為目的操作數(shù)(3條)8/1/202
3.3.2MOVX型指令(4條)
是用于片內(nèi)和片外數(shù)據(jù)交換的唯一方式。MOVXA,@DPTRMOVX@DPTR,AMOVXA,@RiMOVX@Ri,A
應(yīng)用例1:將內(nèi)部30H單元的內(nèi)容送外部數(shù)據(jù)存儲(chǔ)器4000H單元。MOVR0,#30H;設(shè)置(內(nèi)部)源指針MOVDPTR,#4000H;設(shè)置(外部)目標(biāo)指針MOVA,@R0;讀源數(shù)據(jù)MOVX@DPTR,A;寫(xiě)目標(biāo)數(shù)據(jù)應(yīng)用例2:讀外部RAM3000H單元內(nèi)容MOVP2,#30H;由P2口提供高8位地址30HMOVR0,#0;低8位地址為00HMOVXA,@R0;讀(3000H)單元
8/10/2023703.3.2MOVX型指令(4條)8/1/202注意:
1、在89C51中,與外部存儲(chǔ)器RAM打交道的只可以是累加器A,所有需要送入外部RAM的數(shù)據(jù)必須要通過(guò)A送出去。而所有要讀入外部RAM中的數(shù)據(jù)也必需要通過(guò)A讀入。內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)傳遞,而外部則不行。比如,要將外部RAM中某單元(設(shè)為110H單元的數(shù)據(jù))送入另外一個(gè)單元(設(shè)為200H單元),也必須要先將110H單元中的內(nèi)容讀入A,然后再送入200H單元中去。2、要讀寫(xiě)外部的RAM,當(dāng)然也必須要先知道RAM的地址,在前兩條指令中,地址是被地址放在DPTR中的,而后兩條指令,由于Ri(即R0或R1)只是一個(gè)8位的寄存器,所以只能提供低8位地址,必須用P2口提供高8位地址。3、使用時(shí)應(yīng)當(dāng)首先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫(xiě)命令。
8/10/202371注意:
1、在89C51中,與外部存儲(chǔ)器RAM打交道的只可以3.3.3MOVC型指令(2條)用于對(duì)程序存儲(chǔ)器的操作MOVCA,@A+PCMOVCA,@A+DPTR
用于讀取ROM中的常數(shù)例如:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0-5)MOVDPTR,#TABLEMOVA,R0MOVCA,@A+DPTR..TABLE:DB0,1,4,9,16,25
8/10/2023723.3.3MOVC型指令(2條)用于對(duì)程序存儲(chǔ)器的操作8/3.3.4堆棧操作指令(2條)堆棧是在內(nèi)部RAM中按“后進(jìn)先出”規(guī)則開(kāi)辟的一片存儲(chǔ)區(qū)。用來(lái)保護(hù)CPU執(zhí)行程序的現(xiàn)場(chǎng)。如CPU相應(yīng)中斷和子程序調(diào)用時(shí)的返回地址、重要的單元和寄存器的內(nèi)容等。其中保護(hù)重要的單元和寄存器的內(nèi)容采用堆棧操作指令完成。PUSHdirect;SP←(SP)+1(SP)←(direct)POPdirect;(direct)←((SP))SP←(SP)-1使用堆棧指令時(shí)應(yīng)注意:1、PUSH和POP指令的操作數(shù)必須是單元地址。2、MCS-51的堆棧建在內(nèi)部RAM中,系統(tǒng)復(fù)位后(SP)=07H.在應(yīng)用系統(tǒng)中一般把棧區(qū)開(kāi)辟
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024跨國(guó)廣告代理協(xié)議
- 2025年度產(chǎn)學(xué)研合作項(xiàng)目技術(shù)研發(fā)與市場(chǎng)應(yīng)用協(xié)議4篇
- 2024年04月浙江臺(tái)州銀行寧波分行社會(huì)招考(422)筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度分手后子女撫養(yǎng)協(xié)議書(shū)范本下載3篇
- 2025年度城市綜合體場(chǎng)地服務(wù)合作合同4篇
- 2025年度國(guó)際商務(wù)大廈廠房租賃合同英文版3篇
- 2024版智能穿戴設(shè)備技術(shù)轉(zhuǎn)讓合同
- 2025年度廠房設(shè)備融資租賃與市場(chǎng)拓展合同4篇
- 2024年03月重慶重慶銀行貿(mào)易金融部招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度產(chǎn)學(xué)研合作人才培養(yǎng)及項(xiàng)目支持協(xié)議4篇
- 《線(xiàn)控底盤(pán)技術(shù)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 學(xué)校對(duì)口幫扶計(jì)劃
- 倉(cāng)庫(kù)倉(cāng)儲(chǔ)安全管理培訓(xùn)課件模板
- 風(fēng)力發(fā)電場(chǎng)運(yùn)行維護(hù)手冊(cè)
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》專(zhuān)題培訓(xùn)
- 河道旅游開(kāi)發(fā)合同
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書(shū)范本
- 安徽省合肥市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的國(guó)內(nèi)外文獻(xiàn)綜述》2700字
- 儒家思想講解課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論