第七章MCS51單片機(jī)的指令與程序設(shè)計課件_第1頁
第七章MCS51單片機(jī)的指令與程序設(shè)計課件_第2頁
第七章MCS51單片機(jī)的指令與程序設(shè)計課件_第3頁
第七章MCS51單片機(jī)的指令與程序設(shè)計課件_第4頁
第七章MCS51單片機(jī)的指令與程序設(shè)計課件_第5頁
已閱讀5頁,還剩183頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七章MCS-51單片機(jī)的指令與程序設(shè)計本章教學(xué)基本要求1.掌握MCS-51單片機(jī)匯編語言的特點(diǎn)和格式。2.掌握MCS-51單片機(jī)匯編指令的7種尋址方式和111條指令的使用方法。3.掌握MCS-51單片機(jī)匯編程序的設(shè)計方法。4.掌握MCS-51單片機(jī)C語言程序設(shè)計方法。重點(diǎn)與難點(diǎn)匯編指令的尋址方式與指令的使用方法。匯編程序和C程序的結(jié)構(gòu)設(shè)計。腑恬賠項(xiàng)仲蠢遁燴餒鉻措斌它余楷屈試需育秩上順西曾丹北伍餃答噸犀鯉第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS-51單片機(jī)的指令與程序設(shè)計本章教學(xué)基本要求17.1MCS-51匯編指令格式和尋址方式AT89C51單片機(jī)的基本指令共111條,按指令在程序存儲器所占的字節(jié)來分,可分為以下3種:(1)單字節(jié)指令49條;(2)雙字節(jié)指令45條;(3)三字節(jié)指令17條。按指令的執(zhí)行時間來分,可分為以下3種:(1)1個機(jī)器周期(12個時鐘振蕩周期)的指令64條;(2)2個機(jī)器周期(24個時鐘振蕩周期)的指令45條;(3)只有乘、除兩條指令的執(zhí)行時間為4個機(jī)器周期(48個時鐘振蕩周期)。杯速巖醒伸痕搭撮闡怕稱隔鈣勝信紉詫盾咕躥寡批膩薊推娘鉛誣噪可議坦第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.1MCS-51匯編指令格式和尋址方式AT89C51單2MCS-51單片機(jī)的指令格式與8086類似,一條指令通常由兩部分組成:操作碼和操作數(shù)。AT89C51單片機(jī)的匯編語言指令的書寫格式如下:標(biāo)號:操作碼操作數(shù);注釋例如,一條數(shù)據(jù)傳送指令:MOVA,4CH;將4CH存儲單元的內(nèi)容送到累加器A中,其中:MOV是操作碼,A和3AH是操作數(shù),“;”的后面是注釋。需要注意是在匯編程序中使用的注釋符號“;”,“:”和“,”為英文下的分號,冒號和逗號,而非中文下的“;”,“:”和“,”。一、指令格式烽止粟貴犀委百獲賒沏葡玲疽雌突嘯櫻吐陜窮拴撤郴憑哥順族樞焦影妙敵第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計MCS-51單片機(jī)的指令格式與8086類似,一條指令通常由兩31.操作碼操作碼是由助記符表示的字符串,它規(guī)定了指令的操作功能。操作碼是指令的核心,不可或缺。2.操作數(shù)操作數(shù)是指參加操作的數(shù)據(jù)或數(shù)據(jù)的地址。MCS-51單片機(jī)的指令系統(tǒng)中指令的操作數(shù)可以是0~3個。不同功能的指令,操作數(shù)的個數(shù)和作用有所不同。例如,傳送類指令多數(shù)有兩個操作數(shù)。緊跟在操作碼后面的第一操作數(shù)稱為目的操作數(shù),表示操作結(jié)果存放的地址;后面的第二操作數(shù)稱為源操作數(shù),給出操作數(shù)或操作數(shù)的來源地址。峰藕釋噴吟嫡液疚襯磺娛鍘蒼淌臟嗡瀉塢伐群詣總沾無瘤轎眉咳嫌帆惟馴第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計1.操作碼峰藕釋噴吟嫡液疚襯磺娛鍘蒼淌臟嗡瀉塢伐群詣總沾無瘤43.標(biāo)號標(biāo)號用符號代表其后面的指令的首地址。標(biāo)號由1~8個字符組成,第一個字符必須是字母,其余字符可以是字母、數(shù)字或其他特定符號,標(biāo)號放在操作碼前面,與操作碼之間必須用“:”號隔開。標(biāo)號起標(biāo)記作用,在指令中是可選項(xiàng),一般用在一段功能程序的第一條指令前面。4.注釋注釋是為了便于閱讀該條指令所作的說明,注釋項(xiàng)是可選項(xiàng),即可有可無。但為提高程序可讀性,多數(shù)程序需要進(jìn)行適當(dāng)注釋。5.其他由指令格式可見,操作碼與操作數(shù)之間必須用空格分隔;操作數(shù)與操作數(shù)之間必須用逗號“,”分開;注釋與指令之間必須用“;”號分開。操作碼和操作數(shù)有對應(yīng)的二進(jìn)制代碼,指令代碼由若干字節(jié)組成。不同的指令字節(jié)數(shù)不一定相同,51單片機(jī)的指令系統(tǒng)中有單字節(jié)、雙字節(jié)和3字節(jié)指令。箋糊淫富充蔽啦醛詛伏榮箔莖懊氯今兆悅罷梁牌倒筒喊熟楓砂鑿澀深振修第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計3.標(biāo)號箋糊淫富充蔽啦醛詛伏榮箔莖懊氯今兆悅罷梁牌倒筒喊熟楓5尋址方式就是在指令中說明操作數(shù)所在地址的方法。AT89C51單片機(jī)的指令系統(tǒng)有以下7種尋址方式,下面分別予以介紹。寄存器尋址方式寄存器尋址方式就是操作數(shù)在寄存器中,因此指定了寄存器就能得到操作數(shù)。例如,指令MOVA,Rn;(Rn)→A,n=0~7表示把寄存器Rn的內(nèi)容傳送到累加器A中,由于操作數(shù)在Rn中,因此在指令中指定了從寄存器Rn中取得源操作數(shù),所以稱為寄存器尋址方式。寄存器尋址方式的尋址范圍包括:(1)4組通用工作寄存器區(qū),共32個工作寄存器。但只能尋址當(dāng)前工作寄存器區(qū)的8個工作寄存器,因此指令中的寄存器名稱只能是R0~R7。(2)部分特殊功能寄存器,如累加器A、寄存器B以及數(shù)據(jù)指針寄存器DPTR等。二、尋址方式多唾鬧護(hù)危奴蝦綢惜啊焦紫恿拜蜒年偵霉擄凋冉退禿刃呂結(jié)詫姻碩貪妻販第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計尋址方式就是在指令中說明操作數(shù)所在地址的方法。AT89C5162.直接尋址方式在直接尋址方式中,指令中直接以單元地址的形式給出操作數(shù)。該單元地址中的內(nèi)容就是操作數(shù)。例如,指令MOVA,26H表示把內(nèi)部RAM的26H字節(jié)單元的內(nèi)容傳送到寄存器A。源操作數(shù)采用的是直接尋址方式。需要區(qū)分8086直接尋址指令格式中直接地址要加“[]”,如8086指令:MOVAX,[1000H]。直接尋址的操作數(shù)在指令中以存儲單元的形式出現(xiàn),因?yàn)橹苯訉ぶ贩绞街荒苁褂?位二進(jìn)制表示的地址,因此,直接尋址方式的尋址范圍只限于:(1)內(nèi)部RAM的128個單元。(2)特殊功能寄存器。特殊功能寄存器除了以單元地址的形式給出外,還可以用寄存器符號的形式給出。蔫俘項(xiàng)扣債浚乓烏絳沸奉泰重品嚨見聰正齒蛙浙硒令勘陋瀝籮冊博輩函氟第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計2.直接尋址方式蔫俘項(xiàng)扣債浚乓烏絳沸奉泰重品嚨見聰正齒蛙浙硒7例如,指令MOVA,90H表示把P1口(字節(jié)地址為90H)的內(nèi)容傳送給A。也可寫為MOVA,P1這也表示把P1口(地址為90H)的內(nèi)容傳送給A,兩條指令是等價的。應(yīng)當(dāng)說明的是,直接尋址方式是能對所有特殊功能寄存器讀寫的唯一尋址方式??迸詈凡沁M(jìn)鏈廟勘橡踢觀擱順條哲潔峭藝墑憂烷俱題癸吞報彈籬驟錠陌娩第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計例如,指令勘蓬悍睬進(jìn)鏈廟勘橡踢觀擱順條哲潔峭藝墑憂烷俱題癸吞83.寄存器間接尋址方式前述的寄存器尋址方式,在寄存器中存放的是操作數(shù),而寄存器間接尋址方式,在寄存器中存放的是操作數(shù)的地址,即先從寄存器中找到操作數(shù)的地址,再按該地址找到操作數(shù)。由于操作數(shù)是通過寄存器間接得到的,因此稱為寄存器間接尋址。為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方式中,應(yīng)在寄存器名稱前面加前綴標(biāo)志“@”。例如,指令MOVA,@Ri;i=0或1其中,Ri中的內(nèi)容為26H,即從Ri中找到源操作數(shù)所在單元的地址26H,把該地址中的內(nèi)容傳送給A,即把內(nèi)部RAM中26H單元的內(nèi)容送到A。情傘疹爬紙?zhí)N貉昌拄鍛歉湃豹潤活幼卉代卜遇糟碉果蒙癱篡啊道復(fù)逐皋杯第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計3.寄存器間接尋址方式情傘疹爬紙?zhí)N貉昌拄鍛歉湃豹潤活幼卉代卜94.立即尋址方式立即尋址方式就是直接在指令中給出操作數(shù)。出現(xiàn)在指令中的操作數(shù)也稱立即數(shù)。為了與直接尋址指令中的直接地址加以區(qū)別,需在操作數(shù)前面加前綴標(biāo)志“#”。例如,指令MOVA,#55H表示把立即數(shù)55H送給A,55H這個常數(shù)是指令代碼的一部分。采用立即尋址方式的指令是雙字節(jié)的。第一個字節(jié)是操作碼,第二個字節(jié)是立即數(shù)。因此,立即數(shù)就是放在程序存儲器內(nèi)的常數(shù)。在8086的直接尋址中,源操作數(shù)前面沒有“#”,如8086指令:MOVAX,7A3BH。懶盾廓鑿案膨淬法缺冬坦蘋年婉氦撕漱栗旭壁號如鹿稈綁攻明蠟誤弟睛嚨第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計4.立即尋址方式懶盾廓鑿案膨淬法缺冬坦蘋年婉氦撕漱栗旭壁號如105.基址寄存器加變址寄存器間接尋址方式基址寄存器加變址寄存器間接尋址方式用于讀出程序存儲器中的數(shù)據(jù)到累加器中。該尋址方式是以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器,并以兩者內(nèi)容相加形成的16位地址作為操作數(shù)的地址,以達(dá)到訪問數(shù)據(jù)表格的目的。例如,指令MOVCA,@A+DPTR假設(shè)A的原有內(nèi)容為10H,DPTR的內(nèi)容為0210H,該指令執(zhí)行的結(jié)果是把程序存儲器0220H單元的內(nèi)容傳送給A。蘋脯患葷墩銥身遜頻雅陷鄉(xiāng)槍戴唐鉤轍繁博告認(rèn)峪勃您蟬伯功拂乃扭堵扮第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計5.基址寄存器加變址寄存器間接尋址方式蘋脯患葷墩銥身遜頻雅陷11下面對該尋址方式做如下說明。(1)該尋址方式只能對程序存儲器進(jìn)行尋址,尋址范圍可達(dá)到64KB。(2)該尋址方式的指令只有3條:MOVCA,@A+DPTRMOVCA,@A+PCJMPA,@A+DPTR其中,前兩條指令是讀程序存儲器指令,最后一條指令是無條件轉(zhuǎn)移指令。殲傀奢吠癌霞宛宋捅翌姜拄潞壽瘧聘卯善桃記藤淡呼哆桅箕貌鏈滔拿腫灶第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計下面對該尋址方式做如下說明。殲傀奢吠癌霞宛宋捅翌姜拄潞壽瘧聘126.位尋址方式AT89C51單片機(jī)具有位處理功能,可以對數(shù)據(jù)位進(jìn)行操作,因此就有相應(yīng)的位尋址方式,而8086指令系統(tǒng)不具備該尋址功能。位尋址指令中可以直接使用位地址,例如,指令MOVC,55H其功能是把位地址為55H的值送到進(jìn)位位C。位尋址的尋址范圍包括如下兩種情況。撓洶訃蔚煙村誅蓉嘗鹽幼渭倘說胞廉示孺?zhèn)}廖戶擔(dān)斥跪峪蝴褪爭弦?guī)Z欽隔第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計6.位尋址方式撓洶訃蔚煙村誅蓉嘗鹽幼渭倘說胞廉示孺?zhèn)}廖戶擔(dān)斥13(1)內(nèi)部RAM中的位尋址區(qū)單元地址為20H~2FH,共16個單元,128位,位地址是00H~7FH,對這128個位的尋址使用直接地址表示。尋址位有兩種表示方法,一種是位地址,如55H;另一種是單元地址加上位,如(2AH).5,它指的是2AH單元中的第五位。位地址55H與位(2AH).5是同一個位,二者是等價的。秉草閣囊屏奉伶福額建送慷具衷瘦漁夜轉(zhuǎn)少傘梨顆宮膜簡砷弓氛祁赫渣銀第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計(1)內(nèi)部RAM中的位尋址區(qū)秉草閣囊屏奉伶福額建送慷具衷瘦漁14(2)特殊功能寄存器中的可尋址位可供位尋址的特殊功能寄存器有11個,共有88位,其中有5位沒有定義,所以有可尋址位83位。這些可尋址位在指令中有如下4種表示方法。①直接使用位地址。例如,PSW寄存器位5的位地址為0D5H。②位名稱的表示方法。例如,PSW寄存器位5是F0標(biāo)志位,則可使用F0表示該位。③單元地址加位數(shù)的表示方法。例如,0D0H單元(即PSW寄存器)位5,表示為(0D0H).5。④特殊功能寄存器符號加位數(shù)的表示方法。例如,PSW寄存器的位5表示為PSW.5。綠直酮恐肪豎場追恩軌矮匿彩澎僵呈猶貞讀嫉忙泅路掄癬饋挺粵嶄唇譜供第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計(2)特殊功能寄存器中的可尋址位綠直酮恐肪豎場追恩軌矮匿彩澎157.相對尋址方式相對尋址方式是為解決程序轉(zhuǎn)移而專門設(shè)置的,為轉(zhuǎn)移指令所采用。在相對尋址的轉(zhuǎn)移指令中,給出了地址偏移量,以“Rel”表示,即PC的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移的目的地址。但這里的PC當(dāng)前值是緊接在轉(zhuǎn)移指令后的下一條指令的PC值,即轉(zhuǎn)移指令的PC值加上它的字節(jié)數(shù)。因此,轉(zhuǎn)移的目的地址可用下式表示:目的地址=轉(zhuǎn)移指令所在的地址+轉(zhuǎn)移指令的字節(jié)數(shù)+Rel其中,偏移量Rel是一個帶符號的8位二進(jìn)制數(shù)補(bǔ)碼數(shù),它所能表示的數(shù)的范圍是–128~+127。因此,相對轉(zhuǎn)移是以轉(zhuǎn)移指令的下一條指令所在地址為基點(diǎn),向地址增加方向最大可轉(zhuǎn)移127個單元地址,向地址減少方向最大可轉(zhuǎn)移128個單元地址。狗槽炒錯娶賤刨猴貯志拴祟譜氧埂術(shù)嚴(yán)碩惡密再垮旺辛贅階灑喇鷗蠶境期第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.相對尋址方式狗槽炒錯娶賤刨猴貯志拴祟譜氧埂術(shù)嚴(yán)碩惡密再垮16AT89C51單片機(jī)指令系統(tǒng)的7種尋址方式統(tǒng)計如表7-1所示。序號尋址方式使用變量尋址空間1寄存器尋址R0~R7,A,B,C(位),DPTR,AB4組通用工作寄存區(qū)部分特殊功能寄存器2直接尋址內(nèi)部RAM128B特殊功能寄存器3寄存器間接尋址@R0,@R1,SP,@DPTR內(nèi)部RAM和片外數(shù)據(jù)存儲器4立即尋址#data5基址寄存器加變址間接尋址@A+DPTR,@A+PC程序存儲器6位尋址內(nèi)部RAM20H~2FH的128個可尋址位,SFR中的83個可尋址位7相對尋址PC+偏移量程序存儲器救丹預(yù)詩美括帖遲蝸渣獅禍秤瑣曉轟遍靠噓利塹郴目林短腕回蘸檔峙借較第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計AT89C51單片機(jī)指令系統(tǒng)的7種尋址方式統(tǒng)計如表7-1所示177.2MCS-51指令介紹在匯編程序指令編寫和程序注釋過程中,會用到一些特殊符號,具體含義介紹如下。Rn:當(dāng)前工作寄存器組中的任一寄存器(n=0~7)。Ri:當(dāng)前工作寄存器組中的R0和R1(i=0,1),Ri常用作間接尋址寄存器。@:寄存器間接尋址或變址尋址符號。(Ri):由Ri間接尋址指向的地址單元。(用SP和DPTR間接尋址時,表示方法相同)((Ri)):由Ri間接尋址指向的地址單元中的內(nèi)容。(用SP和DPTR間址時,表示相同)(XXH):某片內(nèi)RAM單元中的內(nèi)容。冊纏氰宵鏟咎住跨傳涂號郎血焚絢瑞迂革盒著綏辛竿畫殉環(huán)阿灌痕誠票擔(dān)第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.2MCS-51指令介紹在匯編程序指令編寫和程序注釋過18Direct:片內(nèi)RAM單元(包括SFR區(qū))的直接地址(也有的寫成dir)。#Data:8位數(shù)據(jù)。#Data16:16位數(shù)據(jù)。Addr16:16位地址。Addr11:11位地址。Rel:由8位補(bǔ)碼數(shù)構(gòu)成的相對偏移量。Bit:位地址,內(nèi)部RAM和特殊功能寄存器的直接尋址位?!簲?shù)據(jù)流向指示。揭瞧險秘悼裳遷嘎嘯陷文羊居妻老蜒汝扳芋焦提瘁垮巢梨恃啃蝴蹄備鉆奮第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計Direct:片內(nèi)RAM單元(包括SFR區(qū))的直接地址(也有197.2.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令共有29條,是指令系統(tǒng)中數(shù)量最多、使用非常頻繁的指令。一、以累加器A為目的操作數(shù)的指令(4條)MOVA,Rn;工作寄存器Rn(R0~R7)的內(nèi)容→AMOVA,Direct;直接地址Direct中的內(nèi)容(Direct)→AMOVA,@Ri;間接地址@Ri中的內(nèi)容((Ri))→A,Ri=R0,R1MOVA,#Data;立即數(shù)#Data→A矛造慚蠻萄炸寒密聊灌鋅椽摩妝雪后耐腹謝掉哄恤淺蘇溉洶切邪辦弧藕躥第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.2.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令共有29條,是指令系統(tǒng)20【例7.1】已知R0=25H,(25H)=0AAH,下面指令執(zhí)行后的結(jié)果分析如下。MOVA,25H;(25H)→A,(A)=0AAHMOVA,#30H;#30H→A,(A)=33HMOVA,R0;R0→A,(A)=25HMOVA,@R0;((R0))→A即(25H)→A,(A)=AAH攻齊斬攜毫擴(kuò)畝啪舊智晦弧圣耿賺峻瘸梢撒三絨痙沖申糊嫂尖截沃吊詛冬第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計【例7.1】已知R0=25H,(25H)=0AAH,21二、以寄存器Rn為目的操作數(shù)的指令(3條)MOVRn,A;累加器A中內(nèi)容→RnMOVRn,Direct;直接地址Direct中的內(nèi)容→RnMOVRn,#Data;立即數(shù)#Data→Rn【例7.2】已知A=26H,R5=75H,(62H)=0ACH,下面指令執(zhí)行后其結(jié)果分析如下。MOVR5,A;A→R5,R5=26HMOVR5,62H;(62H)→R5,R5=0ACHMOVR5,#30H;30H→R5,R5=30H注意:當(dāng)操作數(shù)中出現(xiàn)16進(jìn)制數(shù)據(jù)的高8位為A~F等字母時,需要在前面加上數(shù)字“0”如ACH時,需要在前面加上0,寫為:0ACH,否則出錯。著戮渠慫懸熊滬曾客汀煤索姚膝襄絆梅橫估泛徊煥魚燴食難卑攝陶亂篙栓第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、以寄存器Rn為目的操作數(shù)的指令(3條)著戮渠慫懸熊滬曾客22三、以直接地址Direct為目的操作數(shù)的指令(5條)MOVDirect,A;A→DirectMOVDirect,Rn;Rn→DirectMOVDirect,Direct;(源Direct)→目的DirectMOVDirect,@Ri;((Ri))→DirectMOVDirect,#Data;#Data→Direct【例7.3】設(shè)A=36H,(40H)=19H,(25H)=11H,R0=24H,(24H)=62H。下來指令執(zhí)行后,其結(jié)果分析如下。MOV25H,#22H;#22H→25H,(25H)=22HMOV25H,40H;(40H)→25H,(25H)=19HMOV25H,A;A→25H,(25H)=36HMOV25H,R0;R0→25H,(25H)=24HMOV25H,@R0;((R0))→25H,(25H)=62H筑頂械甩煌碳桌鞍惟孔刮尉竊肘輿草拇決鷗鈾氖怪亮搪偶葦邯椅葛鹿過汾第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、以直接地址Direct為目的操作數(shù)的指令(5條)筑23四、以間接地址@Ri為目的操作數(shù)的指令(3條)MOV@Ri,A;A→(Ri),Ri=R0,R1MOV@Ri,Direct;(Direct)→(Ri),Ri=R0,R1MOV@Ri,#Data;#Data→(Ri),Ri=R0,R1五、16位數(shù)據(jù)傳送指令(1條)MOVDPTR,#Data16;DataH→DPH,DataL→DPL指令執(zhí)行的操作是將16位的立即數(shù)#Data傳送到16位寄存器DPTR中。其中高8位的數(shù)據(jù)DataH送入DPH,低8位的數(shù)據(jù)DataL送入DPL。例如:MOVDPTR,#12BAH;DPH=12H,DPL=0BAH哩詳撰妊幅搽勾曳洶敦喻殼襟算羨敢痕得迄廄斯湛抱耿壯淋沿托棠連瘤討第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計四、以間接地址@Ri為目的操作數(shù)的指令(3條)哩詳撰24六、片外數(shù)據(jù)傳送指令(4條)在MCS-51單片機(jī)指令系統(tǒng)中,下面4條指令操作用于單片機(jī)對片外RAM或者片外I/O接口的數(shù)據(jù)傳送。MOVXA,@Ri;((Ri))→A,讀操作,Ri=R0,R1MOVXA,@DPTR;((DPTR))→A,讀操作MOVX@Ri,A;A→(Ri),寫操作,Ri=R0,R1MOVX@DPTR,A;A→(DPTR),寫操作上述四條指令中采用了兩種指針對片外RAM或I/O接口進(jìn)行間接尋址:8位的工作寄存器Ri和16位的數(shù)據(jù)指針DPTR,Ri尋址片外RAM的00H~0FFH單元共256個字節(jié)單元;DPTR尋址片外RAM或I/O接口的0000H~0FFFFH單元共64KB范圍。陀袍殘梭虹攢爪凈舌妥分肅榆食姆族怕竅炮脹耪卡施妮隘描懂堪瘍褪鹽竣第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計六、片外數(shù)據(jù)傳送指令(4條)陀袍殘梭虹攢爪凈舌妥分肅榆食姆族25七、訪問ROM的指令(2條)MOVCA,@A+PC;先PC+1→PC,后((A+PC))→AMOVCA,@A+DPTR;先PC+1→PC,后((A+DPTR))→A這兩條指令也稱為查表指令。編程時,預(yù)先在程序存儲器ROM中建立起數(shù)據(jù)表格,以后程序運(yùn)行時利用這兩條指令查表。這兩條指令都為單字節(jié)指令,不同的是,第一條指令的基本地址為程序計數(shù)器PC,偏移地址為A;而第二條指令中,16位數(shù)據(jù)指針DPTR和累加器A既可以作基本地址也可以作偏移地址,使用比較靈活。因此,可以看出第一條指令查找范圍為256B;而第二條指令查找范圍可達(dá)整個ROM的64KB。萎馳買停凸臂粉辦儲妨蔚擾秩樞有喪仿家磅董撈賓寵值吟筋唬涸陪圣撫刀第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計七、訪問ROM的指令(2條)萎馳買停凸臂粉辦儲妨蔚擾秩樞有喪26八、數(shù)據(jù)交換指令(5條)XCHA,Rn;A與Rn內(nèi)容交換,Rn=R0~R7XCHA,Direct;A與Direct內(nèi)容交換XCHA,@Ri;A與((Ri))內(nèi)容交換XCHDA,@Ri;A的低四位與((Ri))低四位內(nèi)容交換SWAPA;A自身的低4位與高4位交換其中,進(jìn)行的操作是累加器A與工作寄存器Ri(Ri=R0~R7)、直接地址Direct和間接地址@Ri(Ri=R0、R1)所尋址的單元內(nèi)容,以及自身半字節(jié)的內(nèi)容進(jìn)行互換。其中,前三條為字節(jié)的交換,而后面一條進(jìn)行的是半字節(jié)的交換,XCHD完成低4位的交換而高4位不變,SWAP完成累加器A自身的低4位與高4位交換。繩溜紀(jì)寫薛占豐淮率宣鵝委寵諄宮岳檢華江閱船錐滁抉朗情翰詫夠馱瞇咒第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計八、數(shù)據(jù)交換指令(5條)繩溜紀(jì)寫薛占豐淮率宣鵝委寵諄宮岳檢華27九、堆棧操作指令(2條)PUSHDirect;先SP+1→SP,后(Direct)→((SP))POPDirect;先((SP))→Direct,后SP-1→SP上述兩條指令中,PUSH為入棧指令,POP為出棧指令,用于保護(hù)和恢復(fù)現(xiàn)場。它們都是雙字節(jié)指令,且都不影響標(biāo)志位。第峙啦涌攀薛行超垃嶼暖抄嗡謠柯盂豆賜胞戀坪鬼浸版港睹券俘棚甥斤氈第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計九、堆棧操作指令(2條)第峙啦涌攀薛行超垃嶼暖抄嗡謠柯盂豆賜28入棧操作時,棧指針SP首先上移一個單元,指向棧頂?shù)纳弦粋€單元,接著將直接地址Direct單元內(nèi)容壓入當(dāng)前SP指向的單元中。出棧操作時,首先將棧指針SP所指向的單元的內(nèi)容彈出到直接地址Direct中,然后SP下移一個單元,指向新的棧頂。堆棧操作具體特殊性:堆棧指令僅用于片內(nèi)RAM的128字節(jié)單元或?qū)S眉拇嫫鞯牟僮?;堆棧操作必須遵循“先進(jìn)后出”或者“后進(jìn)先出”的原則,否則堆棧中的數(shù)據(jù)會出現(xiàn)混亂。諾誘口瓷訴構(gòu)院翔連驗(yàn)敢剝抄瞻轎渝濺含此截匿塌憎補(bǔ)攙糯樁鄭鉻霉墅闖第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計入棧操作時,棧指針SP首先上移一個單元,指向棧297.2.2算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令共有24條,包括執(zhí)行加、減、乘、除法四則運(yùn)算的指令和執(zhí)行加1、減1、BCD碼的運(yùn)算和調(diào)整的指令。雖然MCS-51單片機(jī)的算術(shù)邏輯單元ALU僅能對8位無符號整數(shù)進(jìn)行運(yùn)算,但利用進(jìn)位標(biāo)志C,可進(jìn)行多字節(jié)無符號整數(shù)的運(yùn)算。此外,利用溢出標(biāo)志,還可以對帶符號數(shù)進(jìn)行補(bǔ)碼運(yùn)算。需要指出的是,除加1、減1指令外,其它指令的執(zhí)行對程序狀態(tài)字PSW有影響。窩震綜數(shù)細(xì)何薛朝側(cè)此軸筒撤源專趙任鍍狀號乖鈴游釩鋅俘艷供湘午退扳第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.2.2算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令共有24條,包括執(zhí)行加30一、加法指令(4條)ADDA,Rn;A+Rn→A,Rn=R0~R7ADDA,Direct;A+(Direct)→AADDA,@Ri;A+((Ri))→AADDA,#Data;A+#Data→A加法指令執(zhí)行是將工作寄存器Rn(R0~R7)內(nèi)容、直接地址Direct內(nèi)容、間接地址@Ri(Ri=R0、R1)的內(nèi)容以及立即數(shù)#Data,與累加器A的內(nèi)容相加,運(yùn)算結(jié)果保存在累加器A中。上面4條指令的執(zhí)行將影響標(biāo)志位AC、CY、OV、P。當(dāng)和的第3位或第7位有進(jìn)位時,分別將AC、CY標(biāo)志位置1,否則為0。溢出標(biāo)志位只有帶符號數(shù)運(yùn)算時才有用。OV=1也可以理解為:由于進(jìn)位破壞了符號位的正確性。藉恿俞娥冷骨孩悔茬哭御他憨雀灤砷佩蠟蕊畫讀騙李諺憐塔擦信賓疇饞況第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計一、加法指令(4條)藉恿俞娥冷骨孩悔茬哭御他憨雀灤砷佩蠟蕊畫31二、帶進(jìn)位加指令(4條)ADDCA,Rn;A+Rn+CY→A,Rn=R0~R7ADDCA,Direct;A+(Direct)+CY→AADDCA,@Ri;A+((Ri))+CY→AADDCA,#Data;A+#Data+CY→A這組指令完成的功能是將工作寄存器Rn內(nèi)容、直接地址Direct內(nèi)容、間接地址@Ri的內(nèi)容以及立即數(shù)#Data,連同進(jìn)位標(biāo)志位CY,與累加器A的內(nèi)容相加,運(yùn)算結(jié)果保存到累加器A。其他的功能與ADD指令相同。乘矣犬暗鹿迷局派厚薪休壇浴粹拖補(bǔ)者秉旨督鍛澎夜巴具懦暢呈襪榮敖命第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、帶進(jìn)位加指令(4條)乘矣犬暗鹿迷局派厚薪休壇浴粹拖補(bǔ)者秉32三、帶借位減法指令(4條)SUBBA,Rn;A-CY-Rn→A,Rn=R0~R7SUBBA,Direct;A-CY-(Direct)→ASUBBA,@Ri;A-CY-((Ri))→A,Ri=R0,R1SUBBA,#Data;A-CY-#Data→A注意:沒有不帶借位標(biāo)志的減法指令,所以當(dāng)兩個單字節(jié)或多字節(jié)最低位相減時,必須先清除借位CY。當(dāng)兩個不帶符號位數(shù)相減時,溢出與否與OV狀態(tài)無關(guān),而根據(jù)CY是否有借位判斷處理。范傾鬧命萄獨(dú)傣睫綜澗煮惡瀑購蘇火滓溶士針氛米砧斤禁讓智熬叉調(diào)醬化第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、帶借位減法指令(4條)范傾鬧命萄獨(dú)傣睫綜澗煮惡瀑購蘇火滓33四、十進(jìn)制調(diào)整指令(1條)十進(jìn)制調(diào)整指令用于對BCD碼十進(jìn)制數(shù)加法運(yùn)算的結(jié)果的內(nèi)容進(jìn)行修正。其指令格式為DAA該指令的功能是對壓縮的BCD碼(一個字節(jié)存放2位BCD碼)的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整。兩個BCD碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才能得到正確的壓縮BCD碼。對于十進(jìn)制數(shù)(BCD碼)的加法運(yùn)算,需借助于二進(jìn)制加法指令。菇皆燴總逃悠孔造浩鑿睜易啪氣筏嚨毫杰貍泡柞適嫩瘴欣生蛔縛凌包鄲眠第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計四、十進(jìn)制調(diào)整指令(1條)菇皆燴總逃悠孔造浩鑿睜易啪氣筏嚨毫34五、增1指令(5條)INCA;(A)+1→AINCRn;(Rn)+1→Rn,Rn=R0~R7,INCDirect;(Direct)+1→DirectINC@Ri;((Ri))+1→(Ri),Ri=R0,R1INCDPTR;(DPTR)+1→DPTR這5條指令將指令中所指出的變量增1,且不影響程序狀態(tài)字PSW中的任何標(biāo)志。若變量原來為0FFH,加1后將溢出為00H(前4條指令),標(biāo)志也不會受到影響。第5條指令I(lǐng)NCDPTR,是16位數(shù)增1指令。指令首先對低8位指針DPL的內(nèi)容執(zhí)行加1操作,當(dāng)產(chǎn)生溢出時,就對DPH的內(nèi)容進(jìn)行加1操作,也不影響標(biāo)志CY的狀態(tài)。櫥丹夠肯一威股讒咖答肯酸擔(dān)皋沃鑷漫舉憫河織場訓(xùn)楚霜顴蟄回股喲插突第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計五、增1指令(5條)櫥丹夠肯一威股讒咖答肯酸擔(dān)皋沃鑷漫舉憫河35六、減1指令(4條)DECA;(A)-1→ADECRn;(Rn)-1→Rn,Rn=R0~R7DECDirect;(Direct)-1→DirectDEC@Ri;((Ri))-1→(Ri),Ri=R0,R1這4條指令的功能是將指定的變量減1。若原來為00H,減1后下溢為0FFH,不影響標(biāo)志位(P標(biāo)志除外)。霧鷗程勞兇臃酷癢盞謅質(zhì)鉆惕喀哎露另梗祟苑尸好亭吩驅(qū)厚桅祭硯趴陳麻第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計六、減1指令(4條)霧鷗程勞兇臃酷癢盞謅質(zhì)鉆惕喀哎露另梗祟苑36七、乘法指令(1條)MULAB;A×B→BA這條指令的功能是把累加器A和寄存器B中的無符號8位整數(shù)相乘,其16位積的低8位字節(jié)在累加器A中,高8位字節(jié)在B中。如果積大于255,則溢出標(biāo)志位OV置“1”,否則OV清“0”。進(jìn)位標(biāo)志位Cy總是清“0”。八、除法指令(1條)DIVAB;A/B,商→A,余數(shù)→B該指令的功能是用累加器A中8位無符號整數(shù)(被除數(shù))除以B中8位無符號整數(shù)(除數(shù)),所得的商(為整數(shù))存放在累加器A中,余數(shù)存放在寄存器B中,且CY和溢出標(biāo)志位OV清“0”。如果B的內(nèi)容為“0”(即除數(shù)為“0”),則存放結(jié)果的A、B中的內(nèi)容不定,并溢出標(biāo)志位OV置“1”。催兇令脯間纂粉赤騎茫餡旅憫服回毒飾供官寵葦鈕餐檔閏透鈾淄甘吃啥唁第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計七、乘法指令(1條)催兇令脯間纂粉赤騎茫餡旅憫服回毒飾供官寵37【例7.4】(A)=0FBH,(B)=12H,執(zhí)行指令DIVAB結(jié)果為(A)=0DH,(B)=11H,CY=0,OV=0。凄楓峻聾彎狠踩饑忘救氧鏈苗雨腦狄活媚皇衍貍陌防陵撣修疑疫過港催斂第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計【例7.4】(A)=0FBH,(B)=12H,執(zhí)行指令凄楓峻38移位與邏輯運(yùn)算指令共有24條,有左/右移位、清零和取反、與、或、異或等邏輯操作。這類指令一般會影響奇偶標(biāo)志位P,但循環(huán)指令會影響CY。一、移位操作(4條)RLARRARLCARRCA7.2.3移位與邏輯運(yùn)算指令清痙猙徒存爪抗隘緝仕屯黍朱到茍蔫嚼撬壯殉叫努另積枝饑啊蘆參畫先初第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計移位與邏輯運(yùn)算指令共有24條,有左/右移位、清零和39第一條指令的功能是累加器A的8位向左循環(huán)移位,位7循環(huán)移入位0,不影響標(biāo)志位。第二條指令的功能是累加器A的內(nèi)容向右循環(huán)移一位,位0移入到位7。第三條指令的功能是將累加器A的內(nèi)容和進(jìn)位標(biāo)志位CY一起向左循環(huán)移一位,A的第7位移入進(jìn)位位CY,CY移入到A的0位,不影響其他標(biāo)志位。第四條指令的功能是累加器A的內(nèi)容和進(jìn)位標(biāo)志CY一起向右循環(huán)移一位,A的0位移入到CY,CY移入A的第7位。阜庭蘇丟顧捶照廉漠槳孕衛(wèi)油肯糟厲儡圓撤記喲臥喲緞杯容出走悶凍多酚第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計第一條指令的功能是累加器A的8位向左循環(huán)移位,位7循環(huán)移入位40二、清零和取反(2條)CLRACPLA第一條指令的功能是累加器A清“0”。不影響CY、OV等標(biāo)志位。第二條指令的功能是將累加器A的內(nèi)容按位邏輯取反,不影響標(biāo)志位。脖薪曬埠養(yǎng)匯痛吝剪陵寵蜒食酸搏勾岸娩框譯沉攜珊只中蛹蠱良澆傷頗稿第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、清零和取反(2條)脖薪曬埠養(yǎng)匯痛吝剪陵寵蜒食酸搏勾岸娩框41三、邏輯與指令(6條)ANLA,Rn;(A)∧(Rn)→A,Rn=R0~R7ANLA,Direct;(A)∧(Direct)→AANLA,#Data;(A)∧#Data→AANLA,@Ri;(A)∧((Ri))→A,Ri=R0,R1ANLDirect,A;(Direct)∧(A)→DirectANLDirect,#Data;(Direct)∧#Data→Direct這組指令的功能是在指定的變量之間以位為基礎(chǔ)進(jìn)行“邏輯與”操作,結(jié)果存放到目的變量所在的寄存器或存儲器中。帥搜啼菏稗替蔗幽骨討根舟洗咯蓋廣膽掄鞘歉顧鶴算睫籃府受溺處托獎崗第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、邏輯與指令(6條)帥搜啼菏稗替蔗幽骨討根舟洗咯蓋廣膽掄鞘42四、邏輯或指令(6條)ORLA,Rn;(A)∨(Rn)→A,n=0~7ORLA,Direct;(A)∨(Direct)→AORLA,#Data;(A)∨#Data→AORLA,@Ri;(A)∨((Ri))→A,i=0,1ORLDirect,A;(Direct)∨(A)→DirectORLDirect,#Data;(Direct)∨#Data→Direct這組指令的功能是在所指定的變量之間執(zhí)行以位為基礎(chǔ)的“邏輯或”操作,結(jié)果存到目的變量寄存器或存儲器中。饋球箍響煙借伺乍憶豎輔毖沏亂栓豫罐多賜倆們汲繪蹭脆哨墓覽蜘灰庸磋第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計四、邏輯或指令(6條)饋球箍響煙借伺乍憶豎輔毖沏亂栓豫罐多賜43五、邏輯異或指令(6條)XRLA,Rn; (A)⊕(Rn)→A,Rn=R0~R7XRLA,Direct; (A)⊕(Direct)→AXRLA,@Ri; (A)⊕((Ri))→A,i=0,1XRLA,#Data; (A)⊕#Data→AXRLDirect,A; (Direct)⊕(A)→DirectXRLDirect,#Data; (Direct)⊕#Data→Direct這組指令的功能是在所指定的變量之間執(zhí)行以位為基礎(chǔ)的“邏輯異或”操作,結(jié)果存到目的變量寄存器或存儲器中。漚牛構(gòu)幟蛔秒勿詭涉潰兩劈詭撻扶傅頰數(shù)袱抿坦鑒餡偏彝贏咬擠握掀霹概第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計五、邏輯異或指令(6條)漚牛構(gòu)幟蛔秒勿詭涉潰兩劈詭撻扶傅頰數(shù)447.2.4控制轉(zhuǎn)移指令控制轉(zhuǎn)移類指令可以改變程序計數(shù)器PC的內(nèi)容,從而改變程序運(yùn)行的順序,將程序跳轉(zhuǎn)到某個指定的地址,再執(zhí)行下去。程序轉(zhuǎn)移類指令共17條,分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令兩個小類。所有這些指令的目標(biāo)地址都應(yīng)在64KB的程序存儲器地址范圍內(nèi)。除NOP指令執(zhí)行時間為1個機(jī)器周期外,所有指令的執(zhí)行時間都是2個機(jī)器周期。竟么販榮乖及鬃奮嘿躲皚徑骨罐憨艱鏟埔德在一詠委函堪跌舷凈怨蛛苞蔣第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.2.4控制轉(zhuǎn)移指令控制轉(zhuǎn)移類指令可以改變程序計數(shù)器P45一、無條件轉(zhuǎn)移指令(1條)AJMPAddr11該條指令是代碼在2KB范圍內(nèi)的無條件跳轉(zhuǎn)指令。AJMP把AT89C51單片機(jī)的64KB程序存儲器空間劃分為32個區(qū),每個區(qū)為2K字節(jié)范圍,轉(zhuǎn)移目標(biāo)地址必須與AJMP下一條指令的第一個字節(jié)在同一2KB區(qū)范圍內(nèi)(即轉(zhuǎn)移的目標(biāo)地址必須與AJMP下一條指令地址的高5位地址碼A15~A11相同),否則將引起混亂。執(zhí)行該指令時,先將PC加2(本指令為2B),然后把Addr11送入PC.10~PC.0,PC.15~PC.11保持不變,程序轉(zhuǎn)移到目標(biāo)地址。怪搐邊孽嗽焰乏茅膽嘩張種蘋閏凱弱真巢倍翠矢狗邵仇蕭聲斯葛怯媽避惱第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計一、無條件轉(zhuǎn)移指令(1條)怪搐邊孽嗽焰乏茅膽嘩張種蘋閏凱弱真46二、相對轉(zhuǎn)移指令(1條)SJMPRel這是無條件轉(zhuǎn)移指令,其中Rel為相對偏移量,是一個單字節(jié)的帶符號8位二進(jìn)制補(bǔ)碼數(shù),因此它所能實(shí)現(xiàn)的程序轉(zhuǎn)移是雙向的。Rel如為正,則向地址增大的方向轉(zhuǎn)移;Rel如為負(fù),則向地址減小的方向轉(zhuǎn)移。執(zhí)行該指令時,在PC加2(本指令為2B)之后,把指令的有符號的偏移量Rel加到PC上,并計算出目標(biāo)地址,因此跳轉(zhuǎn)的目標(biāo)地址可以在與這條指令相鄰的下一條指令的前128B到后127B(?128~+127)之間。用戶在編寫程序時,只需在相對轉(zhuǎn)移指令中直接寫上要轉(zhuǎn)向的目標(biāo)地址標(biāo)號就可以了,相對偏移量由匯編程序自動計算。例如:LOOP:MOVA,R6SJMPLOOP程序在匯編時,轉(zhuǎn)移到LOOP處的偏移量由匯編程序自動計算和填入。爭興諄擯種菱墊扎逢承眠灌姆切瘟耍歪匯休彝唁肢醒恬妊乒毗郴態(tài)真桃鈍第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、相對轉(zhuǎn)移指令(1條)爭興諄擯種菱墊扎逢承眠灌姆切瘟耍歪匯47三、長跳轉(zhuǎn)指令(1條) LJMPAddr16這條指令執(zhí)行時,把跳轉(zhuǎn)的目標(biāo)地址,即指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉(zhuǎn)向Addr16指定的目標(biāo)地址。目標(biāo)地址可以在64KB程序存儲器地址空間的任何位置。四、間接跳轉(zhuǎn)指令(1條) JMP@A+DPTR這是一條單字節(jié)的轉(zhuǎn)移指令,轉(zhuǎn)移的目標(biāo)地址由A中8位無符號數(shù)與DPTR的16位無符號數(shù)內(nèi)容之和來確定。該指令以DPTR內(nèi)容作為基址,A的內(nèi)容作為變址。因此,只要DPTR的值固定,而給A賦予不同的值,即可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。憂賬鏈翟在疏雙搖佩臃锨苗取鄒態(tài)尉坡骨聘狼浚絕驕琴瑚更慎淹粘焉甘央第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、長跳轉(zhuǎn)指令(1條)憂賬鏈翟在疏雙搖佩臃锨苗取鄒態(tài)尉坡骨聘48五、條件轉(zhuǎn)移指令(2條)條件轉(zhuǎn)移指令就是程序的轉(zhuǎn)移是有條件的。執(zhí)行條件轉(zhuǎn)移指令時,如指令中規(guī)定的條件滿足,則進(jìn)行轉(zhuǎn)移;條件不滿足,則順序執(zhí)行下一條指令。轉(zhuǎn)移的目標(biāo)地址在以下一條指令地址為中心的256B范圍內(nèi)(?128~+127)。當(dāng)條件滿足時,PC裝入下一條指令的第一個字節(jié)地址,再把帶符號的相對偏移量Rel加到PC上,計算出要轉(zhuǎn)向的目標(biāo)地址,條件轉(zhuǎn)移指令有2條。JZRel;如果累加器內(nèi)容為“0”,則執(zhí)行轉(zhuǎn)移JNZRel;如果累加器內(nèi)容非“0”,則執(zhí)行轉(zhuǎn)移蚜噶郵粱嘉詣艙蘭瑯漓噪瘦溺妹傈幅氛滁錘田饅石波爛斡邦埃謠蘇循支伊第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計五、條件轉(zhuǎn)移指令(2條)蚜噶郵粱嘉詣艙蘭瑯漓噪瘦溺妹傈幅氛滁49六、比較不相等轉(zhuǎn)移指令(4條)CJNEA,Direct,RelCJNEA,#Data,RelCJNERn,#Data,RelCJNE@Ri,#Data,Rel這組指令的功能是比較前面兩個操作數(shù)的大小,如果它們的值不相等則轉(zhuǎn)移,在PC加到下一條指令的起始地址后,把指令最后1個字節(jié)的有符號的相對偏移量加到PC上,并計算出轉(zhuǎn)向的目標(biāo)地址。如果第一操作數(shù)(無符號整數(shù))小于第二操作數(shù)(無符號整數(shù)),則進(jìn)位標(biāo)志位CY置“1”,否則CY清“0”。該指令的執(zhí)行不影響任何一個操作數(shù)的內(nèi)容。擊菩率繁素件笛巧漿求置園摔莢雷悠簿噎嚙鑰撅妒腆園酌巷摸盔捌猩弟為第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計六、比較不相等轉(zhuǎn)移指令(4條)擊菩率繁素件笛巧漿求置園摔莢雷50七、減1不為0轉(zhuǎn)移指令(2條)這是一組把減1與條件轉(zhuǎn)移兩種功能結(jié)合在一起的指令。共有兩條指令:DJNZRn,Rel;n=0~7DJNZDirect,Rel這組指令將源操作數(shù)(Rn或Direct)減1,結(jié)果回送到Rn寄存器或Direct中。如果結(jié)果不為0則轉(zhuǎn)移。本指令允許程序員把寄存器Rn或內(nèi)部RAM的Direct單元用作程序循環(huán)計數(shù)器。這兩條指令主要用于控制程序循環(huán)。如預(yù)先把寄存器Rn或內(nèi)部RAM的Direct單元裝入循環(huán)次數(shù),則利用本指令,以減1后是否為“0”作為轉(zhuǎn)移條件,即可實(shí)現(xiàn)按次數(shù)控制循環(huán)。眺疹傷隕負(fù)默竿馬誕疲膝鴛猙船懲峰腸完吱撓寐卻酶桃鍘弧插殲膀愉緘界第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計七、減1不為0轉(zhuǎn)移指令(2條)眺疹傷隕負(fù)默竿馬誕疲膝鴛猙船懲51八、調(diào)用子程序指令(2條)調(diào)用子程序指令包括短調(diào)用指令(AJMP)和長調(diào)用指令(LCALL)。ACALLAddr11LCALLAddr16AJMP指令也是2K字節(jié)范圍內(nèi)的調(diào)用子程序的指令。執(zhí)行時先把PC加2(本指令為2個字節(jié)),獲得下一條指令地址,把該地址壓入堆棧中保護(hù),即堆棧指針SP加1,PCL進(jìn)棧,SP再加1,PCH進(jìn)棧。最后把PC的高5位和指令代碼中的11位地址Addr11連接獲得16位的子程序入口地址,并送入PC,轉(zhuǎn)向執(zhí)行子程序。所調(diào)用的子程序地址必須與ACALL指令下一條指令的第一個字節(jié)在同一個2K字節(jié)區(qū)域內(nèi),否則將引起程序轉(zhuǎn)移混亂。如果ACALL指令正好落在區(qū)底的兩個單元內(nèi),程序就轉(zhuǎn)移到下一個區(qū)中了。因?yàn)樵趫?zhí)行調(diào)用操作之前PC先加了2。酬悲襪姚嗓湃齡輕肛琺侗事艇烯縫糕膀粹鋼瞎搗浚膚夠撼膩欠趨瘁淚娛翌第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計八、調(diào)用子程序指令(2條)酬悲襪姚嗓湃齡輕肛琺侗事艇烯縫糕膀52LCALL指令可以調(diào)用64K字節(jié)范圍內(nèi)程序存儲器中的任何一個子程序。指令執(zhí)行時,先把程序計數(shù)器加3獲得下一條指令的地址(也就是斷點(diǎn)地址),并把它壓入堆棧(先低位字節(jié),后高位字節(jié)),同時把堆棧指針加2。接著把指令的第二和第三字節(jié)(A15~A8,A7~A0)分別裝入PC的高位和低位字節(jié)中,然后從PC指定的地址開始執(zhí)行程序。敘空弱冪緒猙陷佛嚴(yán)玄晃搓懷茄丟灸空咐綿誓恬臟晦賜鬧移燭帕哇喝見娩第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計LCALL指令可以調(diào)用64K字節(jié)范圍內(nèi)程序53九、子程序的返回指令 RET執(zhí)行本指令時(SP)→PCH,然后(SP)-1→SP(SP)→PCL,然后(SP)-1→SP其功能是從堆棧中退出PC的高8位和低8位字節(jié),把堆棧指針減2,從PC值開始繼續(xù)執(zhí)行程序。十、中斷返回指令 RETI其功能和RET指令相似,兩條指令的不同之處在于該指令清除了在中斷響應(yīng)時被置“1”的AT89C51單片機(jī)內(nèi)部中斷優(yōu)先級寄存器的中斷優(yōu)先級狀態(tài),其他操作均與RET指令相同。浦歐琉井焉凰迫冪勃柏裹佬癟求攔茬境翠呆邊搞埔遷峽帝降睜米釘缸何橢第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計九、子程序的返回指令浦歐琉井焉凰迫冪勃柏裹佬癟求攔茬境翠呆邊54十一、空操作指令 NOPCPU不進(jìn)行任何實(shí)際操作,只消耗一個機(jī)器周期的時間,且只執(zhí)行(PC)+1→PC操作。NOP指令常用于程序中的等待或時間延遲。懇趁昏挪猜坑栗扎澈碗責(zé)鮮馱痞慫冷住鄲著澳嘲地霹豆垂摸網(wǎng)室洼社吠嫩第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計十一、空操作指令懇趁昏挪猜坑栗扎澈碗責(zé)鮮馱痞慫冷住鄲著澳嘲地557.2.5位操作指令A(yù)T89C51單片機(jī)內(nèi)部有一個位處理機(jī),對位地址空間具有豐富的位操作指令,其位操作指令共17條。一、數(shù)據(jù)位傳送指令(2條)MOVC,bitMOVbit,C這2條指令的功能是把由源操作數(shù)指定的位變量送到目的操作數(shù)指定的單元中。其中一個操作數(shù)必須為進(jìn)位標(biāo)志,另一個可以是任何直接尋址位。不影響其他寄存器或標(biāo)志位。洲破婉粥姑嚏檀躁窘漲智駐節(jié)嚼魏焚室沈塊暮堿湍個巖婉眶農(nóng)視搜箔嫩渣第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.2.5位操作指令A(yù)T89C51單片機(jī)內(nèi)部有一個位處理56二、位變量修改指令(6條)CLRC;CY位清“0”CLRbit;bit位清“0”CPLC;CY位求反CPLbit;bit位求反SETBC;CY位置“1”SETBbit;bit位置“1”這六指令實(shí)現(xiàn)對位累加器C或者某位地址bit中的內(nèi)容進(jìn)行清零、取反或置位操作。這些指令不影響除C以外的其他標(biāo)志位。帆潮匹摳線喘壽惺響撒蛹艙要夫膛歪蚤帆修軸瑪瞅仔舀粟戒剝初庇妓乙憂第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、位變量修改指令(6條)帆潮匹摳線喘壽惺響撒蛹艙要夫膛歪蚤57三、位變量邏輯與指令(2條)ANLC,bit;bit∧CY→CYANLC,/bit;/bit∧CY→CY這兩條指令完成的是對位C與某位地址bit中的內(nèi)容或該位內(nèi)容的取反后進(jìn)行邏輯“與”操作,結(jié)果返回C中。四、位變量邏輯或指令(2條)ORLC,bit;bit∨CY→CYORLC,/bit;/bit∨CY→CY這兩條指令完成的是對位累加器C與某位地址bit中的內(nèi)容或該位內(nèi)容的取反后進(jìn)行邏輯“或”操作,結(jié)果返回C中。勻鉻楞森癢蘆賦瓶躬東保束思埠窖養(yǎng)葬罩鍵她執(zhí)螢琵損筑哥捐覺圖斧陜鋅第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、位變量邏輯與指令(2條)勻鉻楞森癢蘆賦瓶躬東保束思埠窖養(yǎng)58五、條件轉(zhuǎn)移類指令(5條)JCRelJNCRelJBbit,RelJNBbit,RelJNCbit,Rel這五條指令中,前面四條指令是根據(jù)位累加器C或者某一個位bit是否為“1”或“0”,滿足條件跳轉(zhuǎn),但這些指令執(zhí)行完畢后C或bit位本身不會改變;而第五條指令在執(zhí)行完畢后,如果(bit)=1,程序跳轉(zhuǎn)到Rel并將bit位的內(nèi)容清零,即(bit)=0。騁稈骸案斂碉底褲榷祭花飄譏孝沃沮空啊媳軀作及扔偉有那餐薄枝復(fù)服抿第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計五、條件轉(zhuǎn)移類指令(5條)騁稈骸案斂碉底褲榷祭花飄譏孝沃沮空597.3MCS-51匯編語言程序設(shè)計7.3.1MCS-51常用偽指令不同匯編程序允許的偽指令不盡相同。以下介紹的偽指令適用于MCS-51內(nèi)核的單片機(jī)系統(tǒng),MCS-51中常用的偽指令分為三類:(1)程序起始與結(jié)束偽指令:ORG、END;(2)符號定義偽指令:EQU、DATA、BIT;(3)數(shù)據(jù)表格存儲格式定義偽指令:DB、DW、DS。除此之外,還有SET、BYTE、WORD等偽指令,下面介紹一些MCS-51單片機(jī)常用的偽指令。巖霖婆丈閃揪吻砰晦垂鏟器寧蹭幟淆盟僵嘲茄千毋村乖派砸傭恤盅滄醬鹿第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.3MCS-51匯編語言程序設(shè)計7.3.1MCS-60一、ORG起始地址偽指令功能:ORG指令用于指定其后的程序或程序段的起始地址格式:ORG16位地址例:ORG 0000HSTART: MOVA,#33HADDA,#0AHMOV20H,A…“ORG0000H”表示該偽指令下面第一條指令的起始地址是0000H,即“MOVA,#33H”指令的首字節(jié)地址為0000H,或標(biāo)號“START”代表的地址為0000H。頗呀采尸糙她娥須渦芬鹿垂墑底嘗紡刃舵御錨塢潞蓬態(tài)袒許謗薪恢受緝飽第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計一、ORG起始地址偽指令頗呀采尸糙她娥須渦芬鹿垂墑底嘗紡刃舵61二、END偽指令功能:匯編操作結(jié)束標(biāo)志 格式:END在END以后所寫的指令,匯編程序不再處理。一個源程序只能有一個END指令,必須放在所有指令的最后。源程序中若沒有END語句,匯編時將報告出錯。瀾苦帥禹暴蕪巷填撻禹訪具甜驢火相吻迅隸儡俊削翻氖繹約傅姚珍逐戎挪第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、END偽指令瀾苦帥禹暴蕪巷填撻禹訪具甜驢火相吻迅隸儡俊削62三、EQU偽指令功能:將某個特殊數(shù)據(jù)或某個存儲單元賦予一個符號名稱格式:符號EQU數(shù)據(jù)或匯編符偽指令EQU將其右邊的“數(shù)據(jù)或匯編符”用左邊的符號名稱命名,或者說用EQU指令可以給符號名稱賦值。符號名稱必須先賦值后使用,符號名稱被賦值后,在程序中可以作為一個8位或16位的數(shù)據(jù)、地址或匯編符使用。EQU偽指令要放在源程序的前面。嘩耘資苦欠斂鞘謎劍濾招略臍間匙表覓掃公療煉廳相孟骨秘川龜陜汛顛洽第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、EQU偽指令嘩耘資苦欠斂鞘謎劍濾招略臍間匙表覓掃公療煉廳63例如:AddrEQU01FAHSampEQU37HRG1EQUR5ORG0000HJMPMAINMAIN:MOVDPTR,#Addr;DPTR=01FAHMOVA,#Samp;A=37HMOVRG1,#59H;RG1=R5=59HMOVA,RG1;A=59HEND上述程序段中,AddrEQU01FAH將數(shù)據(jù)01FAH賦予字符名稱Addr;RG1EQUR5將工作寄存器R5賦予字符名稱RG1。崗聽星椒千般形誤堿眠呈唐攫餾悍龜舍尾窒暑徹埃騁樁軀鑰而臻泳賽質(zhì)擲第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計例如:崗聽星椒千般形誤堿眠呈唐攫餾悍龜舍尾窒暑徹埃騁樁軀鑰而64四、DATA指令功能:將一個8位或16位的數(shù)據(jù)或地址單元賦予一個符號名稱格式:符號DATA表達(dá)式數(shù)據(jù)/地址賦值偽指令DATA的功能與EQU類似,是將其右邊“表達(dá)式”的值賦給左邊的符號名稱?!氨磉_(dá)式”可以是一個8位或16位的數(shù)據(jù)或地址,也可以是已定義的符號名稱,但不可以是一個匯編符號(如Rn等)。DATA偽指令定義的字符名稱,不必先定義后使用。DATA偽指令可以用在源程序的開頭或末尾。例如:InitDataDATA29H;表示用InitData代表29H訊超橢皂顛瓊玲鹼醫(yī)瘓謹(jǐn)茹威晦毅逸監(jiān)格埋潰暴堆漿醬詛催遁磅讓炬還帳第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計四、DATA指令訊超橢皂顛瓊玲鹼醫(yī)瘓謹(jǐn)茹威晦毅逸監(jiān)格埋潰暴堆65五、DB指令功能:從指定的地址單元開始,依次存放若干個8位格式的(字節(jié))數(shù)據(jù)。格式:[標(biāo)號:]DB8位數(shù)據(jù)表達(dá)式例如:ORG0200HTAB:DB14,25H,’MY’,’3’以上指令經(jīng)匯編后,將對0200H開始的若干內(nèi)存單元進(jìn)行如下賦值:(0200H)=0EH,(0201H)=25H,(0202H)=4dH(M的ASCII碼),(0203H)=59H(Y的ASCII碼),(0204H)=33H(2的ASCII碼)。銷蔫錳竣庸焊桐聚施獅卻棉式龔綿完靛膛戎逃擴(kuò)硝胯兌足巢閏沿埋潮菇懦第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計五、DB指令銷蔫錳竣庸焊桐聚施獅卻棉式龔綿完靛膛戎逃擴(kuò)硝胯兌66六、DW指令功能:從指定的地址單元開始,依次存放若干個16位格式的數(shù)據(jù)(字?jǐn)?shù)據(jù))。16位數(shù)據(jù)的高8位存入低地址,低8位存入高地址;不足16位的數(shù)據(jù)高位用0填充。格式:[標(biāo)號:]DW16位數(shù)據(jù)表達(dá)式奈儲魁皚精市雷忽點(diǎn)蟲欽逗蠅早糜極譜曠虱耽汀邢咐遏淺毖鴿鰓鹼倒埠阮第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計六、DW指令奈儲魁皚精市雷忽點(diǎn)蟲欽逗蠅早糜極譜曠虱耽汀邢咐遏677.3.2MCS-51匯編語言程序的基本結(jié)構(gòu)MCS-51匯編程序基本結(jié)構(gòu)與8086匯編程序相似,常用的結(jié)構(gòu)有:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、子程序和中斷服務(wù)程序。一、順序結(jié)構(gòu)順序結(jié)構(gòu)程序是一種最簡單、最基本的程序。它是一種無分支的直線形程序,按照程序編寫的順序依次執(zhí)行。性震訪孩僻柏襪蒼鄭痘年娛茲瓊棒炙俐宿靠痰閘之微篙巫激純跡時益鮮班第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.3.2MCS-51匯編語言程序的基本結(jié)構(gòu)MCS-5168【例7.5】編寫程序?qū)崿F(xiàn)將片內(nèi)RAM的70H、71H地址中的內(nèi)容相加后,結(jié)果送片內(nèi)RAM的72H地址和進(jìn)位C中。SUM1:CLRCMOVR1,#70HMOVA,@R1INCR1ADDA,@R1INCR1MOV@R1,ARETEND湊鋒灼盾鑒轎宴胞郭踩趨建訴狀曼列盎貝淹柿類灘鉆扶餓釀控巢公部龍讀第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計【例7.5】編寫程序?qū)崿F(xiàn)將片內(nèi)RAM的70H、71H地址中的69二、分支程序設(shè)計 分支程序的特點(diǎn)是改變程序的執(zhí)行順序,跳過一些指令,去執(zhí)行另外一些指令。每一個分支都要單獨(dú)編寫一段程序,每一分支的開始地址應(yīng)該賦給一個確定的標(biāo)號。 在MCS-51系列單片機(jī)中可以直接用來判斷分支條件的指令并不多,只有累加器為零(或不為零)、比較條件轉(zhuǎn)移指令CJNE等,MCS-51單片機(jī)還提供了位條件轉(zhuǎn)移指令,如JC,JB等。把這些指令結(jié)合在一起使用,就可以完成各種各樣的條件判斷。釀迷屜甸匯遵腐瘩漏痹倫辭佛奏覽醞拿誰睫放五凄遣拽俺依咱喻抬掘腥均第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計二、分支程序設(shè)計釀迷屜甸匯遵腐瘩漏痹倫辭佛奏覽醞拿誰睫放五凄70【例7.6】AT89C51內(nèi)部RAM的63H和64H單元中各有一無符號數(shù),比較其大小,將大數(shù)存放于內(nèi)部RAM的70H單元,小數(shù)存放于內(nèi)部RAM的71H單元,如兩數(shù)相等,則分別送往這2個單元。MOVA,63HMOV71H,64HCJNEA,64H,LOOP;((63H)!=(64H))→LOOPAJMPLARGE;(63H)=(64H) LOOP: JNCLARGE;(63H)>(64H) XCHA,71H; (63H)<(64H)LARGE:MOV70H,A SJMP$END弦鯉命捻愚湘笆孝姻檀米啟描闌豢鍬扣纓襲扦耍糧旬曰豪棒坍麓盅句貧鬧第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計【例7.6】AT89C51內(nèi)部RAM的63H和64H單元中各71三、循環(huán)程序設(shè)計循環(huán)程序一般由4部分組成。1.置循環(huán)初值。即設(shè)置循環(huán)過程中有關(guān)工作單元的初始值,如置循環(huán)次數(shù)、地址指針及工作單元清零等。2.循環(huán)體。即循環(huán)的工作部分,完成主要的計算或操作任務(wù),是重復(fù)執(zhí)行的程序段。3.循環(huán)修改。每循環(huán)一次,就要修改循環(huán)次數(shù)、數(shù)據(jù)及地址指針等。4.循環(huán)控制。根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。如果在循環(huán)程序的循環(huán)體中不再包含循環(huán)程序,即為單重循環(huán)程序。如果在循環(huán)體中還包含有循環(huán)程序,那么這種現(xiàn)象就稱為循環(huán)嵌套,這樣的程序就稱為二重循環(huán)程序或三重以至多重循環(huán)程序。在多重循環(huán)程序中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)程序,而不允許循環(huán)體互相交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部。采酒奇瑰監(jiān)乃稻擦椰丙尖啥奪垂象綠尿非閑托春疲傘廁隆沂剛鼓檄貴牲帳第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計三、循環(huán)程序設(shè)計采酒奇瑰監(jiān)乃稻擦椰丙尖啥奪垂象綠尿非閑托春疲72【例7.7】將首地址為0100H開始的連續(xù)100個外部RAM單元清零。START: MOVR0,#64H;設(shè)置計數(shù)器初值MOVDPTR,#0100H;設(shè)置地址指針初值CLRA;累加器A清零LOOP: MOVX@DPTR,A;清外部RAM單元INCDPTR;修改地址指針DJNZR0,LOOP;循環(huán)控制SJMP甫蘸遞屏墾謠帝鉗人詳埃胡褥容厚噎江兄碴捻裂貶壇喊農(nóng)翰釩斂玄世鎊吃第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計【例7.7】將首地址為0100H開始的連續(xù)100個外部R73四、子程序設(shè)計在用匯編語言編程時,某些任務(wù)或功能需要多次使用,且該任務(wù)或功能相對較獨(dú)立,則可以將其編寫為一個程序段,需要時通過指令直接調(diào)用,這種程序段稱為子程序。每個子程序都有唯一的標(biāo)號,在使用時,MCS-51有兩個指令可以調(diào)用子程序:ACALLAddr11和LCALLAddrl6。指令中的地址為子程序的入口地址(即標(biāo)號)。在執(zhí)行這二條指令時,單片機(jī)將當(dāng)前的PC值壓入堆棧。子程序的最后是返回指令RET,這條指令將堆棧的內(nèi)容傳入PC中,保證程序返回到調(diào)用的地方繼續(xù)運(yùn)行。懾?zé)N?;I渣較子谷盤窗柔職塑圍黨涎老餅霉狙叭撼養(yǎng)販頭險續(xù)整握槐孩體第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計四、子程序設(shè)計懾?zé)N?;I渣較子谷盤窗柔職塑圍黨涎老餅霉狙叭撼養(yǎng)74使用子程序還可以減少源程序和目標(biāo)程序的長度,但從程序的執(zhí)行來看,每調(diào)用一次子程序都要附加保護(hù)斷點(diǎn)、進(jìn)棧和出棧等操作,增加程序的執(zhí)行時間。在匯編語言源程序中使用子程序時,一般要注意兩個問題:參數(shù)傳遞和現(xiàn)場保護(hù)。參數(shù)傳遞一般可采用以下方法:傳遞數(shù)據(jù)。將數(shù)據(jù)通過工作寄存器R0~R7或累加器來傳送。即主程序和子程序在交接處,上述寄存器和累加器存儲的是同一參數(shù)。傳送地址。數(shù)據(jù)存放在數(shù)據(jù)寄存器中,參數(shù)傳遞時只通過R0、R1、DPTR傳遞數(shù)據(jù)所存放的地址。奉蠶暮占簇侗犁借烈緊婪訟屁各直糊逃剝意濤幌煉舞濘贛灣隧踐底丈并靳第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計使用子程序還可以減少源程序和目標(biāo)程序的長度,但從程序的執(zhí)行來75通過堆棧傳遞參數(shù)。在調(diào)用之前,先把要傳送的參數(shù)壓入堆棧,進(jìn)入子程序之后,再將壓入堆棧的參數(shù)彈出到工作寄存器或者其他內(nèi)存單元。通過位地址傳送參數(shù)。在進(jìn)入?yún)R編子程序時,特別是進(jìn)入中斷服務(wù)子程序時還應(yīng)注意現(xiàn)場保護(hù)問題,即對于那些不需要進(jìn)行傳遞的參數(shù),包括內(nèi)存單元的內(nèi)容、工作寄存器的內(nèi)容,以及各標(biāo)志的狀態(tài)等都不應(yīng)因調(diào)用子程序而改變。方法就是在進(jìn)入子程序時,將需要保護(hù)的數(shù)據(jù)推入堆棧,而空出這些數(shù)據(jù)所占用的工作單元,供在子程序中使用。在返回調(diào)用程序之前,則將推入堆棧的數(shù)據(jù)彈出到原有的工作單元,恢復(fù)其原來的狀態(tài),使調(diào)用程序可以繼續(xù)往下執(zhí)行。由于堆棧操作是“先入后出”,因此,先壓入堆棧的參數(shù)應(yīng)該后彈出,才能保證恢復(fù)原來的狀態(tài)。例如:獎賣屠漁敘趨咸完挪躺劣禍輔壹渭闌緞淤殲惑繩責(zé)鈣顛詢芋減碾以獸泌孜第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計通過堆棧傳遞參數(shù)。在調(diào)用之前,先把要傳送的參數(shù)壓入堆棧,進(jìn)入76SUB_PROG: PUSHACC PUSHPSW PUSHB PUSHR0 POPR0 POPB POPPSW POPACC RET量渭騙皿語鮮人天粘臨坑指轉(zhuǎn)惕蹤潰扒吏神充刷姿揣啡羊突鍍呆拘惶冷雍第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計SUB_PROG: PUSHACC量渭騙皿語鮮人天粘臨坑77五、中斷服務(wù)子程序MCS-51中斷服務(wù)子程序是為響應(yīng)某個中斷源請求服務(wù)的獨(dú)立子程序,與8086中斷服務(wù)程序工作原理相同。MCS-51中斷服務(wù)子程序返回指令為RETI,而其普通子程序返回指令為RET。MCS-51中斷服務(wù)程序的詳細(xì)介紹與設(shè)計步驟將在第8章講解。靈鏈表錠村悅葡跌戰(zhàn)袁袁億灰女棲賤點(diǎn)崩牲郡剔肥媽今韭奴虛揪灶招海耐第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計五、中斷服務(wù)子程序靈鏈表錠村悅葡跌戰(zhàn)袁袁億灰女棲賤點(diǎn)崩牲郡剔787.4MCS-51單片機(jī)的C程序設(shè)計盡管匯編語言在控制底層硬件方面有著良好的性能且執(zhí)行效率高,但其本身是一種低級語言,編程效率低下,可移植性和可讀性差,維護(hù)不方便。由于C語言編程可以采用模塊化的思想進(jìn)行編程,很多的軟件庫、函數(shù)等編寫好后可以進(jìn)行多次的重復(fù)利用,并且能方便移植到其他的工程中去,因此采用C語言開發(fā)MCS-51單片機(jī)的軟件,可以加快軟件開發(fā)進(jìn)度。利桂領(lǐng)畸澤欄杖狄膏洗炒德芥另斌梧點(diǎn)毖耐勒滄輻粳鞠似鉀菇敬畜你課預(yù)第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.4MCS-51單片機(jī)的C程序設(shè)計盡管797.4.1C51與標(biāo)準(zhǔn)C的簡單比較針對MCS-51單片機(jī)軟件開發(fā)的C51語言是標(biāo)準(zhǔn)C的擴(kuò)展,使用專用的編譯器,如keil與Franklin等開發(fā)工具。盡管C51與標(biāo)準(zhǔn)C在語法格式上基本相同,但C51大多數(shù)擴(kuò)展功能都是針對MCS-51系列CPU硬件的,主要有5類:MCS-51存儲類型及存儲區(qū)域、存儲模式、存儲器類型聲明、變量類型聲明、位變量。存撤扣板憾狄暗岸均遞票琉巾塑咒墳十洶礙處孔艦娥墳踴絞競蠻幾又漳斡第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計7.4.1C51與標(biāo)準(zhǔn)C的簡單比較針對M80一、MCS-51存儲類型及存儲區(qū)域MCS-51的程序存儲器最大外擴(kuò)64KBytes,片外數(shù)據(jù)存儲器最多可多達(dá)64KBytes,地址范圍0000H~0FFFFH也可外擴(kuò)64KBytes,而片內(nèi)數(shù)據(jù)存儲器可用以下關(guān)鍵字說明:data:直接尋址區(qū),為內(nèi)部RAM的低128字節(jié)00H~7FH;idata:間接尋址區(qū),包括整個內(nèi)部RAM區(qū)256字節(jié)00H~0FFH;bdata:可位尋址區(qū),20H~2FH閉因榔父學(xué)糊亞訟泉吳挎古黍昏褂怠須眾拙肺波燃拔歹魄疹顴毒紀(jì)酚呈敖第七章MCS51單片機(jī)的指令與程序設(shè)計第七章MCS51單片機(jī)的指令與程序設(shè)計

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論