單片機原理與應用(陳桂友)第4章指令系統(tǒng).ppt
《單片機原理與應用(陳桂友)第4章指令系統(tǒng).ppt》由會員分享,可在線閱讀,更多相關《單片機原理與應用(陳桂友)第4章指令系統(tǒng).ppt(80頁珍藏版)》請在裝配圖網上搜索。
第4章指令系統(tǒng),4.18051單片機的助記符語言,4.2指令格式及分類,4.3尋址方式,4.4數據傳送類指令,4.6算術運算類指令,4.5邏輯操作類指令,4.7位操作指令,4.8控制轉移類指令,4.18051單片機的助記符語言,高級語言編程簡單,執(zhí)行效率低,常用在計算和管理的場合。匯編語言(助記符語言)編程繁瑣,執(zhí)行效率高,宜用于需要結構緊湊、反應快速的實時控制場合。助記符一般是由操作碼和操作數兩部分組成的。操作碼反映了指令的功能,操作數代表了指令的操作對象。例如,ADDA,#6AH;A←A+#6AH其中ADD是操作碼符號。A和6AH是操作數。前者反映了該指令的功能是做加法,后者則表示相加的對象是A累加器中的內容和立即數6AH。由助記符構成的編程語言一般稱為匯編語言。目前大多數單片機的編譯系統(tǒng)都支持C語言編程,并可以對編譯的代碼進行優(yōu)化。使用C語言編程,具有編寫簡單、直觀易讀、通用性好等特點,特別是控制任務比較復雜或者具有大量運算的系統(tǒng)中,C語言更顯示出了超越匯編語言的優(yōu)勢。然而,匯編語言是理解和掌握單片機原理及應用的基礎,并且,在控制系統(tǒng)不太復雜、實時性要求較高的控制系統(tǒng)中,較多的用戶還是使用匯編語言進行程序設計。,4.1.1概述,4.1.2操作碼,操作碼是指令功能的英文縮寫。,4.1.3操作數,操作數是一條指令操作的對象。不同功能的指令,操作對象形式不同。操作數可以是數據,也可以是地址。操作數是指令中給出的數據時,被稱為立即數。它有8位和16位二進制數兩種。在助記符的數字前加以“#”來標記其是立即數,常用符號“#data”表示。操作數也可以是存放數據的地址,這些地址可以是:1.所選定寄存器工作區(qū)內的R7~R0,A、B、C(位)、AB(雙字節(jié)),DPTR(雙字節(jié))等可編址的寄存器。2.內部數據存儲器中低128字節(jié),專用寄存器SFR,可尋址的位。3.外部數據存儲器空間。4.程序存儲器空間。[注意]:編寫程序時,操作數的最高位大于9時,在操作數的最高位前要加寫0。否則,編譯會提示出錯。例如:MOVA,#0F8H是正確的,而MOVA,#F8H是不正確的。,4.2指令格式及分類,用助記符來描述機器指令的語言稱為符號語言或匯編語言,匯編語言是一種面向機器的程序設計語言。其規(guī)定的格式如下:[標號:]操作碼助記符[第一操作數][,第二操作數][,第三操作數][;注釋]標號是表示該指令所在的符號地址,一般是由字母開頭的字符串組成。例如:ABCQ3PATD678均為標號的允許格式5AC-PTR+A等均為標號不允許的格式操作碼助記符表示了指令的功能。第一操作數、第二操作數都表示操作的對象,這些是指令的核心部分。指令操作碼部分是必不可少的。操作數段有的指令可以沒有,或者只有一個操作數,例如:RETI;中斷返回,無操作數CPLA;累加器逐位取反,只有一個操作數。注釋字段是為方便用戶閱讀程序所加注的說明。,4.2.1匯編語言,4.2.2指令代碼格式,指令代碼是指令的二進制表示方法,是指令在存儲器中存放的形式。匯編語言只有經“編輯/匯編”程序翻譯成機器語言,才能被執(zhí)行。8051單片機指令系統(tǒng)中的指令字長有單字節(jié)、雙字節(jié)、三字節(jié)三種。指令字節(jié)數越多,所占用內存單元越多。但是指令執(zhí)行時間長短并不和所占用字節(jié)數的多少成比例。例如乘法為單字節(jié)指令,但是所需的指令執(zhí)行時間卻最長。單字節(jié)指令:操作碼例:RET;機器代碼:22H雙字節(jié)指令:操作碼操作數例:MOVA,#0FH;機器代碼:740FH三字節(jié)指令:操作碼第一操作數第二操作數例:MOV74H,#0BH;機器代碼:75740BH,4.2.3指令中的符號約定,4.3尋址方式,指令中的源操作數是立即數,叫做立即尋址。立即數的類型可以是:二進制(B)、十進制、十六進制(H)、整數、序數或者字符。立即數的字長可以是8位或16位。例如:MOVA,#61H這條指令是把61H這個數據送入到累加器A中。例如:MOVDPTR,#2050H這條指令是把2050H這個數據送入到數據指針DPTR中。,1.立即尋址,,操作數是指令的重要組成部分,它指定了參與運算的數或數所在單元地址,而如何得到這個地址就稱為尋址方式。一般來說,尋址方式越多,計算機功能越強,靈活性越大。所以尋址方式對機器的性能有重大影響。8051單片機共有7種尋址方式,描述如下:,2.直接尋址,直接尋址就是在指令中包含了操作數的地址,該地址直接給出了參加運算或傳送的單元或位。它可訪問三種地址空間:(1)特殊功能寄存器SFR:直接尋址是唯一的訪問形式(2)內部數據RAM中的00H~7FH的128個字節(jié)單元(3)位地址空間例如:MOVA,60H;把60H單元內容送入累加器A中。,,,3.寄存器尋址,指定某一可尋址的寄存器的內容為操作數,對寄存器ACC,B,DPTR和CY(進位標志,也是布爾處理機的累加器),其尋址時具體的寄存器已隱含在其操作碼中。而對選定的8個工作寄存器R7~R0,則用指令操作碼的低3位指明所用的寄存器。在應用中,可以先通過PSW中的RS1、RS0兩位來選擇寄存器組,再用操作碼中低3位來確定是組內哪一個寄存器,達到尋址的目的。例如:INCR5;把寄存器R3的內容加1后再送回R5,,4.寄存器間接尋址,指令指定某一寄存器的內容作為操作數地址。8051中可用來間接尋址的寄存器有:選定工作寄存器區(qū)的R0、R1,16位的數據指針DPTR,使用時前面加@表示間接尋址。例如:MOVA,@R0;將R0中的內容所表示的地址單元中的內容送給AMOVX@DPTP,A,,,5.變址尋址,由指令指定的偏移量寄存器和變址寄存器DPTR或PC相加所得結果作為操作數地址。例如:MOVCA,@A+PC其中A作為偏移量寄存器,PC作為變址寄存器,A中內容為無符號數和PC相加,從而得到其真正的操作數地址。,6.相對尋址,把指令中給定的地址偏移量與本指令所在單元地址(即程序計數器PC中的內容)相加,即得到真正的程序轉移地址。與變址方式不同。該偏移量有正、負號,在該機器指令中必須以補碼形式給出,所轉移的范圍為相對于當前PC值的-128~+127之間。例如:JC80H若C=0,則PC值不變,若進位C=1,則以現行的PC為基地址加上80H得到轉向地址。,,7.位尋址,支持位單元存取操作是8051單片機的一個主要特點。位操作指令能對位地址空間的每一位都可進行運算和傳送操作。例如:MOVC,P1.0;將P1.0的狀態(tài)傳送到CSETB20.6H;將20H單元的第6位置為1MOVA,50H;50H是字節(jié)地址MOVC,50H;50H是位地址MOV60H,50H;50H是字節(jié)地址,4.4數據傳送類指令,,數據傳送類指令是使用頻率最高的一類指令。主要用來給8051系統(tǒng)的內部和外部資源賦值,進行堆棧的存取操作等。數據傳送類指令執(zhí)行前后,對程序狀態(tài)字PSW不產生影響。按其操作方式,又可把它們分為三種:數據傳送數據交換棧操作,4.4.1數據傳送指令,格式:MOV,功能:把第二操作數指定的字節(jié)變量傳送到由第一操作數指定的單元中,不影響源字節(jié),不影響任何別的寄存器或標志。這是最靈活的操作,允許15種源和目的尋址方式組合。,一、通用傳送指令——MOV,,1.立即數送累加器A和內部數據存儲器(Rn,內部RAM,SFR)共有4條指令:MOVA,#data;(A)←#dataMOVdirect,#data;(direct)←#dataMOV@Ri,#data;((Ri))←#dataMOVRn,#data;(Rn)←#data@符號表示間接尋址,((Ri))表示把立即數送到由Ri寄存器的內容所指出的那個RAM單元中去。Ri中i=0或i=1。例1MOV@R0,#56HMOV@R1,#59H假設R0的內容為20H,則執(zhí)行上述第一條指令后,立即數56H將送入內部數據RAM字節(jié)地址為20H的單元中。例2MOVR0,#79H;將立即數79H送到R0中MOVR1,#15H;將立即數15H送到R1中例3利用直接尋址可把立即數送入內部數據RAM任意單元或SFR中任一特殊功能寄存器,如例1用間接尋址給內部RAM20H單元送立即數56H,需兩條指令:MOVR0,#20HMOV@R0,#56H用直接尋址只用一條指令:MOV20H,#56H而指令MOVP1,#80H則可把立即數80H直接送入P1(字節(jié)地址為90H)口中。,,2.內部數據存儲器(Rn,內部RAM,SFR)與累加器A傳送數據共有6條指令:MOVA,direct;(A)←(direct)MOVA,@Ri;(A)←((Ri))MOVA,Rn;(A)←(Rn)MOVdirect,A;(direct)←(A)MOV@Ri,A;((Ri))←(A)MOVRn,A;(Rn)←(A)間接尋址@Ri是以Ri的內容作為地址,由于Ri為八位寄存器,尋址范圍為0~255。但由于特殊功能寄存器SFR只能被直接尋址,而在SFR地址范圍(128~255)中很多單元又無定義,若對之讀寫,將得不到確定的值,寫入的數也將丟失。所以對內部數據存儲器來說間接尋址的真正作用范圍實際上只有0~127個單元的內部數據RAM地址。例4指令序列:MOVR1,#82HMOVA,@R1上述指令對于8051是不正確的,因為82H是特殊功能寄存器DPL的地址值,對特殊功能寄存器來說,這種間接尋址方式無效。但是,對于8052單片機而言則是正確的,其功能是將內部RAM的82H單元中的內容送到A中。并且,對于8052的內部80H~FFH的RAM單元,只能使用這種間接尋址方式進行訪問。所以欲從DPL取數到累加器A,可用直接尋址方式:MOVA,82H,,3.內部數據存儲器中Rn、SFR和內部數據RAM之間的數據傳送,共有5條指令:MOVdirect,direct;(direct目)←(direct源)MOVdirect,@Ri;(direct)←((Ri))MOVdirect,Rn;(direct)←(Rn)MOV@Ri,direct;((Ri))←(direct)MOVRn,direct;(Rn)←(direct)該5條指令共有三種尋址方式:直接尋址,寄存器尋址,寄存器間接尋址。8位直接地址可尋址0~255個單元,對于8051單片機而言,則可直接尋址內部RAM00H~7FH地址空間的單元和所有特殊功能寄存器,而對80H~0FFH地址中無定義的單元訪問是沒有意義的。例5指令MOVP3,P1可把P1口的內容直接送到P3口輸出,而不必經過累加器A“中轉”。例6若設PSW中標志位RS1、RS0為“11”,則選中第三組工作寄存器區(qū),在這種情況下:MOVdirect,R0與MOVdirect,18H兩指令是等價的。例7用立即尋址指令可直接給內部RAM中20H、25H和P1口上置數:MOV20H,#25HMOV25H,#10HMOVP1,#0CAH執(zhí)行后使(20H)=25H,(25H)=10H,(P1)=0CAH。,,4.目標地址傳送,只有一條指令:MOVDPTR,#data16功能:把16位常數裝入數據指針。例8指令MOVDPTR,#2003H表示把16位常數裝入數據指針。其中DPH=20H,DPL=03H。,二、外部數據存儲器(或擴展I/O口)與累加器A傳送指令——MOVX,,MOVX指令主要用于累加器A和外部擴充的RAM或擴展I/O口進行數據傳送。這種傳送只有一種尋址方式,就是寄存器間接尋址。用R1或R0以寄存器間接尋址方式能訪問外部數據存儲器(或擴展I/O口)256個字節(jié)中的一個字節(jié),用16位的數據存儲器地址指針DPTR以寄存器間接尋址的方法能遍訪64K的外部數據存儲器(或擴展的I/O口)的任何單元。指令格式:MOVX,MOVXA,@DPTR;(A)←((DPTR))MOVXA,@Ri;(A)←((Ri))MOVX@DPTR,A;((DPTR))←(A)MOVX@Ri,A;((Ri))←(A)例若外部數據存儲器單元中:(3007H)=(60H),(3008H)=(2FH)則執(zhí)行:MOVDPTR,#3007HMOVXA,@DPTR使累加器(A)=60H,三、程序存儲器向累加器A傳送指令——MOVC,,對于程序存儲器,8051單片機提供了兩條極其有用的查表指令。這兩條指令采用變址尋址,以PC或DPTR為基址寄存器,以累加器A為變址寄存器,基址寄存器與變址寄存器內容相加即得到程序存儲器某單元的地址值,MOVC指令則把該存貯單元的內容傳送到累加器A中。MOVCA,@A+PC;PC←(PC)+1(A)←((A)+(PC))MOVCA,@A+DPTR;(A)←((A)+(DPTR))功能:把累加器A中內容與基址寄存器(PC、DPTR)內容相加,求得程序存儲器某單元地址,再把該地址單元內容送累加器A。指令執(zhí)行后不改變基址寄存器內容,由于執(zhí)行16位加法,從低8位產生的進位將傳送到高位去,不影響任何標志。這兩條指令主要用于查表,即完成從程序存儲器讀取數據的功能。但由于兩條指令使用的基址寄存器不同,因此使用范圍也不同。,,MOVCA,@A+PC以PC作為基址寄存器,在CPU取完指令操作碼時PC會自動加1,指向下一條指令的第一字節(jié)地址,所以這時作為基址寄存器的PC已不是原值,而是PC+1值。因為累加器中的內容為8位無符號整數,這就使得本指令查表范圍只能在以PC當前值開始后的256個字節(jié)范圍內,偏移量的計算公式如下:偏移量:DIS=表首地址-(該指令所在地址+1)例1若要根據累加器A的內容找出由偽指令DB所定義的四個值中的一個。可用下列程序:ppqq:ADDA,#01Hppqq+2:MOVCA,@A+PCppqq+3:RETppqq+4:STAR:DB66HDB77HDB88HDB99H,,MOVCA,@A+DPTR指令基址寄存器為數據指針DPTR,表格常數可設置在64K程序存儲器的任何地址空間,而不必像MOVCA,@A+PC指令只設在PC值以下的256個單元中。其缺點是若DPTR已有它用,在賦表首地址之前必須保護現場,執(zhí)行完查表后再予以恢復。例2試編制根據累加器A中的數(0~9之間)查其平方表的子程序。COUNT:PUSHDPH;保護DPTR內容PUSHDPL;MOVDPTR,#TABLE;賦表首址→DPTRMOVCA,@A+DPTR;據A中內容查表POPDPL;恢復DPTR原內容POPDPHRET;返回主程序TABLE:DB00DB01DB04DB09DB16DB25DB36DB49DB64DB81,4.4.2數據交換指令,,1.字節(jié)交換指令XCHA,direct;(A)←→(direct)XCHA,@Ri;(A)←→((Ri))XCHA,Rn;(A)←→(Rn)上述指令把累加器A中內容與第二操作數所指定的工作寄存器,間接尋址和直接尋址的某單元內容互相交換。例設(R0)=20H,(A)=3FH,(20H)=75H,執(zhí)行指令XCHA,@R0將使(A)=75H,(20H)=3FH,實現了累加器A和內部RAM20H單元內容的互換。,,2.半字節(jié)交換指令XCHDA,@Ri;(A3~0)←→((Ri)3~0)該指令把累加器A的低4位和寄存器間接尋址的內部RAM單元的低4位交換,高4位內容不變,不影響標志位。例設R1的內容為30H,A的內容為67H,內部RAM中30H的內容為84H,執(zhí)行指令XCHDA,@R1結果:(A)=64H,(30H)=87H,4.4.3棧操作指令,,PUSHdirect;(SP)←(SP)+1((SP))←(direct)POPdirect;(direct)←((SP))(SP)←(SP)-1堆棧中的數據是以“后進先出”的結構方式處理的,這種“后進先出”的特點是由堆棧指針SP來控制的,SP用來自動跟蹤棧頂地址。由于單片機堆棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址,所以其過程為:入棧操作:先(SP)+1→(SP),指向棧頂的上一個空單元,后把直接尋址單元的內容壓入SP所指的單元中。出棧操作:先彈出棧頂內容到直接尋址單元,后(SP)-1→(SP),形成新的堆棧指針。例PUSHACC;保護累加器ACC中內容PUSHPSW;保護標志寄存器內容;執(zhí)行服務程序POPPSW;恢復標志寄存器內容POPACC;恢復累加器ACC中內容該程序執(zhí)行后,累加器ACC和PSW寄存器中的內容可得到正確的恢復。若為:PUSHACCPUSHPSWPOPACCPOPPSW則執(zhí)行后,將使得ACC和PSW中的內容互換。,,在數據傳送類操作中應注意以下幾點:1.除了用POP或MOV指令將數據傳送到PSW外,傳送操作一般不影響標志位。2.執(zhí)行傳送類指令時,把源地址單元的內容送到目的地址單元后,源地址單元中的內容不變。3.對特殊功能寄存器SFR的操作必須使用直接尋址,也就是說,直接尋址是訪問SFR的唯一方式。4.對于8052單片機內部RAM的80H~FFH單元只能使用@Ri間接尋址方式訪問5.將累加器ACC壓入堆?;驈棾龆褩r,應使用PUSHACC和POPACC指令,不能使用PUSHA和POPA指令。否則,程序編譯會出錯。,4.5邏輯操作類指令,,邏輯操作類指令共有24條,包括與、或、清除、求反、左右移位等邏輯操作。按操作數可劃分為單操作數和雙操作數兩種。單操作數是專門對累加器A進行的邏輯操作,這些操作主要是:清0、求反、左右移位等,操作結果保存在累加器A中。雙操作數主要是累加器A和第二操作數之間執(zhí)行邏輯與、或和異或操作,第二操作數可以是立即數,也可以是內部數據存儲器的Rn、內部數據RAM單元或者SFR。其對應的尋址方式是:寄存器、寄存器間接、直接尋址。邏輯操作的結果保存在A中。也可將直接尋址單元作為第一操作數,和立即數,累加器A執(zhí)行邏輯與、或和異或操作,結果存在直接尋址單元中。,4.5.1對累加器A進行的邏輯操作,1.累加器A清0指令:CLRA;(A)←0功能:把00H送入累加器A中2.累加器A求反指令:CPLA;(A)←()功能:把累加器內容求反后送入累加器A中。例設累加器原來內容為07H,則執(zhí)行CLRA后將變成00H,再執(zhí)行CPLA后將變?yōu)?FFH。,3.累加器A左右移位RLA;累加器左循環(huán)移位RLCA;累加器通過C左循環(huán)移位RRA;累加器右循環(huán)移位RRCA;累加器通過C右循環(huán)移位SWAPA;交換累加器兩個半字節(jié)(4位循環(huán)移位)左移一位相當于乘2。例MOVA,#01H;01H送累加器ARLA;02H送ARLA;04H送ARLA;08H送A右移一位相當于除2,上述累加器(A)=08H,執(zhí)行指令:RRA;(A)←04HRRA;(A)←02HRRA;(A)←01H將使累加器內容又變?yōu)?。通過進位標志CY的移位可用于檢查一個字節(jié)中各位的狀態(tài)或用于逐位輸出的情況。,OUTP2:RRCA;通過C右移一位MOVP1,AMOVP2.0,C;該位輸出到P2.0RET;返回該程序逐位將A中的最低位移入進位位C,并由P2.0輸出。如果反復調用該程序,并且在每次調用之間加上一定的延時,就會形成“跑馬燈”的效果。,例利用8051單片機的P1口輸出控制LED的發(fā)光,電路連接如圖4-6所示。編程實現使累加器A中的數據循環(huán)送P1口,并使用P2.0輸出指示進位標志。,,4.5.2雙操作數指令,1.累加器A與立即數、內部存儲器之間的邏輯操作由于邏輯與、或、異或三種基本操作指令格式和尋址方式都是一樣的,故放在一起介紹。#dataANL(ORL,XRL)A,direct@RiRn例設A的內容為0C3H,R0為0AAH,執(zhí)行命令(ANL、ORL、XRL)后,結果如下:ANLA,R0;(A)=82HORLA,R0;(A)=0EBHXRLA,R0;(A)=69H,,2.直接地址單元(內部RAM、SFR)與累加器A、立即數之間的邏輯操作ANL(ORL,XRL)direct,AANL(ORL,XRL)direct,#data指令完成內部數據RAM和SFR中直接尋址單元與累加器A、立即數之間的邏輯與(或,異或)操作。例1設P1內容為0AAH,A中內容為15H,則執(zhí)行:ANLP1,#0F0H;(P1)=0A0HORLP1,#0FH;(P1)=0AFHXRLP1,A;(P1)=0BFH邏輯操作是按位進行的,所以,“ANL”指令常用來屏蔽字節(jié)中的某些位,該位欲清除用“0”去“與”,該位欲保留用“1”去“與”;“ORL”指令常用來使字節(jié)中的某些位置“1”,欲保留(不變)的位用“0”去“或”,欲置位的位用“1”去“或”;“XRL”指令用來對字節(jié)中某些位取反。欲取反的位用“1”去“異或”,欲保留的位用“0”去“異或”。,例設兩位用ASCⅡ碼表示的數分別保存在40H、41H單元中把其轉換成兩位BCD數,并以壓縮形式存入40H單元中??删幊绦蛉缦拢篈NL40H,#0FH;40H的ASCⅡ碼變成BCD碼MOVA,41HANLA,#0FH;41H的ASCⅡ碼變成BCD碼RLA;左移4位RLARLARLAORL40H,A;結果存40H單元中若使用4位環(huán)移指令,將會使程序更簡煉。ANL40H,#0FH;40H的ASCⅡ碼變成BCD碼MOVA,41H;ANLA,#0FH;41H的ASCⅡ碼變成BCD碼SWAPA;高、低4位交換ORL40H,A;結果存40H單元中注意:當用邏輯與、或、異或指令修改一個并行I/O口輸出內容時,則原始值將從該輸出口的鎖存器中讀取,而不是從該輸出口的引腳上讀取。,4.6算術運算類指令,,該類指令主要完成加、減、乘、除四則運算,以及增量、減量和二十進制調整操作。除增量、減量指令外,這類指令大多數影響到狀態(tài)標志寄存器PSW。,4.6.1加減運算指令,加減運算中,以累加器A為第一操作數,并存放操作后的中間結果。第二操作數可以是立即數,工作寄存器內容,寄存器間接尋址字節(jié)或直接尋址字節(jié),運算結果會影響溢出OV,進位CY,輔助進位AC和奇偶標志P。源操作數尋址方式有:寄存器尋址、直接尋址、間接尋址和立即數共4種。,1.加法指令:ADDA,#data;(A)←(A)+#dataADDA,direct;(A)←(A)+(direct)ADDA,@Ri;(A)←(A)+((Ri))ADDA,Rn;(A)←(A)+(Rn)上述指令,把源字節(jié)變量(立即數,直接、間接地址單元,工作寄存器內容)與累加器相加,結果保存在累加器中,影響標志AC、CY、OV、P。例執(zhí)行指令:MOVA,#0C3HADDA,#0AAH運算后,CY=1,OV=1,AC=0,(PSW)=85H,(A)=6DH順便指出:OV溢出標志取決于帶符號數運算時,和的第6、7位中有一位產生進位而另一位不產生進位,則使OV置1,否則OV被清0。OV=1表示兩正數相加,和變成負數,或兩負數相加,和變成正數的錯誤結果。,2.帶進位加法指令ADDCA,#data;(A)←(A)+#data+(C)ADDCA,direct;(A)←(A)+(direct)+(C)ADDCA,@Ri;(A)←(A)+((Ri))+(C)ADDCA,Rn;(A)←(A)+(Rn)+(C)例1設累加器A內容為0AAH,R0內容為55H,C內容為1,執(zhí)行指令:ADDCA,R0將使(A)=00000000BAC=1,CY=1,OV=0例2設累加器A內容為35H,P1口的內容為48H,C=0則執(zhí)行指令:ADDCA,P1將使(A)=7DHAC=0,CY=0,OV=0這和執(zhí)行指令:ADDA,P1的結果是相同的。,例3利用ADDC指令可以進行多字節(jié)加法運算設雙字節(jié)加法中:被加數放20H,21H單元,加數放30H,31H單元,和存放在40H,41H單元,若高字節(jié)相加有進位則轉OVER處執(zhí)行,可編程序如下:ADD1:MOVA,20H;取低字節(jié)被加數ADDA,30H;低位字節(jié)相加MOV40H,A;結果送40H單元MOVA,21H;取高字節(jié)被加數ADDCA,31H;加高字節(jié)和低位來的進位MOV41H,A;結果送41H單元JCOVER;有進位去OVER處執(zhí)行OVER:……;,3.帶借位減指令SUBBA,#data;(A)←(A)-#data-(C)SUBBA,direct;(A)←(A)-(direct)-(C)SUBBA,@Ri;(A)←(A)-((Ri))-(C)SUBBA,Rn;(A)←(A)-(Rn)-(C)由于減法只有帶借位減一條指令,所以在單字節(jié)相減時,須先清借位位,以免相減后結果出錯。例1設累加器內容為D9H,R0內容為87H,求兩者相減結果。CLRCSUBBA,R0執(zhí)行后(A)=52H,CY=0,OV=0若運算兩數為無符號數,則其溢出與否和“OV”狀態(tài)無關而靠CY是否有進位予以判別,OV僅表明帶符號數運算時是否溢出。,例2兩字節(jié)數相減,設被減數放20H,21H單元,減數放30H,31H單元,差放在40H,41H單元,若高字節(jié)有借位則轉OVER處執(zhí)行,可編程序如下:SUB1:CLRC;低字節(jié)減無借位CY清0MOVA,20H;初減數送ASUBBA,30H;低位字節(jié)相減MOV40H,A;結果送40H單元MOVA,21H;被減數高字節(jié)送ASUBBA,31H;高字節(jié)相減MOV41H,A;結果送41H單元JCOVER;高字節(jié)減有借位轉OVER處執(zhí)行……OVER:…………,4.6.2乘除運算指令,1.乘法指令MULAB該指令把累加器A和寄存器B中的8位無符號整數相乘,16位乘積的低字節(jié)在累加器A中,高字節(jié)在寄存器B中,如果乘積大于255(0FFH),則溢出標志位置1,否則清0,運算結果總使進位標志CY清0。例1設(A)=80H(128),(B)=32H(50),執(zhí)行指令:MULAB執(zhí)行結果:乘積為1900H(6400),(A)=00H,(B)=19H,OV=1,CY=0,2.除法指令DIVAB該指令把累加器A中的8位無符號整數除以寄存器B中8位無符號整數,所得商放在累加器A中,余數存在寄存器B中,標志位CY和OV均清0。若除數(B中內容)為00H,則執(zhí)行后結果為不定值,并置位溢出標志OV,在任何情況下進位標志CY總清0。例設累加器內容為135(87H),B寄存器內容為12(0CH),則執(zhí)行命令:DIVAB;將使(A)=0BH,(B)=03H,OV=0,CY=0,4.6.3.增量、減量指令,1.增量指令INCA;(A)←(A)+1INCdirect;(direct)←(direct)+1INC@Ri;((Ri))←((Ri))+1INCRn;(Rn)←(Rn)+1INCDPTR;(DPTR)←(DPTR)+1INC指令把所指出的變量加1,結果仍送回原地址單元,原來若為0FFH,加1后將變成00H,運算結果不影響任何標志位。指令共使用3種尋址方式:寄存器尋址、直接尋址或寄存器間接尋址。若用本指令使輸出并行I/O口內容加1時,則用作輸出口的原始值將從輸出數據鎖存器中讀入,而不是從輸出口的引腳上讀入。,例1設(R0)=7EH,內部數據RAM中(7EH)=0FFH,(7FH)=40H,則執(zhí)行下列指令:INC@R0;(7EH)←00HINCR0;(R0)←7FHINC@R0;(7FH)←41H執(zhí)行結果:(R0)=7FH,(7EH)=00H,(7FH)=41H例2執(zhí)行指令序列:MOVDPTR,#1FFEH;(DPTR)←1FFEHINCDPTR;(DPTR)←1FFFHINCDPTR;(DPTR)←2000HINCDPTR;(DPTR)←2001H將使(DPTR)=2001H,2.減量指令DECA;(A)←(A)-1DECdirect;(direct)←(direct)-1DEC@Ri;((Ri))←((Ri))-1DECRn;(Rn)←(Rn)-1上述指令將指定變量減1,結果仍存在原指定單元,原指定單元內容若為00H,減1操作后變成0FFH,不影響任何標志位。有三種尋址方式:寄存器尋址、直接尋址或寄存器間接尋址。同增量指令一樣,若執(zhí)行對I/O并行口內容減1操作,將把該輸出口數據鎖存器讀出1,再寫入鎖存器,而不是從輸出口引腳上內容進行減1操作。例執(zhí)行下述程序:MOVR1,#7FH;(R1)←#7FHMOV7EH,#00H;(7EH)←#00HMOV7FH,#40H;(7FH)←#40HDEC@R1;(7FH)←3FHDECR1;(R1)←7EHDEC@R1;(7EH)←0FFH結果:(R1)=7EH,(7EH)=0FFH,(7FH)=3FH,4.6.4.二―十進制調整指令,DAA調整條件和方法:若[(A0-3)>9或(AC)=1],則(A0-3)←(A0-3)+06H;若[(A4-7)>9或(CY)=1],則(A4-7)←(A4-7)+60H。由于指令要利用AC,CY等標志位才能起到正確的調整作用,因此它必須跟在加法(ADD、ADDC)指令后面才能使用。指令的操作過程為:若相加后累加器低4位大于9或半進位位AC=1,則加06H修正;若相加后累加器高4位大于9或進位位CY=1,則加60H修正;若兩者同時發(fā)生或高4位雖等于9但低4位修正有進位,則應加66H修正。例1利用十進制加法調整指令作十進制減法調整,必須采用補碼相加的方法,用9AH(即十進制的100)減法減數即得以10為模的減數補碼。設被減數存30H單元,減數存40H單元,結果存50H單元,可編程序如下:BCDSUB1:CLRC;清進位位MOVA,#9AH;求減數補碼SUBBA,40HADDA,30H;進行補碼相加DAAMOV50H,A;結果(差)存50H單元,例26位BCD碼加法設被加數存在內部RAM中32H、31H、30H單元,加數存于42H、41H、40H單元,相加之和存于52H、51H、50H單元,若相加有進位(溢出)時轉符號地址OVER處執(zhí)行,可編程序如下:BCDADD:MOVA,30H;第一字節(jié)加ADDA,40HDAAMOV50H,A;存第一字節(jié)和(BCD碼)MOVA,31H;第二字節(jié)加ADDCA,41HDAAMOV51H,A;存第二字節(jié)和(BCD碼)MOVA,32H;第三字節(jié)加ADDCA,42HDAAMOV52H,A;存第三字節(jié)和(BCD碼)JCOVER;有進位轉OVER處執(zhí)行,4.7位操作指令,,位操作指令共有17條,均以位為處理對象,分別完成位傳送、位狀態(tài)控制、位邏輯操作、位條件轉移等功能。,C⊕bit→CC⊕/bit→C,4.7.1位數據傳送指令,MOVC,bit;(C)←(bit)MOVbit,C;(bit)←(C)指令完成的功能是把第二操作數所指出的布爾變量送到由第一操作數指定的位單元。其中一個操作數必為位累加器(進位標志C),另一個可以是任何直接尋址位(bit)。指令執(zhí)行結果不影響其它寄存器或標志。例1設內部數據RAM中(20H)=7FH,執(zhí)行指令:MOVC,07H;07H是位地址,即字節(jié)地址20H的第7位,將使(C)=0。例2指令:MOV0BAH,C則表示把進位位C(位累加器)送入特殊功能寄存器IP的PX1(第2位)位。,4.7.2位狀態(tài)控制指令,1.位清0指令CLRbit;(bit)←0CLRC;(C)←0上述指令可使直接尋址位(bit)或位累加器C清零,不影響其它標志。例內部數據RAM字節(jié)地址25H的內容為34H(00110100B),執(zhí)行指令:CLR2AH;2AH為字節(jié)地址25H第2位的位地址將使25H的內容變?yōu)?0H(00110000B)。,2.位求反指令CPLbit;(bit)←(/bit)CPLC;(C)←(/C)上述指令可把直接尋址位(bit)或位累加器C內容取反,不影響其它標志。例執(zhí)行指令序列MOVP1,#5DH;P1=(01011101B)CPLP1.1;P1.1求反CPLP1.2;P1.2求反則使P1口內容變?yōu)?BH(01011011B)。,3.位置位指令SETBbit;(bit)←“1”SETBC;(C)←“1”上述指令把進位標志C或任何可尋址位置“1”,不影響其它標志。例進位標志C內容為0,輸出口P1原已寫入了49H(01001001B),則執(zhí)行SETBCSETBP1.7將使進位標志(C)=1,P1口輸出數據變?yōu)镃9H(11001001B)。,4.7.3位邏輯操作指令,1.位邏輯“與”指令ANLC,bit;(C)∧(bit)ANLC,/bit;(C)∧(/bit)上述指令將直接尋址位的內容或直接尋址位內容取反后(不改變原內容)與位累加器C相與,結果保存在C中?!?bit”表示對該尋址位內容取反后再進行位操作。例當位地址(7FH)=1,累加器中(ACC.7)=1,同時(B.0)=0,進位位C置1,否則C清0,可編程序如下:MOVC,7FH;(7FH)=1送CANLC,ACC.7;(C)=“1”和(ACC.7)=“1”相與并送C暫存ANLC,/B.0;(C)∧(/B.0)→(C),2.位邏輯“或”指令ORLC,bit;(C)←(C)∨(bit)ORLC,/bit;(C)←(C)∨(/bit)位邏輯“或”指令把直接尋址位內容或直接尋址位內容取反后(不改變原尋址內容)與位累加器C進行邏輯“或”,結果保存在C中,“/bit”含義同上。位邏輯“或”操作的示意圖如圖4-4所示。例位地址7FH中的內容和累加器ACC.7,寄存器B.0中內容相“或”的程序如下:(設(7FH)=1,(B.0)=0,(ACC.7)=1)MOVC,7FHORLC,B.0ORLC,ACC.7;相“或”的結果必為“1”,存C中。,4.7.4位條件轉移指令,1.判C轉移指令JCrel;若(C)=1,則(PC)←(PC)+rel,否則順序執(zhí)行。JNCrel;若(C)=0,則(PC)←(PC)+rel,否則順序執(zhí)行。上述兩條指令通過判進位C的狀態(tài)決定程序的走向,前一條若進位標志為1,后一條若進位標志為0,就可使程序轉向目標地址,否則順序執(zhí)行下一條指令。目標地址為第二字節(jié)中的帶符號的偏移量與PC當前值((PC)+2→(PC)之和,不影響任何標志。在實際應用中,一般在rel的位置寫入欲跳轉到的標號地址,偏移量由匯編程序自動進行計算。下面的兩段指令都將使程序轉向L2處執(zhí)行:例1CLRC;C←0JCL1;C=0不轉,繼續(xù)執(zhí)行CPLC;C=1JCL2;條件滿足轉L2L1:……;L2:……;例2SETBC;C=1JNCL1;C≠0,順序執(zhí)行CPLC;C=0JNCL2;轉L2L1:……;L2:……;,,,,,2.判直接尋址位轉移指令JBbit,rel;(bit)=1,(PC)←(PC)+relJNBbit,rel;(bit)=0,(PC)←(PC)+relJBCbit,rel;(bit)=1,(PC)←(PC)+rel,(bit)←0若條件不滿足,指令順序執(zhí)行。上述指令檢測直接尋址位,若位變量為1(第一、三條指令)或位變量為0(第二條指令),則程序轉向目標地址去執(zhí)行,否則順序執(zhí)行下條指令。目標地址為PC當前值((PC)←(PC)+3)與第三字節(jié)所給帶符號的相對偏移量之和。測試位變量時,不影響任何標志,前兩條指令不影響原變量值,但后一條指令不管原變量為何值,檢測后即行清0。,,,例指令序列:MOVP1,#0CAH;(P1)←0CAH(11001010B)MOVA,#56H;(A)←56H(01010110B)JBP1.2,L1;(P1.2)=0不轉,繼續(xù)執(zhí)行JNBACC.3,L2;(ACC.3)=0轉L2處執(zhí)行L1:……;L2:……;與下列程序:MOVA,#43H;(A)←43H(01000011B)JBCACC.2,L1;(ACC.2)=0不轉JBCACC.6,L2;(ACC.6)=1轉L2,且(ACC.6)←0L1:……;L2:……;執(zhí)行后均使程序轉向L2處,但前段程序轉移后維持原變量(ACC.3)=0不變,后段程序卻把原變量(ACC.6)=1清0。,4.8控制轉移類指令,,該類指令用于控制程序的走向。利用具有16位地址的長調用、短調用指令可遍訪程序存儲器空間的任一地址單元,也可用具有11位地址的絕對調用和絕對轉移指令,實現在2K程序塊中的有效轉移。此外,全空間(64K)的長間接轉移和一頁范圍的短相對轉移以及條件轉移指令,使得用戶可靈活選擇,給程序編制帶來了很大的方便。這類指令可分為兩種:一種是程序轉移指令,另一種稱為子程序調用和返回指令。,在實際應用中,一般在偏移量(rel)或者跳轉地址(addr16或addr11)的位置寫入欲跳轉到的標號地址,由匯編程序自動進行計算。,4.8.1程序轉移指令,1.無條件轉移指令無條件轉移指令控制程序計數器從現行值轉移到目標地址,該目標地址可通過直接,間接或相對尋址得到。(1)長轉移指令LJMPaddr16;(PC)←addr16指令提供16位目標地址,將指令中第二,第三字節(jié)地址碼分別裝入PC的高8位和低8位中,程序無條件轉向指定的目標地址去執(zhí)行。不影響標志位。由于直接提供16位目標地址,所以執(zhí)行這條指令可以使程序從當前地址轉移到64K程序存儲器地址空間的任何單元。例在程序存儲器0000H單元存放一條指令LJMP2030H則上電復位后程序將跳到2030H單元去執(zhí)行,這樣可以就避開0003~0023H的中斷服務程序入口的保留單元。,(2)絕對轉移指令AJMPaddrll雙字節(jié)指令,第二字節(jié)存放的是低8位地址,第一字節(jié)5、6、7位存放著高3位地址a8~a10。指令執(zhí)行時分別把高3位和低8位地址值取出送入程序計數器PC的低11位,維持PC的高5位((PC)+2后的)地址值不變,實現2K范圍內的程序轉移。由于AJMP為雙字節(jié)指令,當程序真正轉移時PC值已加2了,因此轉移的目標地址應與AJMP下相鄰指令第一字節(jié)地址在同一2K字節(jié)范圍內。如果超過了2K范圍,匯編程序會提示出錯信息。本指令不影響標志位。,(3)相對短轉移指令SJMPrel;(PC)←(PC)+2;(PC)←(PC)+rel其中,rel為相對偏移量,是一個8位帶符號的數。指令控制程序無條件轉向指定地址。該指定地址由指令第二字節(jié)的相對地址和程序計數器PC的當前值(執(zhí)行SJMP前的PC值加2)相加形成。因而轉向地址可以在這條指令首地址的前128字節(jié)到后127字節(jié)之間。如果程序中使用:HARE:SJMPHARE將會造成單指令的無限循環(huán)。,(4)間接轉移指令JMP@A+DPTR;(PC)←(A)+(DPTR)該指令把累加器里的8位無符號數與作為基址寄存器DPTR中的16位數據相加,所得的值裝入程序計數器PC做為轉移的目標地址。指令執(zhí)行后不影響累加器和數據指針中的原內容,不影響任何標志。這是一條極其有用的多分支選擇轉移指令,其轉移地址不是匯編或編程時確定的,而是在程序運行時動態(tài)決定的,這也是和前三條指令的主要區(qū)別。正由于此,可在DPTR中裝入多分支轉移程序的首地址,而由累加器A的內容來動態(tài)選擇其中的某一個分支予以轉移,這就可用一條指令代替眾多轉移指令,實現以DPTR內容為起始的256個字節(jié)范圍的選擇轉移。,例要求當(A)=0轉處理程序CASE_0當(A)=1轉處理程序CASE_1當(A)=2轉處理程序CASE_2當(A)=3轉處理程序CASE_3當(A)=4轉處理程序CASE_4程序代碼如下:MOVDPTR,#JUMP_TABLE;表首址送入DPTR中MOVA,INDEX_NUMBER;取得跳轉索引號RLA;將索引號乘以2(由于AJMP指令是2字節(jié)指令)JMP@A+DPTR;以A中內容為偏移量JUMP_TABLE:AJMPCASE0;(A)=0轉CASE_0執(zhí)行AJMPCASE1;(A)=1轉CASE_1執(zhí)行AJMPCASE2;(A)=2轉CASE_2執(zhí)行AJMPCASE3;(A)=3轉CASE_3執(zhí)行AJMPCASE4;(A)=4轉CASE_4執(zhí)行,(5)轉移指令總結,在實際應用中,由于AJMP和SJMP指令的跳轉范圍有限,而LJMP(長轉移指令)不受跳轉范圍的限制,因此一般情況下可以使用LJMP指令代替AJMP和SJMP指令。,,2條件轉移指令該類指令執(zhí)行滿足某種特定條件的轉移,其目標地址在以下一條指令的起始地址為中心的256字節(jié)范圍中(-128到+127)。(1)累加器判零轉移指令JZrel;累加器為0轉移JNZrel;累加器不為0轉移JZ表示累加器的內容為0,則轉向指定的地址,否則順序執(zhí)行下條指令;JNZ指令剛好相反,累加器不等于0,則轉向指定地址,否則順序執(zhí)行下條指令。兩條指令均為雙字節(jié),其中第二條字節(jié)為符號的相對偏移量,PC現行值(PC加2后)與偏移量相加即得轉移地址。該指令不改變累加器內容,不影響標志位。例執(zhí)行程序:MOVA,#01H;01送累加器AJZBRAN1;A非零不轉,繼續(xù)執(zhí)行DECA;A減1內容為0JZBRAN2;A為0轉BRAN2執(zhí)行或執(zhí)行:CLRA;A清0JNZBRAN1;A為0繼續(xù)執(zhí)行INCA;A內容加1JNZBRAN2;A內容非零轉BRAN2執(zhí)行程序都轉移到BRAN2去執(zhí)行。,(2)比較轉移指令CJNE(目的字節(jié)),(源字節(jié)),relCJNE類指令比較前面兩個操作數的大小,如果它們的值不相等則轉移,相等則繼續(xù)執(zhí)行。這些指令均為三字節(jié)指令,PC當前值((PC)+3→(PC))與指令第三字節(jié)帶符號的偏移量相加即得到轉移地址,如果目的字節(jié)的無符號整數值小于源字節(jié)的無符號整數值,則置位進位標志,否則清0進位位,指令不影響任何一個操作數。指令的源和目的操作數有4種尋址方式組合:累加器可以和任何直接尋址字節(jié)或立即數比較,而任何間接尋址RAM單元或工作寄存器能與立即數比較。,具體的比較轉移指令有4條:CJNEA,#data,relCJNEA,direct,relCJNE@Ri,#data,relCJNERn,#data,rel例1設(R7)=56H,執(zhí)行下列指令CJNER7,#60H,K1;由于(R7)<60H,轉K1,且(CY)←1…K1:JCK3;因為(CY)=1,判出(R7)<60H,轉K3執(zhí)行…K3:…例2設P1口P1.0~P1.3為準備就緒信號輸入端,當該4位輸入全“1”說明各項工作已準備好,單片機可順序執(zhí)行主程序,否則循環(huán)等待。程序片斷如下:L0:MOVA,P1;P1口內容送AANLA,#0FH;屏蔽高4位CJNEA,#0FH,L0;該4位不全1,返回L0,否則繼續(xù)執(zhí)行MAIN1:…,(3)循環(huán)轉移指令DJNZ(字節(jié)),rel這是一條減1與0比較指令,程序每執(zhí)行一次該指令,就把第一操作數字節(jié)變量減1,結果送回到第一操作數中,并判字節(jié)變量是否為0,不為0轉移,否則順序執(zhí)行。如果字節(jié)變量值原為00H,則下溢得0FFH,不影響任何標志。共有兩條指令:DJNZdirect,relDJNZRn,rel由于被減1的第一操作數可為一個工作寄存器或直接尋址字節(jié),所以使用該指令可以很容易地構成循環(huán),只要給直接地址或工作寄存器賦不同初值,就可方便地控制循環(huán)次數,而使用不同的工作單元或寄存器就可派生出很多條循環(huán)轉移指令。,例1軟件延時利用DJNZ指令可在一段程序中插入某些指令來實現軟件延時。DJNZ指令執(zhí)行時間為2個機器周期,這樣循環(huán)一次可產生2個機器周期延時。下例在程序段中插入2條指令,當主頻12MHz,循環(huán)次數為24時,可產生49us的軟件延時循環(huán),在P1.7引腳上輸出一個50us的脈沖。CLRP1.7;P1.7輸出變低電平MOVR2,#18H;賦循環(huán)初值HARE:DJNZR2,HARE;(R2)←(R2)-1,不為零繼續(xù)循環(huán)SETBP1.7;P1.7輸出高電平例2內部RAM單元40H、50H、60H內容分別為01H、20H、15H,則執(zhí)行下列指令序列:DJNZ40H,LABEL1;(40H)-1=0結束循環(huán)向下執(zhí)行DJNZ50H,LABEL2;(50H)-1≠0轉LABEL2執(zhí)行循環(huán)DJNZ60H,LABEL3;待上條指令循環(huán)完才執(zhí)行本指令程序將轉LABEL2出繼續(xù)循環(huán),各RAM單元內容變?yōu)椋?0H)=00H、(50H)=1FH、(60H)=15H。第一條指令執(zhí)行結果為0,故沒有發(fā)生轉移。,例3多項單字節(jié)數求和設數組長度放R0,數組存放首地址在R1中,數組之和則存在20H單元中,因為是8位字長,所以此和不應大于256??删幊倘缦拢篊LRA;A清0SUMD:ADDA,@R1;相加INCR1;地址指針增1DJNZR0,SUMD;字節(jié)數減1不為0繼續(xù)加MOV20H,A;結果存20H單元,4.8.2子程序調用和返回指令,有兩條調用指令LCALL(長調用)及ACALL(絕對調用)和一條與之配對的子程序返回指令RET。LCALL和ACALL指令類似于轉移指令LJMP和AJMP,不同之處在于它們在轉移前,要把執(zhí)行完該指令后PC的內容自動壓入堆棧,才做addr16(或addr11)→PC的工作(其中addr16或addr11是子程序的首地址或稱子程序入口地址)。這樣設計是為了便于當子程序執(zhí)行完后,CPU可以找到(返回)原出發(fā)點處。RET指令是子程序返回指令,執(zhí)行時,從堆棧中把原出發(fā)地址彈回PC,讓CPU返回執(zhí)行原主程序。,1.長調用指令LCALLaddr16長調用與LJMP一樣提供16位地址,可調用64K范圍內所指定的子程序,由于為三字節(jié)指令,所以執(zhí)行時首先(PC)+3→(PC)以獲得下一條指令地址,并把此時PC內容壓入(作為返回地址,先壓入低字節(jié)后壓入高字節(jié))堆棧,堆棧指針SP加2指向棧頂,然后把目標地址addr16裝入PC,轉去執(zhí)行子程序。顯然使用該指令可使子程序在64K范圍內任意存放。指令執(zhí)行不影響標志位。例設(SP)=53H,子程序首址在3000單元,并以標號STR表示。在(PC)=2000H處執(zhí)行指令:LCALLSTR將使(SP)=55H,(54H)=03H((PC)+3→PC之值),(55H)=20H,((PC)+3→(PC)高字節(jié)值),PC將變?yōu)?000H。,2.絕對調用指令ACALLaddr11該指令提供11位目標地址,限在2K地址內調用,由于是雙字節(jié)指令,所有執(zhí)行時(PC)+2→(PC)以獲得下一條指令的地址然后把該地址壓入堆棧作為返回地址,其它操作與AJMP相同。,由于ACALL指令的調用范圍受2K的限制,因此,一般程序中使用LCALL指令代替ACALL指令。,3.返回指令RET;RET表示子程序結束需要返回主程序,所以執(zhí)行該指令時,分別從棧中彈出調用子程序時壓入的返回地址,使程序從調用指令(LCALL或ACALL)的下面相鄰指令開始繼續(xù)執(zhí)行程序。例設(SP)=55H,RAM中(54H)=03H,(55H)=20H,則執(zhí)行RET后,使:(SP)=53H(PC)=2003H程序由2003H開始繼續(xù)執(zhí)行。4.中斷返回指令RETI;該指令用于中斷服務子程序的返回,其執(zhí)行過程類似于RET,詳見中斷一章介紹。,5.空操作指令NOPNOP操作:(PC)←(PC)+1執(zhí)行本指令除了PC加1外,機器不作任何操作,而轉向下一條指令去執(zhí)行。不影響任何寄存器和標志。由于為單周期指令,所以時間上只有一個機器周期,常用于精確延時或等待。例利用NOP指令產生方波。LOOP:CLRP2.7;P2.7清0輸出NOP;NOP;空操作NOP;NOP;SETBP2.7;置位P2.7高電平NOP;NOP;空操作NOP;NOP;LJMPLOOP,4.9思考題見教材習題,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 單片機 原理 應用 陳桂友 指令系統(tǒng)
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.820124.com/p-11648767.html