《單片機原理及應(yīng)用》結(jié)構(gòu)與功能.ppt
《《單片機原理及應(yīng)用》結(jié)構(gòu)與功能.ppt》由會員分享,可在線閱讀,更多相關(guān)《《單片機原理及應(yīng)用》結(jié)構(gòu)與功能.ppt(257頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單片機原理及應(yīng)用教程,本書主要內(nèi)容,單片機基礎(chǔ)知識 單片機的組成與結(jié)構(gòu)分析 MCS-51 單片機的指令系統(tǒng) 單片機的程序設(shè)計 MCS-51單片機的中斷系統(tǒng) 定時/計數(shù)器 單片機的串行通信及接口 MCS-51單片機的系統(tǒng)擴展 接口技術(shù) MCS-51兼容機及串行總線擴展,第1章 單片機的基礎(chǔ)知識,微型計算機的系統(tǒng)組成 單片機概述 不同計數(shù)制之間的轉(zhuǎn)換 數(shù)的表示方法 思考練習(xí)題,1.1 微型計算機的系統(tǒng)集成,,1.1 微型計算機的系統(tǒng)組成,1.1.1 主機,主機一般由運算器、控制器和主存儲器組成。,1. 運算器,運算器是進行算術(shù)和邏輯運算的部件,它由完成加法運算的加法器、存放操作數(shù)和運算結(jié)果的寄存器
2、和累加器等組成。,2. 控制器 它是整個計算機硬件系統(tǒng)的指揮中心,根據(jù)不同的指令產(chǎn)生不同的動作,指揮整個機器有條不紊地自動地進行工作。,3. 主存儲器 主存儲器又稱為內(nèi)存儲器,它由大量的存儲單元組成,用以存儲大量的數(shù)據(jù)及程序。,1.1.2 外部設(shè)備,1. 輸入設(shè)備,目前常用的有鍵盤、軟驅(qū)、磁帶機、光驅(qū)等,2. 輸出設(shè)備,常用的有顯示器、打印機、繪圖儀等,3.外存儲器,常用的外存有磁帶、磁盤、光盤,其中磁盤又可分為硬盤及軟盤。,1.2 單片機概述,1.2.1 單片機的發(fā)展概況,,第一階段(19711976),,,第二階段(19761979),,第三階段(19791982),,,第四階段(1982
3、1990),,第五階段(1990至今),,,1.2.2 單片機的應(yīng)用,1. 在工業(yè)測控中的應(yīng)用 2. 在智能產(chǎn)品中的應(yīng)用 3. 在計算機網(wǎng)絡(luò)與通信技術(shù)中的應(yīng)用,1.2.3 單片機的發(fā)展趨勢,1.3 不同計數(shù)制之間的轉(zhuǎn)換,1.3.1 十進制數(shù),一個十進制數(shù),它的數(shù)值是由數(shù)碼0,1,2,,8,9來表示的。數(shù)碼所處的位置不同,代表數(shù)的大小也不同。,例如:53478=5104+3103+4102+7101+8100,對應(yīng)于:,,1.3.2 二進制數(shù),二進制是按“逢二進一”的原則進行計數(shù)的。二進制數(shù)的基為“2”,即其使用的數(shù)碼為0、1,共兩個。二進制數(shù)的權(quán)是以2為底的冪。,例如:10110100=127
4、+026+125+124+023+122+021+020, 對應(yīng)于:,其各位的權(quán)為1,2,4,8,,即以2為底的0次冪、1次冪、2次冪等。 (10110100)2127+026+125+124+023+122+021+020=180,,1.3.3 十六進制數(shù),十六進制數(shù)的基為16,即基數(shù)碼共有l(wèi)6個:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn)。其中A,B,C,D,E,F(xiàn)分別代表值為十進制數(shù)中的10,11,12,13,14,15。十六進制的權(quán)為以16為底的冪。,例如:4F8E=4163+F162+8161+E160=20366,對應(yīng)于:,,常用計數(shù)制表示數(shù)的方法比較,1.3.
5、4 不同進制數(shù)之間的轉(zhuǎn)換,1. 十進制數(shù)轉(zhuǎn)換成二進制數(shù)的方法,就是用2去除該十進制數(shù),得商和余數(shù),此余數(shù)為二進制代碼的最小有效位(LSB)或最低位的值;再用2除該商數(shù),又可得商數(shù)和余數(shù),則此余數(shù)為LSB左鄰的二進制代碼(次低位)。依此類推,從低位到高位逐次進行,直到商是0為止,就可得到該十進制數(shù)的二進制代碼。,,除二取余法,1.3.4 不同進制數(shù)之間的轉(zhuǎn)換,例如:將(67)10轉(zhuǎn)換成二進制數(shù),過程如下:,,即:(67)10=(1000011)2。,1.3.4 不同進制數(shù)之間的轉(zhuǎn)換,1. 十進制數(shù)轉(zhuǎn)換成二進制數(shù)的方法,將已知十進制的小數(shù)乘以2之后,可能有進位,使整數(shù)位為1(當(dāng)該小數(shù)大于0.5時)
6、,也可能沒有進位,其整數(shù)位仍為零。該整數(shù)位的值為二進制小數(shù)的最高位。再將乘積的小數(shù)部分乘以2,所得整數(shù)位的值為二進制小數(shù)的次高位。依此類推,直到滿足精度要求或乘2后的小數(shù)部分為0為止。,乘二取整法,例如:將(0.625)10轉(zhuǎn)換成二進制數(shù),其過程如下:,,,即:(0.625)10=(0.101)2,1.3.4 不同進制數(shù)之間的轉(zhuǎn)換,2. 二進制數(shù)轉(zhuǎn)換為十進制數(shù)的方法,將二進制數(shù)轉(zhuǎn)換成十進制數(shù)時,只要將二進制數(shù)各位的權(quán)乘以各位的數(shù)碼(0或1)再相加即可。 例如:將(1101.1001)2制轉(zhuǎn)換成十進制數(shù): (1101.1001)2123+122+021+120+12-1+02-2+02-3+12
7、-48+4+0+1+0.5+0+0+0.0625=(13.5625)10,1.3.4 不同進制數(shù)之間的轉(zhuǎn)換,3. 二進制與十六進制數(shù)之間的轉(zhuǎn)換方法,二進制數(shù)轉(zhuǎn)換成十六進制數(shù) 例如:把(101101101.1100101)2轉(zhuǎn)換成十六進制數(shù)。,,即:(101101101.1100101)2=(16D.CA)16。,1.3.4 不同進制數(shù)之間的轉(zhuǎn)換,2)十六進制數(shù)轉(zhuǎn)換成二進制數(shù) 將十六進制數(shù)轉(zhuǎn)換成二進制數(shù)時,只要將每1位十六進制數(shù)用4位相應(yīng)的二進制數(shù)表示即可完成轉(zhuǎn)換。 例如:將(ECA16)16轉(zhuǎn)換成二進制數(shù)。,,即:(ECA16)16=(11101100101000010110)2。,1.3.5
8、 二進制數(shù)的算術(shù)運算規(guī)則,1. 二進制加法基本規(guī)則,0+0=0 0+1=1+0=1 1+1=0向鄰近高位有進位 1+1+1=1向鄰近高位有進位,2. 二進制減法基本規(guī)則,0-0=0 1-1=0 1-0=1 0-1=1向鄰近高位有借位,3. 二進制乘法基本規(guī)則,00=0 01=10=0 11=1,4. 二進制除法基本規(guī)則,1/1=1 0/1=0,1. 邏輯與運算基本規(guī)則,00=0 10=01=0 11=1,2. 邏輯或運算基本規(guī)則,00=0 10=01=1 11=1,1.3.6 邏輯運算,3. 邏輯非運算基本規(guī)則,/0=1 /1=0,4. 邏輯異或運算基本規(guī)則,00=11=0 10=01=1,1
9、.4.1 真值與機器數(shù),單片機用來表示數(shù)的形式稱為機器數(shù),也稱為機器碼。而把對應(yīng)于該機器數(shù)的算術(shù)值稱為真值。,設(shè): N1=+1010101 N2=-1010101 這兩個數(shù)在機器中表示為: N1:01010101 N2:11010101,1.4 數(shù)的表示方法,,在計算機中還有一種數(shù)的表示方法,即機器中的全部有效位均用來表示數(shù)的大小,此時無符號位,這種表示方法稱為無符號數(shù)的表示方法。,,1.4.2 原碼、反碼、補碼,1. 原碼表示法,原碼表示法是最簡單的一種機器數(shù)表示法,只要把真值的符號部分用0或1表示即可。 例如:真值為+34與-34的原碼形式為: +34原=00100010 -34原
10、=10100010 0的原碼有兩種形式: +0原=00000000 -0原=10000000,1.4 數(shù)的表示方法,,8位二進制數(shù)原碼的表示范圍為:1111111101111111,對應(yīng)于-127+127。,2. 反碼表示法,反碼是二進制數(shù)的另一種表示形式,正數(shù)的反碼與原碼相同;負數(shù)的反碼是將其原碼除符號位外按位求反。即原來為1變?yōu)?,原來為0變?yōu)?。 例如: +34反=+34原=00100010 -34原=10100010,-34反=11011101 0的反碼也有兩種形式: +0反=00000000 -0反=11111111 8位二進制數(shù)反碼的表示范圍為:1000000001111111,對
11、應(yīng)于-127+127。,1.4 數(shù)的表示方法,,3. 補碼表示法,1.4 數(shù)的表示方法,,正數(shù)的補碼表示方法與原碼相同,負數(shù)的補碼表示方法為它的反碼加1。 例如:-21原=10010101 -21反=11101010 -21補=11101011 0的補碼只有一種表示方法,即+0補=-0補=00000000。 8位二進制數(shù)的補碼所能表示的范圍為1000000101111111,對應(yīng)于-128+127。,1.4.3 BCD碼,1.4.4 ASCII碼,ASCII碼是一種8位代碼,最高位一般用于奇偶校驗,用其余的7位代碼來對128個字符編碼,其中32個是控制字符,96個是圖形字符。,1.5 思考練習(xí)
12、題,(1)微型計算機由哪幾部分組成? (2)什么是單片機?它與一般微型計算機在結(jié)構(gòu)上有什么區(qū)別? (3)單片機主要應(yīng)用在哪些方面? (4)將下面的一組十進制數(shù)轉(zhuǎn)換成二進制數(shù): 567423198968 14276.870.3759.32583.625134.0625 (5)將下面的二進制數(shù)轉(zhuǎn)換成十進制數(shù)和十六進制數(shù): 1011001110100101111010011001111010000101 11000101111011101000110011011.11101.01101 (6)原碼已經(jīng)在下面列出,試寫出各數(shù)的反碼與補碼: 1000110110101100111010111000100
13、1 11111111011000010111000111111001,第2章 單片機的組成與結(jié)構(gòu)分析, MCS-51 單片機的外部引腳及功能 MCS-51單片機的并行輸入輸出端口 MCS-51單片機的內(nèi)部結(jié)構(gòu) CPU的結(jié)構(gòu)和功能 存儲器的組織結(jié)構(gòu) 單片機指令時序 思考練習(xí)題,一片半導(dǎo)體硅片集成:中央處理單元(CPU)、存儲器(RAM、ROM)、并行I/O、串行I/O、定時器/計數(shù)器、中斷系統(tǒng)、系統(tǒng)時鐘電路及系統(tǒng)總線的微型計算機。 具有微型計算機的屬性,因而被稱為單片微型計算機,簡稱單片機。,,2.1 MCS-51單片機的外部引腳及功能,2.1.1 引腳,(b)雙列直插式封裝,(a)方形封裝,2
14、.1.2 外接晶振或外部時鐘信號輸入端,,,,(a)內(nèi)部振蕩器方式 (b)外部振蕩器方式 圖2.12 8051單片機的振蕩器方式,表2.4 按不同工藝制造的單片機芯片外接振蕩器時的接法,2.1.3 輸入輸出引腳,,P0.0P0.7:通道0是一個8位漏極開路的雙向輸入輸出通道。在外接存儲器或者擴展I/O接口時,P0口作為復(fù)用的低8位地址總線和雙向數(shù)據(jù)總線。在不擴展存儲器或者I/O接口時,作為準(zhǔn)雙向輸入輸出接口。 P1.0P1.7:只有一種功能,即準(zhǔn)雙向I/O口。 P2.0P2.7:可作為準(zhǔn)雙向I/O口使用;但在接有片外存儲器或擴展I/O接口范圍超過256B時,則該口一般只能作為高8位地址
15、總線使用。 P3.0P3.7:該口除了作為準(zhǔn)雙向口外,還具有第二功能。,2.1.4 控制線,1. ALE/,2.,,3.,,/VPP,4. RST,,,(a)上電復(fù)位 (b)電平開關(guān)復(fù)位 圖2.13 復(fù)位電路,2.2 MCS-51單片機的并行輸入輸出端口,2.2.1 P0口結(jié)構(gòu),1. P0用作通用I/O口,2. P0用作地址/數(shù)據(jù)總線分時復(fù)用方式,,2.2.2 P2口結(jié)構(gòu),1. P2口用作地址總線,2. P2口用作通用I/O口,,,2.2.3 P3口結(jié)構(gòu),2.2.4 P1口結(jié)構(gòu),,,,2.3 MCS-51單片機的內(nèi)部結(jié)構(gòu),,2.3 MCS-51單片機的內(nèi)部結(jié)構(gòu),,其基本特性如下: 8
16、位CPU,含片內(nèi)振蕩器; 4KB的程序存儲器ROM; 128B的數(shù)據(jù)存儲器RAM; 64KB的外部程序存儲器尋址能力; 64KB的外部數(shù)據(jù)存儲器尋址能力; 32根輸入輸出(I/O)線; 2個16位定時/計數(shù)器; 1個全雙工異步串行口; 21個特殊功能寄存器; 5個中斷源,2個優(yōu)先級; 具有位尋址功能。,CPU結(jié)構(gòu),CPU是8051內(nèi)部的一個字長為8位的中央處理單元,它包括三部分:運算器、控制器和專用寄存器組。,2.3 CPU的結(jié)構(gòu)和功能,2.3.1 運算器,8051單片機的運算器由算術(shù)/邏輯運算單元ALU、累加器A、寄存器B、暫存器1、暫存器2以及程序狀態(tài)字寄存器PSW組成。,,圖2.2 PS
17、W寄存器各位的標(biāo)志符號,表2.1 寄存器PSW各位的功能、標(biāo)志符號與相應(yīng)的位地址,2.3.2 控制器,8051單片機的控制器由指令寄存器(IR)、定時控制邏輯和振蕩器(OSC )等電路組成。相關(guān)寄存器有指令譯碼器、堆棧指針SP、程序計數(shù)器PC、數(shù)據(jù)指針DPTR、RAM地址寄存器以及16位地址緩沖器等組成。 IR主要用于存放從程序存儲器中取出的指令碼;定時控制邏輯用于對指令寄存器的指令進行譯碼,在OSC的配合下產(chǎn)生指令的時序脈沖,完成相應(yīng)指令的執(zhí)行; OSC是控制器的核心,它產(chǎn)生矩形時鐘脈沖序列,并為控制器提供時鐘脈沖;時鐘頻率的高低是衡量單片機的重要性能指標(biāo)之一。,2.3.3 專用寄存器組,專
18、用寄存器主要用于存放當(dāng)前要執(zhí)行的命令在存儲器中的存儲單元地址、存放操作數(shù)和指令執(zhí)行后的各種狀態(tài)等。它主要由堆棧指針SP、程序計數(shù)器PC、數(shù)據(jù)指針DPTR、累加器ACC、通用寄存器B、RAM地址寄存器以及16位地址緩沖器等組成。 程序計數(shù)器PC----是一個16位的程序地址寄存器,用來存放將要執(zhí)行下一條指令所在存儲單元的地址。編碼范圍0000HFFFFH,尋址范圍為64KB。 累加器ACC---8位寄存器,主要用來存放參與運算的操作數(shù)和ALU運算的結(jié)果。 數(shù)據(jù)指針DPTR--- 16位寄存器,主要用來存放數(shù)據(jù)存儲器RAM的地址。,堆棧指針SP---用戶在內(nèi)部RAM中專門開辟的一個專用存儲區(qū)域。
19、 存儲數(shù)據(jù)原則: “先進后出,后進先出”。 通用寄存器B---8位寄存器,在執(zhí)行乘除法運算時,用來存放其中一個操作數(shù)和運算結(jié)果中的一部分。,,2.4 存儲器的組織結(jié)構(gòu),存儲器的功能是存儲信息(即程序與數(shù)據(jù))。存儲器是組成計算機的主要部件,目前所使用的存儲器以半導(dǎo)體存儲器為主。從功能上來劃分,半導(dǎo)體存儲器可分為兩大類:即只讀存儲器(ROM),和隨機存儲器(RAM)。 它通常分為三個存儲空間:1、片內(nèi)、片外統(tǒng)一連續(xù)編址的0000HFFFFH共64KB的程序存儲器空間; 2、地址從0000HFFFFH的片外數(shù)據(jù)存儲器空間; 3、地址從00HFFH的256B的片內(nèi)數(shù)據(jù)存儲器空間;,,2.4.1 MCS
20、-51單片機的存儲器結(jié)構(gòu),,圖2.3 8051存儲器配置圖,2.4.2 程序存儲器,程序是控制計算機運行的一系列命令。計算機能夠識別并執(zhí)行的命令是由代碼“0”和“1”組成的一組機器指令。,2.4.3 數(shù)據(jù)存儲器,單片機的數(shù)據(jù)存儲器由可讀可寫的存儲器RAM組成,最多可擴展到64KB,用于存儲數(shù)據(jù)。,2.4.4 MCS-51單片機的內(nèi)部數(shù)據(jù)存儲器,MCS-51單片機的內(nèi)部數(shù)據(jù)存儲器由地址00HFFH共有256個字節(jié)的地址空間組成,這256個字節(jié)的地址空間被分為兩部分,其中內(nèi)部數(shù)據(jù)RAM地址為00H7FH(即0127)。,,圖2.4 內(nèi)部數(shù)據(jù)存儲器地址空間,1. 內(nèi)部數(shù)據(jù)RAM單元,內(nèi)部數(shù)據(jù)RAM分
21、為工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū)三個部分。,,圖2.5 RAM位地址(低128位在00H7FH),,(a)系統(tǒng)復(fù)位后,未改變SP初值時的堆棧操作(設(shè)(A)=0ABH),,,(b)系統(tǒng)復(fù)位后,改變SP初值為60H時的堆棧操作 圖2.6 堆棧操作示例,2. 特殊功能寄存器,特殊功能寄存器SFR的地址空間是80HFFH。,表2.3 特殊功能寄存器的名稱、符號與地址,2. 特殊功能寄存器,2. 特殊功能寄存器,2. 特殊功能寄存器,,2.5 單片機指令時序,1、時鐘電路 時鐘電路用于產(chǎn)生單片機工作所需要的時鐘信號,而時序研究的是指令執(zhí)行中各信號之間的相互聯(lián)系。 因其內(nèi)部有時鐘電路,只需外接定
22、時控制元件(晶體振蕩器和電容)即可。見2.1.2。 2、時序定時單位 1個機器周期=6個狀態(tài)周期=12個時鐘周期 當(dāng)振蕩脈沖頻率為12MHz時,一個機器周期是1us;,2.5 單片機指令時序,,,2.6 思考練習(xí)題,,,(1)MCS-51單片機包含哪些主要邏輯功能部件? (2)程序狀態(tài)字寄存器PSW包含哪幾個標(biāo)志位?各位的含義是什么?各有何作用? (3)什么叫單片機? (4)MCS-51單片機的存儲結(jié)構(gòu)有何特點? (5)單片機的端有何作用?在8031組成的單片機應(yīng)用系統(tǒng)中,其端怎樣處理?為什么? (6)單片機內(nèi)部RAM分為哪幾個部分?各有何作用? (7)MCS-51單片機的堆棧SP在操作中
23、遵循什么原則?在開機復(fù)位時,其初值是多少?是否可以通過程序重新設(shè)置? (8)怎樣確定和改變單片機當(dāng)前的工作寄存器組? (9)簡要說明單片機的位地址分配。 (10)試畫出常用的單片機復(fù)位電路,并說明復(fù)位后各個寄存器的狀態(tài)。,第3章 MCS-51單片機的指令系統(tǒng),匯編語言的指令格式及符號簡介 尋址方式 數(shù)據(jù)傳送類指令 算術(shù)運算類指令 邏輯運算類指令 位操作類指令 控制轉(zhuǎn)移類指令 思考練習(xí)題,3.1 匯編語言的指令格式及符號簡介,3.1.1 指令格式,標(biāo)號: 操作碼助記符 第一操作數(shù) ,第二操作數(shù) ,第三操作數(shù) ;注釋,例如: LOOP:MOV A, #50H;(A)50H DECR0;(R0)(
24、R0)-1 DJNZ R0, LOOP;(R0)-10,則程序轉(zhuǎn)移到LOOP地址;否則順序執(zhí)行 END;結(jié)束,3.1.2 本章中符號的定義,3.2 尋 址 方 式,MCS-51單片機有7種尋址方式,見表3.1。,表3.1 7種尋址方式的比較,3.2.1 立即尋址,例如:MOV A, #23H ; (A)23H,即累加器A的內(nèi)容被替換為立即數(shù)23H。,,圖3.1 MOV A,#23H的執(zhí)行示意圖,該指令的功能是將8位的立即數(shù)23H傳送到累加器A中。如圖3.1所示。其中,目的操作數(shù)采用寄存器尋址,源操作數(shù)采用立即尋址。,3.2.2 直接尋址,直接尋址是指在指令中包含了操作數(shù)的地址,該地址直接給
25、出了參加運算或傳送的單元或位。直接尋址方式可訪問三種地址空間: 特殊功能寄存器SFR(該空間只能采用直接尋址)。 內(nèi)部數(shù)據(jù)RAM的低128個字節(jié)單元(該空間還可以采用寄存器間接尋址)。 221個位地址空間。,例如:MOV A, 40H ;把40H單元的內(nèi)容送到累加器中,即(A)(40H)。,,圖3.2 MOV A,40H的執(zhí)行示意圖,3.2.3 寄存器尋址,寄存器尋址是指定某一可尋址的寄存器的內(nèi)容為操作數(shù)。,例如:MOV A, R0 ;(A)(R0) 該指令的功能是將R0中的數(shù)據(jù)傳送到累加器A中。源操作數(shù)與目的操作數(shù)都采用了寄存器尋址。,在MCS-51單片機中,能夠用來間接尋址的寄存器有:用戶
26、所選定的工作寄存器組的R0、R1,堆棧指針SP和16位的數(shù)據(jù)指針DPTR。 內(nèi)部數(shù)據(jù)RAM的寄存器間接尋址采用寄存器R0、R1;外部數(shù)據(jù)RAM的寄存器間接尋址有兩種形式:一是采用R0、R1作間址寄存器,這時R0或R1提供低8位地址,而高8位地址則由P2端口提供;二是采用16位的DPTR作間址寄存器。,3.2.4 寄存器間接尋址,例如:設(shè)R0的內(nèi)容為60H,且(60H)=10H,即60H地址單元中的內(nèi)容為10H,則語句MOV A, R0的執(zhí)行過程如圖3.3所示。執(zhí)行后,(A)=10H,即累加器A的內(nèi)容成為10H。,,圖3.3 MOV A,R0的執(zhí)行示意圖,又如:MOVX A, R0;(A
27、)((R0)),用R0間接尋址的單元中的內(nèi)容替換A的 ;內(nèi)容。 MOVX A, DPTR;(A)((DPTR)),用DPTR間接尋址的單元中的內(nèi)容替換 ;A的內(nèi)容。,3.2.5 變址尋址,這種尋址方式是以數(shù)據(jù)指針DPTR或程序計數(shù)器PC作為基址寄存器,以累加器A作為偏移量寄存器,將一個基址寄存器的內(nèi)容與偏移量寄存器的內(nèi)容之和作為操作數(shù)地址。,例如:MOVC A, A+DPTR 設(shè)(A)=10H,(DPTR)=1000H,程序存儲器的(1010H)=45H,則上面程序語句的功能是將A的內(nèi)容與DPTR的內(nèi)容相加形成操作數(shù)地址(1010H),把該地址中的數(shù)據(jù)傳送到累加器A。即(A)((A)+(DPT
28、R))。結(jié)果:(A)=45H。,,圖3.4 MOVC A,A+DPTR的執(zhí)行示意圖,相對尋址是把指令中給定的地址偏移量rel與程序計數(shù)器PC的當(dāng)前值(讀出該雙字節(jié)或三字節(jié)的跳轉(zhuǎn)指令后,PC指向的下條指令的地址)相加,得到真正的程序轉(zhuǎn)移地址。,例如:JC 80H 若C=0,則PC值不變,若C=1,則以當(dāng)前PC值為基地址,加上80H得到新的PC值。設(shè)該轉(zhuǎn)移指令存放在1005H單元,取出操作碼后PC指向1006H單元,取出偏移量后PC指向1007H單元,所以計算偏移量時PC當(dāng)前地址為1007H,已經(jīng)為轉(zhuǎn)移指令首地址加2,這里的偏移量以補碼給出,所以80H代表著-80H,補碼運算后,就形成跳轉(zhuǎn)地址0F
29、87H。其過程如圖3.5所示。,3.2.6 相對尋址,3.2.6 相對尋址,,圖3.5 JC 80H的執(zhí)行示意圖,3.2.7 位尋址,MCS-51單片機可對片內(nèi)RAM的兩個區(qū)域進行位尋址:一個是20H2FH單元的128位,另一個是特殊功能寄存器的93位。 在尋址時,同一個位地址可以有多種標(biāo)識方式,讀者可參看后面3.6節(jié)“位操作指令”的相關(guān)內(nèi)容。,3.3.1 通用傳送指令,格式:MOV 目的操作數(shù),源操作數(shù) 功能:把第二操作數(shù)指定的字節(jié)內(nèi)容傳送到第一操作數(shù)指定的單元中。不影響源操作數(shù)內(nèi)容,不影響別的寄存器和標(biāo)志。,1. 以累加器A為目的操作數(shù)的傳送類指令,3.3 數(shù)據(jù)傳送類指令,指令助記符及功能
30、說明如下:,例1 若(50H)=10H,則執(zhí)行指令MOV A, 50H之后,(A)=10H。 例2 若(R0)=20H,(20H)=39H,則執(zhí)行指令MOV A, R0后,(A)=39H。 例3 若(R5)=55H,則執(zhí)行指令MOV A, R5后,(A)=55H。,,2. 以Rn為目的操作數(shù)的傳送類指令,例1 若(A)=20H,則執(zhí)行指令MOV R3, A后,(R3)=20H。 例2 若(30H)=01H,則執(zhí)行指令MOV R7, 30H后,(R7)=01H。,指令助記符及功能說明如下:,例1 若(30H)=20H,(R0)=30H,則執(zhí)行指令MOV 90H, R0的結(jié)果為(90H)=20H。
31、 例2 若例1中的條件不變,而執(zhí)行指令MOV P1, R0,則(P1)=20H。,3. 以直接地址directX為目的操作數(shù)的傳送類指令,指令助記符及功能說明如下:,例1 若(R0)=50H,(50H)=20H,(A)=10H,則執(zhí)行指令“MOV R0, A”后,50H單元的內(nèi)容由原來的20H變?yōu)?0H。,4. 以寄存器間接地址Ri為目的操作數(shù)的傳送類指令,指令助記符及功能說明如下:,5. 16位目標(biāo)地址傳送指令,這條指令的功能是:把16位立即數(shù)送入DPTR中。而16位的數(shù)據(jù)指針DPTR由DPH與DPL組成,該指令執(zhí)行后,16位立即數(shù)的高8位送入DPH中,低8位送入DPL中。 該指令的執(zhí)行,不
32、影響程序狀態(tài)寄存器PSW。,指令助記符及功能說明如下:,3.3.2 外部數(shù)據(jù)存儲器(或I/O口)與累加器A傳送指令,例1 設(shè)(P2)=20H,現(xiàn)將A中數(shù)據(jù)存儲到20FFH單元中去。 可用以下程序?qū)崿F(xiàn): MOV R1, #0FFH ;(R1)0FFH MOVX R1, A ;(20FFH)(A) 也可采用下述程序?qū)崿F(xiàn): MOV DPTR, #20FFH ;(DPTR)20FFH MOVX DPTR, A ;((DPTR))(A),即(20FFH)(A),指令助記符與功能說明如下:,3.3.2 外部數(shù)據(jù)存儲器(或I/O口)與累加器A傳送指令,例2 將外部數(shù)據(jù)存儲器7FF0H單元中的數(shù)據(jù)取出
33、,存放到外部數(shù)據(jù)存儲器2000H單元中去。 MOV DPTR, #7FF0H MOVX A, DPTR MOV DPTR, #2000H MOVX DPTR, A,例1 在外部程序存儲器2000H單元開始存放了數(shù)字09的共陰極數(shù)碼管的16進制數(shù)的字形代碼3FH、06H、、6FH。要求根據(jù)A中的值(09)來查找該數(shù)字所對應(yīng)的代碼以便顯示。 若用PC作基址寄存器,則需要在MOVC A, A+PC指令前用一加法指令對地址進行調(diào)整: ADD A, #data MOVC A, A+PC,3.3.3 程序存儲器向累加器A傳送數(shù)據(jù)指令,指令助記符與功能說明如下:,1. 字節(jié)交換指令,例1 設(shè)(R1)=30H
34、,(30H)=45H,(A)=7FH,則執(zhí)行指令: XCH A, R1 結(jié)果:(A)=45H,而(30H)=7FH,從而實現(xiàn)了累加器A與內(nèi)部數(shù)據(jù)存儲器RAM中30H單元的數(shù)據(jù)交換。,3.3.4 數(shù)據(jù)交換指令,指令助記符與功能說明如下:,2. 半字節(jié)交換指令,例1 設(shè)(30H)=6FH,(R0)=30H,(A)=0F6H,則執(zhí)行指令: XCHD A, Ri 結(jié)果:(A)=0FFH,(30H)=66H,數(shù)據(jù)交換指令除了影響始終跟蹤A中數(shù)據(jù)奇偶性的P標(biāo)志外,對PSW中其他標(biāo)志位均無影響。,指令助記符與功能說明如下:,3. 累加器A中高四位與低四位交換指令,SWAP A 該指令所執(zhí)行的操作是累加器A中
35、的高4位與低4位的內(nèi)容互換,其結(jié)果仍存放在累加器A中。,例1 設(shè)(A)=0A5H(10100101B),則執(zhí)行指令: SWAP A 結(jié)果:(A)=5AH(01011010B) 指令SWAP交換了A中高、低半字節(jié)(30和74),結(jié)果不影響標(biāo)志寄存器PSW。,3.3.5 堆棧操作指令,堆棧操作指令只有2條,即:壓入(PUSH)和彈出(POP)。 壓入指令:PUSH direct ;SPSP+1,((SP))(direct) 彈出指令:POP direct ;((SP))(direct),SPSP-1,例1PUSH A ;保護A中數(shù)據(jù) PUSH PSW ;保護標(biāo)志寄存器中數(shù)據(jù)
36、 ;執(zhí)行服務(wù)程序 POP PSW ;恢復(fù)標(biāo)志寄存器中數(shù)據(jù) POP A ;恢復(fù)A中數(shù)據(jù),例2PUSH A PUSH PSW POP A POP PSW,例3 PUSH DPH PUSH DPL POP DPL POP DPH,3.4.1 加減運算指令,1. 加法指令,這類指令所完成的操作是把源操作數(shù)(立即數(shù)、直接地址單元內(nèi)容、間接地址單元內(nèi)容、工作寄存器內(nèi)容)與累加器A的內(nèi)容相加,將結(jié)果保存在累加器A中。,3.4 算術(shù)運算類指令,指令助記符與功能說明如下:,例1 執(zhí)行指令: MOV A, #0A9H ADD A, #0B8H 對程序狀態(tài)寄存器的影
37、響如圖3.6所示。,,運算結(jié)果:(A)=61H,CY=1,AC=1,OV=1,P=1,(PSW)=0C5H,例2 8位數(shù)加法程序片斷1: MOVA, #23H ADDA, #5AH ,,運算結(jié)果:(A)=7DH,CY=0,OV=0,AC=0,P=0,(PSW)=00H。,,例3 8位數(shù)加法程序片斷2: MOVA, #0ABH ADDA, #9AH ,,運算結(jié)果:(A)=45H,CY=1,OV=1,AC=1,P=1,(PSW)=0C5H。,,,帶進位加法指令與前述加法指令的區(qū)別僅為考慮進位位,其他與加法指令相同。,2. 帶進位加法指令,指令助記符與功能說明如下:,,例3 利用ADDC指令可以進
38、行多字節(jié)的加法運算。 設(shè)有兩個16位數(shù)相加,被加數(shù)的高8位放在41H,低8位放在40H,加數(shù)的高8位放在43H,低8位放在42H,和的低8位存放在50H,高8位存放在51H,進位位存放在52H。可編程序如下:,例1 設(shè)(A)=0AAH,(R0)=55H,C=1,則執(zhí)行指令: ADDC A, R0 運算結(jié)果:(A)=00000000B,AC=1,CY=1,OV=1。,例2 設(shè)(A)=35H,(40H)=21H,C=0,則執(zhí)行指令: ADDC A, 40H 運算結(jié)果:(A)=56H,AC=0,CY=0,OV=0。 這與執(zhí)行指令“ADD A, 40H”的結(jié)果是一樣的。,,SHJ: MOV A, 4
39、0H;(A)被加數(shù)低8位 ADD A, 42H;與加數(shù)低8位相加 MOV 50H, A;和的低8位存入50H MOV A, 41H;(A)被加數(shù)高8位 ADDC A, 43H;被加數(shù)高8位與加數(shù)高8位以及低位來的進位相加 MOV 51H, A;和的高8位存入51H單元 MOV A, #00H;(A)00H ADDC A, #00H;(A)(A) +00H+高8位來的進位 MOV 52H, A;進位位C內(nèi)容存入52H單元 ,,3. 帶借位減指令,指令助記符與功能說明如下:,例1 設(shè)(40H)=0BAH,(41H)=98H,試編寫40H內(nèi)容減去41H內(nèi)容后,結(jié)果再存入40H單元的程序。 MOVA
40、, 40H;(A)(40H) CLRC;進位位C清0 SUBBA, 41H;(A)(A)-(41H) -(C) MOV40H, A;(40H)(A) 執(zhí)行以上程序后,(40H)=22H,CY=0,OV=0。,如果參與運算的兩數(shù)為無符號數(shù),則其溢出與否與OV狀態(tài)無關(guān),而是靠CY是否有借位來判斷,OV僅僅表示帶符號數(shù)運算時是否溢出。,例2 設(shè)有兩個16位數(shù)相減,被減數(shù)的高8位放在41H,低8位放在40H,減數(shù)高8位放在43H,低8位放在42H,差的低8位存放在50H,高8位存放在51H,借位位存放在52H。,可編程序如下: SHJIAN:MOV A, 40H ;(A)被減數(shù)低8位 CLR C
41、;C位清0 SUBB A, 42H ;減去減數(shù)低8位 MOV 50H, A ;差的低8位存入50H MOV A, 41H ;(A)被減數(shù)高8位 SUBB A, 43H ;被減數(shù)高8位減去減數(shù)高8位與借位 MOV 51H, A ;差的高8位存入51H單元 MOV A, #00H ;(A)00H ADDC A, #00H ;(A)高8位的借位位 MOV 52H, A ;借位位C內(nèi)容存入52H單元,1. 乘法指令,例1 設(shè)(A)=67H(103),(B)=0ADH(173),執(zhí)行指令: MUL AB 運算結(jié)果:乘積為459BH(17819),(A)=9BH,(B)=45H。另外:OV=1,CY=0,
42、3.4.2 乘除運算指令,MUL AB ;(A)乘積低8位,(B)乘積高8位,例2 設(shè)被乘數(shù)為16位無符號數(shù),低8位存放在地址為K的單元,高8位存放在地址為K+1的單元。乘數(shù)為8位無符號數(shù),存放在M單元。編程求出二者乘積,并將乘積的07位存放在R1,815位存放在R2,1623位存放在R3中。,分析:16位無符號數(shù)與8位無符號數(shù)相乘的步驟示意如下:,程序編制如下: MOV R0, #K ;設(shè)置被乘數(shù)地址指針 MOV A, R0 ;被乘數(shù)送A中 MOV B, M ;乘數(shù)送B中 MUL AB ;(K)(M) MOV R1, A ;乘積的07位存入R1 MOV R2, B ;暫存積的81
43、5位 INC R0 ;指向被乘數(shù)高8位地址 MOV A, R0 ;取被乘數(shù)高8位 MOV B, M ;乘數(shù)送B中 MUL AB ;(K+1)(M) ADD A, R2 ;求得乘積的815位 MOV R2, A ;乘積的815位存入R2 MOV A, B ADDC A, #00H ;求得乘積的1623位 MOV R3, A ;乘積的1623位存入R3,,2. 除法指令,例1 設(shè)(A)=9AH,(B)=23H,執(zhí)行指令: DIV AB 則(A)=04H,(B)=0EH,OV=00H,CY=00H,3.4.2 乘除運算指令,DIV AB ;(A)商,(B)余數(shù),3.4.3 增1減1指
44、令,1. 增1指令,INC A ;(A)(A)+1 INC direct ;(direct)(direct)+1 INC Ri ;((Ri))((Ri))+1 INC Rn ;(Rn)(Rn)+1 INC DPTR ;(DPTR)(DPTR)+1,例1 設(shè)(A)=40H,(41H)=29H,則執(zhí)行下列指令: INC A;(A)40H+1H INC 41H;(41H)29H+1H 結(jié)果:(A)=41H,(41H)=2AH,例2 設(shè)(R0)=56H,片內(nèi)RAM單元(56H)=0FFH,(57H)=50H,則執(zhí)行下列指令: INC R0;(56H)00H INC R0;(R0)57H
45、 INC R0;(57H)51H 結(jié)果:(56H)=00H,(R0)=57H,(57H)=51H,例3 執(zhí)行下述指令序列: MOV DPTR,#2FFEH;(DPTR)2FFEH INC DPTR;(DPTR)2FFFH INC DPTR;(DPTR)3000H INC DPTR;(DPTR)3001H 則(DPTR)=3001H,2. 減1指令,DEC A;(A)(A)-1 DEC direct;(direct)(direct)-1 DEC Ri;((Ri))((Ri))-1 DEC Rn;(Rn)(Rn)-1,例1 設(shè)(R0)=4FH,片內(nèi)RAM單元(4FH)=40H,(4EH)=0
46、0H,執(zhí)行指令: DEC R0 ;(4FH)3FH DEC R0 ;(R0)4EH DEC R0 ;(4EH)0FFH 結(jié)果:(R0)=4EH,(4EH)=0FFH,(4FH)=3FH,3.4.4 二/十進制調(diào)整指令,DA A 該指令的功能是對累加器A中的“二/十”進制(BCD碼)加法結(jié)果進行調(diào)整。,例1 執(zhí)行下面的指令: MOVA, #86H ADDA, #47H 結(jié)果:(A)=0CDH,CY=0,AC=0 所得結(jié)果并不是BCD碼,若接著執(zhí)行以下指令: DA A 則結(jié)果:(A)=33H,CY=1,AC=1,1. 累加器A清0 指令格式: CLR A 功能:將00H送入累加器A中
47、。,3.5 邏輯運算指令,3.5.1 單操作數(shù)指令,2. 累加器A取反 指令格式: CPL A 功能:將累加器A中內(nèi)容取反(將A中內(nèi)容按位取反,即邏輯非運算)后再送回累加器A中。,例1 設(shè)(A)=98H,執(zhí)行指令 CLR A ;(A)0 CPL A ;(A)0FFH 結(jié)果:(A)=0FFH,3. 累加器A內(nèi)容循環(huán)左移一位 指令格式: RL A 功能:將累加器A中的內(nèi)容循環(huán)左移一位。即,,例1 設(shè)(A)=10001000,則執(zhí)行指令“RL A”后,結(jié)果:(A)=00010001,,4. 累加器A內(nèi)容帶進位位CY循環(huán)左移一位,指令格式: RLC A 功能:將累加器A中的內(nèi)容與進位標(biāo)志位CY一起
48、循環(huán)左移一位。即:,,例1 設(shè)(A)=01010101,(CY)=1。則執(zhí)行指令“RLC A”后,結(jié)果:(A)=10101011,(CY)=0。,,5. 累加器A內(nèi)容循環(huán)右移一位,指令格式: RR A 功能:將累加器A中的內(nèi)容循環(huán)右移一位。即:,,例1 設(shè)(A)=00010001,則執(zhí)行指令“RR A”后,結(jié)果:(A)=10001000,,6. 累加器A內(nèi)容帶進位位CY循環(huán)右移一位,指令格式: RRC A 功能:將累加器A中的內(nèi)容與進位標(biāo)志位CY一起循環(huán)右移一位。即:,,例1 設(shè)(A)=10101011,(CY)=0。則執(zhí)行指令“RRC A”后,結(jié)果:(A)=01010101,(CY)=1。,
49、,3.5.2 雙操作數(shù)指令,1. 邏輯與指令,邏輯與的規(guī)則定義為:(其中表示邏輯與) 00=0 01=10=0 11=1,例1 設(shè)(A)=0C3H,(R3)=0ADH,執(zhí)行指令“ANL A, R3”。 結(jié)果:(A)=81H(10000001B)。 指令執(zhí)行過程如下:,,2. 邏輯或指令,邏輯或的規(guī)則定義為:(其中表示邏輯或) 00=0 00=10=1 11=1,例1 設(shè)(A)=0C3H,(R3)=0ADH,執(zhí)行指令“ORL A, R3”。 結(jié)果:(A)=0EFH(11101111B)。 指令執(zhí)行過程如下:,,3. 邏輯異或指令,邏輯異或的規(guī)則定義為(其中表示邏輯異或): 00=11=0 10=
50、01=1,例1 設(shè)(A)=0C3H,(R3)=0ADH,執(zhí)行指令“XRL A, R3”。 結(jié)果:(A)=6EH(01101110B)。 指令執(zhí)行過程如下:,,例2 試把分別保存在30H、31H單元中用ASCII碼表示的兩位數(shù),轉(zhuǎn)換成兩位BCD碼,并以壓縮BCD碼形式存入30H單元中。,程序如下: ANL 30H, #0FH;30H單元的ASCII碼轉(zhuǎn)換成BCD碼 MOV A, 31H;取31H單元的ASCII碼 ANL A, #0FH;31H單元的ASCII碼變成BCD碼 RL A RL A RL A RL A ORL 30H, A;結(jié)果存入30H單元,例1 要將20H位的內(nèi)容傳送給2
51、3H位,不能直接用“MOV 20H, 23H”,因為該指令執(zhí)行的實際是字節(jié)傳送,若要將20H位的內(nèi)容傳送給23H位,可用下述程序?qū)崿F(xiàn): MOV C, 20H ;(C)(20H) MOV 23H, C ;(23H)(C),3.6 位操作類指令,3.6.1 位數(shù)據(jù)傳送指令,指令助記符與功能說明如下: 目的操作數(shù) 源操作數(shù) 功能說明,,MOV C, bit;(C)(bit) MOV bit, C;(C)(bit),指令格式如下: CLR C;(C)(0) CLR bit;( bit)(0) 以上指令可使直接尋址位(bit)或位累加器C清0,不影響其他標(biāo)志。 例1 片內(nèi)R
52、AM單元26H的內(nèi)容為0FFH,執(zhí)行指令: CLR 32H 結(jié)果:(26H)=0FBH(11111011B),其中,32H為26H單元第二位的位地址。,3.6.2 位狀態(tài)控制指令,1. 位清0指令,指令格式如下: CPL C ;(C)(/C) CPL bit ;(bit)(/bit) 以上指令把位累加器C或者直接尋址位(bit)內(nèi)容取反,不影響其他標(biāo)志位。 例1 執(zhí)行下面的指令序列: MOV P1,#2FH;(P1)(2FH即00101111B) CPL P1.0;P1.0位求反 CPL P1.2;P1.2位求反 結(jié)果:(P1)=2AH(00101010B)。,2. 位求反指令,指
53、令格式如下: SETB C;(C)1 SETB bit;(bit)1 以上指令把進位標(biāo)志C或者任何可直接尋址位(bit)置1,不影響其他標(biāo)志位。 例1 假設(shè)進位標(biāo)志C內(nèi)容為0,輸出口P1原來的內(nèi)容為0FH(00001111B),則執(zhí)行下面指令: SETB C SETB P1.7 結(jié)果:(C)=1,(P1)=8FH(10001111B)。,3. 位置1指令,例1 當(dāng)位地址(2AH)=1,(32H)=1,同時累加器中(ACC.7)=0時,進位位C=1,否則C清0,可編程序如下: MOVC, 2AH ;(C)(2AH) ANLC, 32H ;(C)(C)(32H) ANLC, /ACC.7 ;
54、(C)(C)(/ACC.7),3.6.3 位邏輯操作指令,1. 位與指令,指令助記符與功能說明如下: 目的操作數(shù) 源操作數(shù) 功能說明 ANL C, bit ;(C)(C)(bit) ANL C, /bit ;(C)(C)(/bit),指令助記符與功能說明如下: 目的操作數(shù) 源操作數(shù) 功能說明 ORL C, bit ;(C)(C)(bit) ORL C, /bit ;(C)(C)(/bit) 位或指令的功能是將直接尋址位的內(nèi)容或直接尋址位內(nèi)容取反后(不改變原來位的內(nèi)容)和位累加器C的內(nèi)容相或,結(jié)果保存在C中。 例1 寫出位地址(2AH)=1和(32H)=1、累加器(A
55、CC.7)=0相或的程序: MOVC, 2AH ;(C)(2AH) ORLC, 32H ;(C)(C)(32H) ORLC, ACC.7 ;(C)(C)(ACC.7) 結(jié)果:(C)=1。,2. 位或指令,圖3.7為判C轉(zhuǎn)移指令的執(zhí)行過程。,3.6.4 位條件轉(zhuǎn)移指令,1. 判C轉(zhuǎn)移指令,JCrel ;若(C)=1,則(PC)(PC)+2+rel;若(C)=0,則(PC)(PC)+2 JNCrel ;若(C)=0,則(PC)(PC)+rel;若(C)=1,則(PC)(PC)+2,,,(a) JC rel (b) JNC rel 圖3.7 判C轉(zhuǎn)移指令的執(zhí)行過程,JBbit,
56、rel;若(bit)=1,則(PC)(PC)+3+rel ;若(bit)=0,則(PC)(PC)+3 JNBbit, rel;若(bit)=0,則(PC)(PC)+3+rel ;若(bit)=1,則(PC)(PC)+3 JBCbit, rel;若(bit)=1,則(PC)(PC)+3+rel,而且(bit)清0 ;若(bit)=0,則(PC)(PC)+3,2. 判直接尋址位轉(zhuǎn)移指令,判直接尋址位轉(zhuǎn)移指令的執(zhí)行過程如圖3.8所示。,,,,(a) JB bit, rel (b) JNB bit, rel (c) JBC bit, rel,例
57、1 假設(shè)前面的程序段一樣,則分別執(zhí)行下面三段程序。 程序1: SETB32H;(32H)1 JB32H, K1;(32H)=1轉(zhuǎn)K1處執(zhí)行 K1: 程序2: CLR32H;(32H)0 JNB32H, K1;(32H)=0轉(zhuǎn)K1處執(zhí)行 K1: 程序3: SETB32H;(32H)1 JBC32H, K1;(32H)=1轉(zhuǎn)K1處執(zhí)行 K1:,1. 長轉(zhuǎn)移指令 指令格式: LJMP addr16 ;(PC)addr015,3.7 控制轉(zhuǎn)移類指令,3.7.1 無條件轉(zhuǎn)移指令,例1 執(zhí)行下述程序段: M: LJMP K K: ,2. 絕對轉(zhuǎn)移指令 指令格式:,,3. 相對短轉(zhuǎn)移指令 指令格式:,
58、,4. 間接轉(zhuǎn)移指令 JMP A+DPTR ;(PC)(A)+(DPTR),,無條件轉(zhuǎn)移指令跳轉(zhuǎn)范圍比較,1. 累加器A判零轉(zhuǎn)移指令,3.7.2 條件轉(zhuǎn)移指令,JZ rel ;累加器為0轉(zhuǎn)移,否則繼續(xù)執(zhí)行 JNZ rel ;累加器不為0轉(zhuǎn)移,否則繼續(xù)執(zhí)行,例1 將內(nèi)部RAM單元中起始地址為20H的數(shù)據(jù)傳送到P1口,當(dāng)RAM單元中內(nèi)容為0時,不傳送,接著傳送下一單元內(nèi)容。,,,(a) JZ rel (b) JNZ rel 圖3.10 累加器A判零轉(zhuǎn)移指令的執(zhí)行過程,2. 比較轉(zhuǎn)移指令 指令格式: CJNE , , rel,,圖3.11 CJNE 指令的執(zhí)行過程,3. 循環(huán)
59、減1轉(zhuǎn)移指令 指令格式: DJNZ , rel,圖3.12 DJNZ指令的操作過程示意,,例2 在程序中,可以利用DJNZ指令實現(xiàn)軟件延時。當(dāng)晶振頻率一定時,則延時的大小可根據(jù)程序的需要從幾個微秒到幾百微秒,甚至毫秒、秒等不同要求來設(shè)定。下面是一段當(dāng)系統(tǒng)晶振頻率為12MHz時,在P1.0口輸出周期為1毫秒脈沖的延時程序。 K2: MOV R2, #0F8H K1: DJNZ R2, K1 CPL P1.0 AJMP K2,1. 長調(diào)用指令 指令格式,3.7.3 子程序調(diào)用和返回指令,,2. 絕對調(diào)用指令 指令格式:,,,3. 返回指令 指令格式:,,4. 中斷返回指令 指令格式: RETI
60、 該指令用于中斷返回。執(zhí)行過程類似于RET。 RET與RETI指令應(yīng)分別放在子程序和中斷服務(wù)程序的最后。,,5. 空操作指令 指令格式: NOP ;(PC)(PC)+1,(1)MCS-51單片機有哪幾種尋址方式?各尋址方式所對應(yīng)的寄存器和存儲空間有何不同? (2)MCS-51的指令系統(tǒng)按功能可分為哪幾類? (3)分別說明以下指令的作用。 MOVA, 30H MOVA, R0 MOVA, R7 MOVA, #45H MOVR3, 59H MOVR3, 60H MOV40H, A MOV55H, R4 MOV50H, 30H MOV65H, R1 (4)試說明MOVX指令與MOVC指令有何
61、區(qū)別。,,3.8 思考練習(xí)題,(5)若(R1)=45H,(A)=40H,(45H)=06H,(40H)=80H。分析下面的程序段執(zhí)行后,上述各單元內(nèi)容有何變化? MOV A, R1 MOV R1, 40H MOV 40H, A MOV R1, #35H (6)將存放在30H單元中的壓縮BCD碼拆分后,分別存放到31H、32H中。 (7)試將存放于40H單元的數(shù)據(jù)0FH乘4,并仍然存放在40H單元中(要求分別用兩種方法編程)。 (8)若(50H)=40H,寫出執(zhí)行下面程序段后累加器A、寄存器R0、以及內(nèi)部RAM的40H、41H、42H單元中的內(nèi)容。,MOV A, 50H MOV R0, A MO
62、V A, #00H MOV R0, A MOV A, 3BH MOV 42H, 41H MOV 42H, A (9)一個16位數(shù)的高字節(jié)存放在30H單元,低字節(jié)存放在31H單元,另一個16位數(shù)據(jù)的高字節(jié)存放在32H單元,低字節(jié)存放在33H單元,試編寫程序完成這兩個16位數(shù)據(jù)的減法運算,差的高8位存放入40H,低8位存放到41H單元。 (10)編寫一段程序,查找存放在30H50H單元中是否有數(shù)據(jù)34H,若有則將F0置1,否則將F0清0。 (11)若單片機的晶體振蕩器頻率為12MHz,試編寫一輸出到P1.0口的脈沖,脈沖周期為100s。 (12)說明RET與RETI指令的區(qū)別。,第4章 單片機的程
63、序設(shè)計,u偽指令 u 匯編語言源程序的編輯與匯編 u 匯編語言程序設(shè)計,有一些指令,如指定目標(biāo)程序或數(shù)據(jù)存放的地址、給一些指定的標(biāo)號賦值、表示源程序結(jié)束等指令,并不產(chǎn)生目標(biāo)程序(機器碼),也不影響程序的執(zhí)行,僅僅產(chǎn)生供匯編用的某些命令,用來對匯編過程進行某種控制或操作,這類指令稱為偽指令。,4.1 偽 指 令,4.1.1 定義起始地址偽指令,格式:ORG addr16 功能:規(guī)定程序塊或數(shù)據(jù)塊存放的起始地址。addr16表示一個16位的程序存儲器的空間地址,一般為一個確定的地址,也可以是事先定義的標(biāo)號。例如: ORG 2000H START:MOV A, 30H ,4.1.2 定義匯編結(jié)
64、束偽指令,格式:END 功能:表示匯編結(jié)束,4.1.3 標(biāo)號賦值偽指令,格式:標(biāo)號 EQU 表達式 功能:將表達式的值賦給本語句中的標(biāo)號。又稱為等值指令。,4.1.4 定義字節(jié)偽指令,格式:標(biāo)號: DB 字節(jié)表 功能:從標(biāo)號指定的地址單元開始,在程序存儲器中定義字節(jié)數(shù)據(jù)。,4.1.5 定義字偽指令,4.1.6 預(yù)留存儲區(qū)偽指令,格式:標(biāo)號: DS 表達式 功能:從標(biāo)號指定的地址單元開始,定義一個存儲區(qū),以備源程序使用。存儲區(qū)內(nèi)預(yù)留的存儲單元數(shù)由表達式的值決定。 例如: ORG3030H TIMER:DS10H ,格式:標(biāo)號: DW 字表 功能:從標(biāo)號指定的地址單元開始,在程序存儲器中存儲
65、字?jǐn)?shù)據(jù)。,4.2 匯編語言源程序的編輯與匯編,4.2.1 源程序的編輯,編寫完成的源程序應(yīng)以“.ASM”的擴展名保存,以備匯編程序調(diào)用。,4.2.2 源程序的匯編,4.3 匯編語言程序設(shè)計,,,4.3.1 順序程序,例1 已知X、Y、Z分別為片內(nèi)RAM 30H、31H、32H單元的內(nèi)容,設(shè)XY,試編程完成下式的算術(shù)運算:S=(X-Y)*Z, 并將計算結(jié)果S存入片內(nèi)RAM 34H(高字節(jié))、35H(低字節(jié))單元中。 由于XY,所以X-Y0,不需要借位;(X-Y)*Z的結(jié)果最多占用兩個字節(jié)。實現(xiàn)該要求的程序流程圖如圖4.2所示。,,程序清單如下: ORG0030H START: MOVA,
66、30H ;(A)X SUBBA, 31H ;(A)(A)-X MOVB, 32H ;(B)Z MULAB MOV34H, B ;(34H)A*B的高字節(jié) MOV35H, A ;(35H)A*B的低字節(jié) SJMP$,例2 編寫雙字節(jié)無符號數(shù)乘法程序。被乘數(shù)高字節(jié)放在R2中,低字節(jié)存放在R3中,乘數(shù)高字節(jié)放在R6中,低字節(jié)放在R7中。乘積在R2、R3、R4、R5中。,程序段如下: MOV A, R3 ;R3R7 MOV B, R7 MUL AB MOV R4, B ;暫存部分積 MOV R5, A MOV A, R3 MOV B, R6 ;R3R6 MUL AB ADD A, R4 ;累加部分積 MOV R4, A CLR A ADDC A, B MOV R3, A MOV A, R2 ; R2R7 MOV B, R7,MUL AB ADD A, R4 ;累加部分積 MOV R4, A MOV A, R3 ADDC A, B MOV R3, A CLR A RLC A XCH A, R2 ;R2R6 MOV B, R6 MUL AB ADD A,
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案