版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微處理器結構與嵌入式系統(tǒng)設計第三講 單片機指令系統(tǒng)認識匯編語言匯編語言(assembly language)是一種低級的計算機編程語言,它直接與計算機的機器碼打交道。用匯編語言設計的程序稱為匯編程序。匯編程序在Vision中匯編之后可生成以.HEX為后綴的執(zhí)行代碼文件執(zhí)行代碼是一系列的十六進制數(shù),與指令一一對應。除了匯編語言外,C51語言也可以用來設計單片機程序。C51語言是高級語言,它與C語言極為相似,大多數(shù)單片機程序開發(fā)環(huán)境(如Vision)都支持C51語言。但無論是匯編語言或是C51語言,經過匯編后結果都是一樣的生成以.HEX為后綴的執(zhí)行代碼文件。從匯編程序到執(zhí)行代碼匯編指令(instr
2、uction set):一條指令“指揮”單片機完成一個操作。比如指令“MOV P1,A”實現(xiàn)將累加器A中的數(shù)據(jù)從P1輸出。51單片機的指令分為了算術運算指令、邏輯運算指令、數(shù)據(jù)傳送指令、布爾指令、調用指令、跳轉指令、循環(huán)指令等。匯編程序(assembly program):經過設計者思考和組織,將許多指令組合在一起形成實現(xiàn)特定功能的集合,就是匯編程序。源文件(source code file):匯編程序在開發(fā)環(huán)境中設計、書寫,保存時以.asm為后綴就成了源文件。執(zhí)行代碼文件(opcode or operation code):匯編過程中,匯編器將源文件中每一條指令匯編成執(zhí)行代碼。某條指令的執(zhí)行
3、代碼的長度在1個到3個字節(jié)之間。執(zhí)行代碼會以.HEX為后綴以文件的形式保存在硬盤中,再使用下載線就可以把這些執(zhí)行代碼下載到單片機的程序存儲器。中。偽指令偽指令(pseudo opcode)并不算可執(zhí)行程序的一部分,所以不會被匯編器匯編,也不生成執(zhí)行代碼,但卻告知匯編器一些信息。如常用的偽指令ORG告訴匯編器程序的起始地址、偽指令END表明匯編程序的結束。指令的執(zhí)行指令“MOV A, 32H”,將數(shù)據(jù)存儲器地址32H中的內容載入累加器A。這條指令經過匯編后在程序存儲器中形成的執(zhí)行代碼為“E5”、“32”?!癊5”是這條MOV指令的執(zhí)行代碼,“32”是源操作數(shù)32H。首先,當程序計數(shù)器PC指向執(zhí)行
4、代碼E5時,CPU就“意識到”要執(zhí)行的操作是把下一個執(zhí)行代碼所指向的數(shù)據(jù)存儲器地址中的數(shù)據(jù)載入累加器A。PC加1,CPU根據(jù)PC所指抓取下一個執(zhí)行代碼“32”。于是CPU機到數(shù)據(jù)存儲器地址32H中取得數(shù)據(jù)()。并把所得數(shù)據(jù)載入累加器A,最后A=88H。尋址方式 直接尋址直接尋址(direct addressing):直接地址的內容載入一個寄存器中或寄存器的內容載入直接地址中。AT89S51單片機片內數(shù)據(jù)存儲器的00H7FH(但常用30H7FH)以及特殊功能寄存器SFR都能被直接尋址。注意地址前是沒有“#”號的。如以下幾條指令屬于直接尋址指令: MOVA, 30H;把直接地址30H上的內容載入累
5、加器AMOV50H, B;把B寄存器的值載入直接地址50H上 ADDA, 60H;累加器A和直接地址60H的內容相加,結果存回A 間接尋址間接尋址:用R0、R1、SP、DPTR中的某一寄存器來代替直接尋址中的直接地址來尋址。其中“”符號表示間接尋址,注意在書寫時不要遺漏。 MOVR1, #32H; R1=32HMOVA, R1; R1所指向的地址的內容載入ACC中 寄存器尋址寄存器尋址:是指與工作寄存器R0R7有關的尋址指令。例如: MOVA, R0 ;將R0的值載入累加器A ADDA, R5 ;將A與R5的值相加,并把結果存回AMOVR7, A ;將A的值載入R7中 立即數(shù)尋址立即尋址:與立
6、即數(shù)相關的尋址方式。立即數(shù)的特征就是在數(shù)據(jù)前加一個“#”號。這類尋址方式比較簡單,如以下幾條指令都屬于立即尋址指令: MOV A, #100;將立即數(shù)100(64H)載入累加器A MOV 33H, #10H;將立即數(shù)10H載入數(shù)據(jù)存儲器地址33H上 MOV R0, #0FFH;R0=FFH 變址尋址變址尋址:針對的僅是程序存儲器,而且這種尋址方式只能從程序存儲器中讀數(shù)據(jù)。通常我們對程序存儲器訪問得較多的是數(shù)據(jù)表中的數(shù)據(jù)(比如取表法)。在變址尋址中,使用程序計數(shù)器PC或數(shù)據(jù)指針DPTR作為間接地址,有時還加上累加器A,根據(jù)這些間接地址在程序存儲器找到相應的內容。 MOVCA, A+DPTR;累加
7、器A和數(shù)據(jù)指針DPTR 之和作為間接地址,將該地址上的數(shù)據(jù)載A 寄存器特征尋址寄存器特征尋址:與特定寄存器有關的尋址方式。有些指令總是與累加器A或數(shù)據(jù)指針寄存器DPTR等有關,而沒有涉及其他地址。這類指令只影響特定寄存器,不會改變其他地址或寄存器。如以下幾條指令屬于寄存器特征尋址指令: INC A;累加器A自增1 SWAP A;A的高4位與低4位互換 INCDPTR;數(shù)據(jù)指針DPTR自增1指令分類 指令概述51單片機的指令共有111條(見附錄B),配合與不同的操作數(shù)共有255個指令的寫法,即255種指令的執(zhí)行代碼(見附錄C)。實際應用中,常用的指令一般不過50個。根據(jù)功能的不同,51單片機的指
8、令分成了以下幾大類:算術指令邏輯指令片內數(shù)據(jù)裝載指令片外數(shù)據(jù)裝載指令查表指令布爾指令調用子程序指令跳轉與循環(huán)指令 指令長度一條指令所占用的地址空間在14個字節(jié)之內,附錄B、C中有每一條指令的長度描述。如指令“CLR A”的執(zhí)行代碼為E41字節(jié)指令;指令“MOV A, #88H”的執(zhí)行代碼為74、882字節(jié)指令;指令“CJNE A, #00H, START”的執(zhí)行代碼為B4、00、FA3字節(jié)指令。算術運算指令 加法指令 在單片機做加法運算時,都要涉及累加器A。加法指令“ADD A, ”中的“A”代表累加器A,“”代表“源操作數(shù)-以字節(jié)形式”。也就是說“A”和“”是兩個加數(shù)。根據(jù)源操作數(shù)的不同,加
9、法指令有4種指令形式,其中Rn代表R0R7任一個工作寄存器,direct代表一個直接地址,Ri代表間接地址(Ri只代表R0或R1),#data代表立即數(shù)。說明: 相加的操作總是在累加器A中發(fā)生,源操作數(shù)可以是一個工作寄存器的值、直接地址的內容、間接地址的內容或立即數(shù)。注意,兩個直接地址的內容相加是不允許的,如“ ”是錯誤的。 加法指令有可能影響程序狀態(tài)字PSW中的標志位CY、OV、AC、P。如果相加過程中,位3(低位)有進位則輔助進位標志位AC=1;位7(高位)有進位則進位標志位CY=1。 溢出標志位OV的變化規(guī)律是:如果位6有進位而位7沒有進位,或者位7有進位而位6沒有,則溢出標志OV=1,
10、否則OV=0。注意,OV的狀態(tài)只有在帶符號數(shù)加法運算時才有意義。【例8-1】執(zhí)行以下兩行指令,觀察標志位的變化。執(zhí)行以下兩行指令,觀察標志位的變化。MOV A, #0F5H ; A=0F5HADD A, #0BH ; A=0F5+0BH=00H,CY=1,AC=1運算過程:運算過程:運算結果:運算結果:A=00,標志位情況如下:CY=1由于位7有進位。AC=1由于位3向位4進位。P=0由于運算結果A=0000 0000,其中1的個數(shù)是0(偶數(shù)),所以P=0。 帶進位的加法指令帶進位的加法指令相當于在加法運算之后再加上進位CY,如果CY=0,結果不變;如果CY=1,結果加1。其帶進位的加法指令形
11、式與加法指令相似?!纠?-2】寫一段程序作寫一段程序作3CE7H和和3B8DH的加法運算,將運算結果的低位字節(jié)存到的加法運算,將運算結果的低位字節(jié)存到R0中,高位字節(jié)存到中,高位字節(jié)存到R1中。中。程序:程序:運算結果:運算結果:R1=78H,R0=74H。 帶借位的減法指令在單片機做減法運算時,也要涉及累加器A。當單片機進行減法運算時,程序狀態(tài)字PSW中的CY位就變成了借位標志位,即如果減法運算過程中有借位發(fā)生,CY被硬件置1。由于SUBB指令是帶借位的減法指令,于是在運算中就需要考慮CY對運算的影響。說明: 當位7有借位時,標志CY=1;否則CY=0。也就是說,如果無符號數(shù)做減法時,減數(shù)比
12、被減數(shù)大,CY=1。 當位3有借位時,標志AC=1;否則AC=0。 溢出標志位OV=1表示溢出;OV=0表示未溢出。OV的值可由差的位7的借位與位6的借位做XOR(異或)的邏輯判斷得到。 由于SUBB指令連CY一起減,若不想減CY,可先將CY清0。 自增/自減指令自增/自減指令是一類很簡單的指令,它的作用是對寄存器的值或直接地址的內容進行加1/減1的操作。說明: 如果寄存器的值或直接地址的內容為FFH時,執(zhí)行自增指令INC后,寄存器的值或直接地址的內容變?yōu)?0H,進位標志CY不受影響。 如果寄存器的值或直接地址的內容為00H時,執(zhí)行自減指令DEC后,寄存器的值或直接地址的內容變?yōu)镕FH,進位標
13、志CY不受影響。 關于指令“INC DPTR”,若DPTR的低位字節(jié)DPL=FFH,執(zhí)行“INC DPTR”后DPL=00H,同時高位字節(jié)DPH的值增加1,CY不受影響;如果DPTR=FFFFH,執(zhí)行“INC DPTR”后,DPTR=0000H,CY也不受影響。 可對DPL和DPH分別進行自增INC或自減DEC的操作。 乘法指令乘法運算只針對累加器A和B寄存器中的無符號整數(shù),運算得到的乘積長度為2個字節(jié),其低位保存在累加器A中,高位保存在B寄存器中。乘法指令會對標志位有所影響。說明: 如果乘法運算結果大于00FFH,OV=1,否則OV=0。 執(zhí)行乘法運算時,進位標志CY會被清除為0。【例8-3
14、】執(zhí)行下面的乘法指令,觀察標志位的變化。執(zhí)行下面的乘法指令,觀察標志位的變化。 MOVA, #66H ; A=66H MOV B, #77H ; B=77H MULAB ; 積=66H77H=2F6AH運算結果:運算結果:A=6AH,B=2FH,CY=0,由于2F6AH00FFH,所以OV=1。除法指令將累加器A中的無符號數(shù)除以B寄存器中的無符號數(shù),商保存回累加器A,余數(shù)保存回B寄存器。除法指令影響標志位。說明: 除法指令做無符號的除法運算。如果B寄存器=0,執(zhí)行時OV被置1,表示運算是錯誤的,因為除數(shù)不應該為0。 除法指令正確執(zhí)行后,商存回A,余數(shù)存回B寄存器,進位標志CY及溢出標志OV都等
15、于0。十進制調整指令邏輯運算指令 與操作(ANL) 或操作(ORL) 異或操作(XRL) 累加器A清0操作-CLR A 累加器A取反操作-CPL A移位操作 累加器A位移動操作RL、RLC、RR、RRC說明:這4條指令用于累加器A內部位的移動,注意,這4條指令只適用于累加器A。 RL A累加器A左移一位。每次移出累加器A的位7進入位0。 RLC A累加器A含進位CY左移一位。每次移出累加器A的位7進入進位CY中,而進位CY則進入位0中。 RR A累加器A右移一位。每次移出累加器A的位0進入位7。 RRC A累加器A含進位CY右移一位。每次移出累加器A的位0進入進位CY中,而進位CY則進入位7中
16、。數(shù)據(jù)傳送指令 片內數(shù)據(jù)傳送指令MOV , 數(shù)據(jù)裝載指令以MOV為助記符,指令形式為“MOV , ”,其中為目的操作數(shù),為源操作數(shù)。和代表片內數(shù)據(jù)存儲器地址或特殊功能寄存器,指令在進行不同地址空間或寄存器之間裝載時不需要通過累加器A的參與。說明:根據(jù)目的操作數(shù)不同,數(shù)據(jù)裝載指令分成以累加器A、工作寄存器Rn、直接地址direct、間接地址Ri為目的操作數(shù)的4種不同形式。注意,立即數(shù)前需要有“#”號。在數(shù)據(jù)裝載過程中,有幾點需要注意: 立即數(shù)前必需要有“#”號,否則裝載的將是地址空間上的數(shù)據(jù)(直接地址的內容),如果立即數(shù)以A、B、C、D、E或F開頭,需要在前面加上0,例如F3H,在指令中應寫成0
17、F3H。立即數(shù)也可以是二進制或十進制的形式,例如,如下3條指令裝載的效果是相同的。MOV A, #0F3H ; 十六進制MOV A, #11110011B ; 二進制MOV A, #243 ; 十進制 如果立即數(shù)小于10H,即0F,則高位會被系統(tǒng)自動補上0。例如,指令“MOV A, #5”,結果累加器A=05H,系統(tǒng)將向高位自動補0。 累加器A或工作寄存器等一些寄存器加載大于FFH的立即數(shù)將會引發(fā)錯誤,因為這些寄存器的長度只有1個字節(jié)。該指令用于向數(shù)據(jù)指針DPTR裝載2個字節(jié)長度的立即數(shù),通常這個立即數(shù)會是某個地址。所以數(shù)據(jù)指針DPTR能夠指向地址空間的范圍為0000HFFFFH,即尋址的最大
18、范圍為64K Bytes。數(shù)據(jù)指針DPTR實際上由兩個寄存器組成,它們是DPLDPTR的低位字節(jié),以及DPHDPTR的高位字節(jié)。如指令“MOV DPTR, #33FFH”。堆棧指令PUSH、POP說明:堆棧是單片機在片內數(shù)據(jù)存儲器中開辟的用于保存臨時數(shù)據(jù)的區(qū)域。堆棧的地址堆棧指針SP來指向,SP是一個特殊功能寄存器。單片機上電復位時SP=07H,當執(zhí)行壓棧指令“PUSH direct”,在壓棧之前先發(fā)生堆棧指針SP自增1,于是SP=08H,然后direct上的數(shù)據(jù)就壓入08H中,此時(08H)=direct,數(shù)據(jù)就被保存到了08H上。彈棧時正好相反,當執(zhí)行彈棧指令“POP direct”,將根
19、據(jù)堆棧指針SP所指向的地址把數(shù)據(jù)從堆棧中取回,存回到direct上,接著SP自減1。堆棧操作的總結: 堆棧指針SP總是指向最后一次使用的堆棧的地址。當我們將數(shù)據(jù)壓入堆棧之前,SP自增1。在對工作寄存器進行壓棧和彈棧操作時,只需要在助記符后注明一個寄存器的數(shù)字即可。例如要將R4壓棧和R2彈棧,指令分別為“PUSH 4”和 “POP 2”。 彈棧指令“POP”執(zhí)行時,堆棧中保存的數(shù)據(jù)彈出到指定的寄存器或地址上,這個過程與壓棧正好相反。彈棧操作之后,堆棧指針SP自減1。 如果有多個數(shù)據(jù)被壓棧指令“PUSH”壓入堆棧中,由于堆棧指針SP依次增大,先被壓入的數(shù)據(jù)保存在較低地址上,后被壓入的則保存在較高地
20、址上。彈棧時會根據(jù)SP從最后一個壓入堆棧的數(shù)據(jù)開始彈出到彈棧指令“POP”所指定的寄存器或地址上。這就是堆棧的“先入后出”特點。 AT89S51單片機默認將片內數(shù)據(jù)存儲器的08H1FH地址(共24個字節(jié))開辟作堆棧使用,而20H2FH保留作位尋址區(qū)(圖7-20)而不能進行堆棧操作。如果程序中需要堆棧暫存的數(shù)據(jù)多于24個字節(jié),可以程序8-3中一樣,用指令“MOV SP, #40H”向堆棧指針SP載入一個介于30H7FH的立即數(shù),以便在開放區(qū)開辟一個更大的堆??臻g。但新開辟的堆??臻g一般不宜再進行其他訪問,以免破壞堆棧中的數(shù)據(jù)。對于AT89S51單片機來說,可視情況通過指令“MOV SP, #50
21、H”來開辟50H7FH為堆棧區(qū),而30H4FH仍可用于開放區(qū)直接尋址使用。 單片機上電復位時堆棧指針SP=07H,當?shù)谝淮螆?zhí)行PUSH指令時SP+1=08H,即與第1組別的工作寄存器R0的地址重合(圖7-19),此時堆棧占用的是非0組別的工作寄存器,所以不宜再切換工作寄存器組別。否則可根據(jù)的方法,重新開辟堆??臻g。數(shù)據(jù)交換指令XCH、XCHD在累加器A與工作寄存器之間、累加器A與直接地址之間、累加器A與間接地址之間可以進行直接數(shù)據(jù)交換。說明:指令XCH將交換累加器A與工作寄存器、直接地址、間接地址的內容。例如,A=65H,R2=99H,執(zhí)行“XCH A, R2”之后,A=99H,R2=65H。
22、而指令XCHD交換的只是累加器A與間接地址的低4位內容,高4位內容不變。例如,地址空間(40H)=2FH,A=3DH,R1=40H,執(zhí)行“XCHD A, R1”之后,A=3FH,(40H)=2DH。片外數(shù)據(jù)裝載指令MOVX ,單片機自身的程序存儲器或數(shù)據(jù)存儲器在實際應用中有可能不夠用,于是可以在單片機之外添加適當?shù)拇鎯ζ餍酒詳U展程序或數(shù)據(jù)的存儲空間。一旦擴展片外存儲器,就會涉及到尋址片外存儲器的情況,而應付這類情況有專門的指令。說明:片外數(shù)據(jù)裝載指令主要用于訪問擴展的片外存儲器,片外存儲器可以是RAM、ROM、Flash等類型。而且從表8-19知道所有的指令都是間接尋址的(因為有符號“”),
23、前兩個指令將Ri(R0或R1)或DPTR所指向的片外存儲器地址的內容載入單片機的累加器A中,后兩條指令相反,把累加器A的數(shù)據(jù)寫到Ri(R0或R1)或DPTR所指向的片外存儲器的地址上。當使用Ri間接尋址時,因為Ri只有1個字節(jié),所以尋址范圍為00HFFH。如果使用的是DPTR尋址則可尋址更大的范圍0000HFFFFH。至于程序中選擇使用Ri還是DPTR要根據(jù)片外存儲器的容量來確定。使用DPTR尋址空間范圍大,但參與尋址的地址線可多達16位,這樣除P0口全部用作地址線外,P2口也會被部分或全部占用。如果對本節(jié)理解有困難,可以在后面擴展存儲器的章節(jié)中再次理解。 查表指令MOVC , 查表操作實際上
24、是把程序存儲器里的數(shù)據(jù)通過累加器A后供程序中使用,由于查表操作訪問的是程序存儲器,所以查表指令只提供了讀的操作。在執(zhí)行指令“MOVC A, A+DPTR”前,數(shù)據(jù)指針DPTR一般都會先載入數(shù)據(jù)表,使用的指令一般為“MOV DPTR,#TABLE”,其中“TABLE”為數(shù)據(jù)表的標號。這樣DPTR就指向數(shù)據(jù)表的表頭地址,查表指令就可以把數(shù)據(jù)表中的數(shù)據(jù)載入A中。布爾指令 清0、置1、取反操作CLR、SETB、CPL 布爾跳轉指令JC、JNC、JB、JNB、JBC 長調用指令LCALL說明:長調用指令LCALL的執(zhí)行代碼占用3個字節(jié),第1個字節(jié)為LCALL助記符12H,后兩個字節(jié)是所要調用子程序的目標
25、地址,因為有兩個字節(jié)來指定子程序的目標地址,所以調用的范圍可達64K Bytes,即地址0000HFFFFH。為了確保子程序執(zhí)行完畢之后單片機能正確回到主程序繼續(xù)執(zhí)行,LCALL執(zhí)行時會把它下一條指令的地址保存在堆棧中。當遇到子程序返回指令RET后單片機將堆棧中保存的地址彈出,并據(jù)此繼續(xù)主程序的執(zhí)行。 絕對調用指令ACALL絕對調用指令ACALL的長度為2個字節(jié),2個字節(jié)中有11位用來指向子程序的地址,所以說子程序的目標地址不能超過2K Bytes的范圍。ACALL與LCALL的執(zhí)行機制相同,唯一的不同就是調用目標地址范圍不同。如果判斷子程序目標地址在2K Bytes范圍內,應當盡量使用ACA
26、LL指令以減少程序存儲空間的浪費。如果單片機支持CALL指令(如AT89S51就支持),完全可以使用CALL來籠統(tǒng)地調用子程序,因為它會自動判斷調用的范圍從而選擇是使用1個字節(jié)還是2個字節(jié)來指向子程序的目標地址。 返回指令RET、RETI當子程序或中斷服務子程序執(zhí)行完后,需要返回指令告訴單片機返回主程序。返回指令是必需的,否則單片機不知道子程序是否執(zhí)行完。返回指令RET用于子程序的末尾,提示子程序結束,以返回主程序。前面所有調用子程序的程序中都使用RET返回。返回指令RETI用于結束中斷服務子程序,在介紹中斷的章節(jié)中會發(fā)現(xiàn),在中斷服務子程序末尾都會有RETI指令。跳轉與循環(huán)指令無條件跳轉指令L
27、JMP、AJMP、SJMP、JMP當執(zhí)行到無條件跳轉指令時,單片機會立即跳到特定地址上執(zhí)行,并不需要判斷什么情況。說明:以上4個跳轉指令都是無條件跳轉指令。其中LJMP是長跳轉指令,指令長度為3個字節(jié),第1個字節(jié)為LJMP助記符的執(zhí)行代碼02H,后兩個字節(jié)是所要跳轉的目標地址。因為有兩個字節(jié)來指定目標地址,所以LJMP跳轉地址范圍達64K Bytes,即0000FFFFH。AJMP是絕對跳轉指令,指令長度為2個字節(jié),助記符01H占一個字節(jié),因只有一個字節(jié)來指向跳轉的目標地址,所以目標地址不超過2K Bytes。AJMP與LJMP的執(zhí)行機制相同,唯一的不同就是跳轉的目標地址范圍不同。如果判斷目標
28、地址小于2K Bytes,應當盡量使用AJMP指令以節(jié)省1個字節(jié)的存儲空間。SJMP是一個相對跳轉指令,跳轉范圍為向前128個字節(jié),向后127個字節(jié)。向前就是跳轉到比當前程序計數(shù)器PC所指的地址要小的地址上去執(zhí)行,向后則相反,跳轉到比當前PC所指的地址要大的地址上去執(zhí)行,例子如例8-19所示。JMP則是一個籠統(tǒng)的跳轉指令,它會自動判斷跳轉的范圍從而選擇是使用1個字節(jié)還是2個字節(jié)來指向跳轉的目標地址,在程序中如果不清楚跳轉的范圍可以簡單地使用JMP指令。 條件跳轉指令JZ、JNZ條件跳轉指令需要滿足一定的條件才會發(fā)生跳轉,這個條件就是累加器A的狀態(tài)。說明:條件跳轉指令有兩條對立的指令,一是JZ指
29、令,當累加器A=0時跳轉。二是JNZ指令,當A0時才跳轉。 比較跳轉指令CJNE , , rel比較跳轉指令可將累加器A、Rn、間接地址的內容與一個具體的立即數(shù)比較,如果不相等就發(fā)生跳轉。CJNE將源操作數(shù)與目的操作數(shù)進行比較,如果不相等就跳轉到rel所指的地址。比較跳轉指令CJNE集成了兩種操作比較和跳轉。此外,它還會改變進位標志C的值以顯示目的操作數(shù)較大還是較小,如表8-31所示。CJNE指令不會改變源操作數(shù)或目的操作數(shù)的值。 循環(huán)指令DJNZ ,循環(huán)可以實現(xiàn)延時、判斷等功能,可以讓一段程序重復執(zhí)行若干次,提高程序執(zhí)行效率。說明:通過循環(huán)指令DJNZ來構造循環(huán)體是一種最廣泛程序設計的方法。
30、循環(huán)指令DJNZ執(zhí)行時,工作寄存器或直接地址內容減1,如果不等于0,則程序跳轉到rel指示地址。在執(zhí)行DJNZ指令前,需要向相關工作寄存器或地址中載入計數(shù)值,該計數(shù)值就是循環(huán)的次數(shù)。 無操作指令NOP說明:無操作指令NOP沒有操作數(shù),不產生任何影響,只是在耗費時間,同時會更新程序計數(shù)器PC的計數(shù)值。每執(zhí)行一次NOP指令花去1個機器周期,執(zhí)行完NOP后,就接著執(zhí)行下一條指令。NOP指令常常用在等待一個很短的時間(若干個機器周期時間,幾s),比如在等待外設的操作等。七段數(shù)碼管的顯示 七段數(shù)碼管數(shù)字顯示最常使用的器件就是七段數(shù)碼管,它的7個亮段組成了一個“8”,點亮不同亮段的組合就形成了數(shù)字09。在數(shù)字鐘、微波爐、電飯煲、洗衣機等電子產品中常常使用七段數(shù)碼管來顯示數(shù)字信息。 二進制與數(shù)字“MOV P2, #15H”指令從P2口輸出立即數(shù)15H,即輸出 0001 0101B。將會看到輸出為0的I/O口上發(fā)光二極管被點亮?!癕OV P2, #15H”指令中立即數(shù)15H本身就是一個十六進制的數(shù)字,如果使用七段數(shù)碼管與P2口接口,就能直接把數(shù)字“15”給顯示出來。 二進制與語音語音信號可以用波形來表示,比如把信號的一小段波放到一個縱坐標為幅度值、橫坐標為時間的坐標系中,縱坐標上由二進制表示幅度,這樣可以把每個時刻的幅度都由二進制數(shù)來表示。比如圖中t0時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《游泳服務與管理》課件
- 《電力企業(yè)流程管理》課件
- 《電磁輻射及預防》課件
- 2024年高考生物一輪復習必修二第五單元遺傳的基本規(guī)律試題
- 單位管理制度集合大合集【人力資源管理】十篇
- 單位管理制度集粹匯編職員管理篇十篇
- 單位管理制度分享匯編【員工管理】十篇
- 單位管理制度分享大全【人員管理】十篇
- 單位管理制度呈現(xiàn)合集【員工管理】十篇
- 《團隊建設與發(fā)展》課件
- 五年級數(shù)學上冊錯題專練-第一單元人教版(含答案)
- 組織內外部環(huán)境要素識別表
- 韌性理論與韌性城市建設
- 高中數(shù)學作業(yè)分層設計的有效性分析 論文
- 基于二十四節(jié)氣開展幼兒園美育活動的實踐策略 論文
- 四年級語文閱讀理解《嫦娥奔月(節(jié)選)》練習(含答案)
- 鼻咽炎-疾病研究白皮書
- 普速鐵路工務安全規(guī)則
- 石阡縣人民醫(yī)院內科綜合大樓建設項目環(huán)評報告
- 業(yè)主搭建陽光房申請書
- 消費主義影響下中國當代陶藝的特點獲獎科研報告
評論
0/150
提交評論