版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、湖南理工學(xué)院機(jī)械學(xué)院湖南理工學(xué)院機(jī)械學(xué)院單片機(jī)原理 及應(yīng)用教程第三章第三章 MCS-51單片機(jī)指令系統(tǒng)及編程舉例單片機(jī)指令系統(tǒng)及編程舉例本章重點(diǎn):MCS-51單片機(jī)的尋址方式;MCS-51單片機(jī)的指令集;偽指令;匯編語言簡單程序設(shè)計(jì);指令是計(jì)算機(jī)功能的集中體現(xiàn),不同的計(jì)算機(jī)具有不同的指令系統(tǒng),但從格式上看都包含兩大部分:操作碼 操作數(shù)功能描述對象描述四類操作對象:特殊功能寄存器操作對象;片內(nèi)數(shù)據(jù)存儲器操作對象(工作寄存器、位);片外數(shù)據(jù)存儲器操作對象;程序存儲器操作對象;尋址方式:按指令中地址的表現(xiàn)形式獲取不同操作對象的方式。例如:ADD A,60H;助記指令 或:25H 60H;機(jī)器指令目的
2、操作數(shù)源操作數(shù)指令系統(tǒng)簡介操作數(shù)51單片機(jī)根據(jù)功能和尋址方式的不同其指令集包含111條指令。2、每條指令在存儲器中占用一定的空間,以字節(jié)為單位,按所占的字節(jié)數(shù)分為:單字節(jié)(49條)、雙字節(jié)(45條)、三字節(jié)(17條)。3、每條指令在執(zhí)行中要花一定時間,以機(jī)器周期為單位,按所占的機(jī)器周期數(shù)分為:單機(jī)器周期(64條)、雙機(jī)器周期(45條)、4個機(jī)器周期(2條)。1、按指令的功能分:數(shù)據(jù)傳送類指令:29條;算術(shù)運(yùn)算類:24條邏輯與移位類:24條;控制轉(zhuǎn)移類:17條位操作類:17條;尋址方式1、MCS51共有七種尋址方式:2、指令描述中的符號注釋Rn:當(dāng)前選用的工作寄存器(n=07),8個工作寄存器分
3、別用R0R7表示;Ri:當(dāng)前工作寄存器中的可作地址指針的寄存器(i=0,1)即R0,和R1;#data:表示 8 立即數(shù);#data16表示16位的立即數(shù);direct:8位片內(nèi)RAM的直接地址;addr11:11位的目的地址;addr16: 16位的目的地址;rel:相對地址(128127);:寄存器間接尋址符;/:位操作指令中的取反符. 還有幾個符號在后面介紹.立即尋址,直接尋址,寄存器尋址,寄存器間接尋址,變址尋址,相對尋址和位尋址。尋址的空間: 程序存貯器空間。該尋址方式所表示的操作對象緊跟在指令后面的存儲單元; 例如:指令 : MOV A , #45H 機(jī)器碼:74 45HPC100
4、0H1001H744545A2.操作對象表現(xiàn)形式:在數(shù)的前面加一個#“字號;3.應(yīng)用:一般用于初始化數(shù)據(jù)常數(shù)或地址常數(shù);立即尋址直接尋址1.尋址的空間:片內(nèi)數(shù)據(jù)存貯器空間:低128字節(jié)、SFR寄存器。該尋址方式所表示的操作對象在指令中占1個字節(jié)單元;2.表現(xiàn)形式:用直接的地址數(shù)據(jù)表示。注意:所有內(nèi)部數(shù)據(jù)及位地址空間都能直接尋址訪問,特殊功能寄存器只能直接尋址訪問。MOV TCON,A 例如: 指 令: MOV A ,45H 機(jī) 器 碼: E5 45E545PC1000H10012F2FA程序存貯器片內(nèi)RAM45H寄存器尋址:例如:指 令: MOV A , R3 機(jī)器碼: E BH (11101
5、011)5811101011PC58A程序存貯器片內(nèi)RAM13H (R3)特點(diǎn):該尋址方式所表示的操作對象與操作碼編在1個字節(jié)中。表現(xiàn)形式:用寄存器名表示.應(yīng)用:用寄存器來保存中間結(jié)果.尋址空間: A,B,DPTR,Rn(R0R7) , Cy.指令中寄存器的內(nèi)容為操作數(shù)。寄存器有:A,B,DPTR,Rn(R0R7),位操作中的進(jìn)借位標(biāo)志Cy。 指令中寄存器的內(nèi)容為地址,對該地址所指定的RAM單元的內(nèi)容進(jìn)行訪問??勺鏖g尋址的寄存器有:工作寄存器R0,R1和數(shù)據(jù)指針DPTR。例如:指 令: MOV A , R0 機(jī)器碼: E 6H (11100110)11100110PC5E7878程序存貯器片內(nèi)
6、RAMA00H(R0)5E特點(diǎn):該尋址方式所表示的操作對象與操作碼編在1個字節(jié)中。表現(xiàn)形式:用前綴符來限定R0,R1。應(yīng)用:一般用于對數(shù)組類型的數(shù)據(jù)進(jìn)行訪問。尋址空間:片內(nèi)RAM低128個單元。寄存器間接尋址變址尋址(基址寄存器+變址寄存器尋址)例如: MOVC A , A+DPTR 機(jī)器碼:9 3H (1001 0011)93H5CH472000+2030H2047HADPHDPL47程序存貯器SFR其中A=47HDPTR=2000H2047H=5CH結(jié)果:A=5CH特點(diǎn): 該指令為一個字節(jié);表示:加上前綴;應(yīng)用: 一般用于查表操作;尋址空間:程序存貯器空間;注意注意:A中的內(nèi)容為正數(shù)中的內(nèi)
7、容為正數(shù),可查以可查以PC或或DPTR為基址的為基址的256個字節(jié)個字節(jié)范圍的任一存貯單元。范圍的任一存貯單元。程序計(jì)數(shù)器程序計(jì)數(shù)器PC或數(shù)據(jù)指針或數(shù)據(jù)指針DPTR作為基址寄存器作為基址寄存器,累加累加器器A的內(nèi)容為變址寄存器的內(nèi)容為變址寄存器,操作數(shù)的有效地址為操作數(shù)的有效地址為: 有效地址有效地址=基址寄存器基址寄存器(PC,DPTR)+變址寄存器尋址變址寄存器尋址(A)5C相對尋址該尋址方式僅用于相對轉(zhuǎn)移類指令,與其它尋址方式不同的是尋找的是指令的地址。相對尋址的有效地址(目的地址) D=PC+指令的字節(jié)數(shù)b+rel。即 rel=D+(PCb)例如: 指 令:JC 18H 機(jī)器碼:40
8、18H 特點(diǎn):該當(dāng)指令執(zhí)行后PC的內(nèi)容發(fā)生了改變。表示:rel 是位8位有符號的數(shù)其取值范圍為:128+127。因此,既可以向后轉(zhuǎn)移也可以向前轉(zhuǎn)移。應(yīng)用:實(shí)際編程的源程序中,相對偏移量用標(biāo)號表示。+40181001H101AH1000H101AH18H0CyPC1000H1Cy1002H101A1002H位尋址1.位尋址的空間:RAM區(qū)可尋址的128個位地址(00H7FH),以及特殊功能寄存器中的一些位。2.訪問方式:這些位用立即尋址方式訪問,只有位累加器Cy采用寄存器尋址方式。例如: SETB 3AH SETB P1.0 SETB C 機(jī) 器碼: D2 3A 機(jī)器碼:D2 90 機(jī)器碼: D
9、 3 3.位地址在指令中的四種表示形式:(1)直接位地址表示:80H(2)位名表示:RS0,F(xiàn)0(3)單元地址加位序號表示:90H.0 (4)特殊功能寄存器名加位號表示:P1.0 , PSW.3,ACC.6MCS51 指令系統(tǒng)的七種尋址方式小結(jié)尋址方式使用變量 尋址空間立即尋址立即 數(shù) # data程序存貯器直接尋址直接地址 addr8片內(nèi)RAM、 SFR寄存器尋址R0R7,A,B,DPTR,Cy工作寄存器Rn,A,B,DPTR,Cy寄存器間接尋址R0,R1,SP片內(nèi)RAMR0,R1,DPTR片外數(shù)據(jù)存貯器變址尋址A+DPTR,A+PC程序存貯器相對尋址PC+rel程序存貯器位尋址bit,C片
10、內(nèi)20H2FH,SFR中的位指令系統(tǒng)MCS51單片機(jī),共有111條指令按指令的功能分為以下五類進(jìn)行介紹: (1)、數(shù)據(jù)傳送類指令;(2)、算術(shù)運(yùn)算類指令;(3)、邏輯運(yùn)算類指令;(4)、程序控制類指令;(5)、位(布爾)操作類指令 ;數(shù)據(jù)傳送類指令該類指令實(shí)現(xiàn)片內(nèi)RAM(包括工作寄存器,SFR,A,B)各單元之間的數(shù)據(jù)傳送;片外RAM與累加器A之間的數(shù)據(jù)傳送;程序存貯器與累加器A之間的數(shù)據(jù)傳送。一、通用數(shù)據(jù)傳送指令(16條): 一般格式:MOV 目的, 源1.以累加器為目的操作數(shù)的指令(4條)MOV A , direct ; A (direct)MOV A , Ri ; A (Ri)MOV A
11、 , #data ; A data MOV A , Rn ; A Rn直接尋址單元間接尋址單元工作寄存器立即數(shù)A例如:已知 (A)=40H,(R6)=50H,(6FH)=32H,(R0)=18H,(18H)=10H,執(zhí)行下列程序段:MOV A , R6 ; A 50HMOV A , 6FH ; A (6FH)MOV A , R0 ; A (R0)MOV A , #6FH ; A 6FH2.寄存器Rn為目的操作數(shù)的指令(3條)MOVRn ,A ; Rn AMOV Rn , direct ; Rn direct MOV Rn , #data ; Rn #data 例如:已知A=3FH,(4EH)=
12、2FH,R1=20H,R3=30H,執(zhí)行行下列程序段:MOV A , #2EH ;A 2EHMOV R1 , A ; R1 A MOV R2 , 4EH ;R2 (4EH)MOV R3 , #6FH ;R3 6FH執(zhí)行后,A=2EH, R1= 2EH, R2= 2FH, R3= 6FH3. 以直接地址為目的操作數(shù)的指令(5條)MOV direct , A ; direct AMOV direct , Rn ; direct RnMOV direct , direct ; direct (direct) MOV direct , Ri ; direct (Ri)MOV direct , #dat
13、a ; direct data注意:以下兩條指令是三字節(jié)指令,第二和第三字節(jié)為8位的地址或8位的立即數(shù)。MOV direct , direct ; direct (direct) MOV direct , #data ; direct data8例如: 已知: (30H)=1FH, (40H)=5FH,執(zhí)行下列指令;MOV 30H , 40H ; 30H (40H)MOV 50H , #40H ; 50H 40H執(zhí)行后,(30H)=5FH,(40H)=5FH,(50)=40H4.間接地址為目的操作數(shù)的指令(3條)MOV Ri , A ; (Ri) A MOV Ri ,direct ; (Ri)
14、 (direct)MOV Ri , #dara ; (Ri) data注意:該類指令使用時,應(yīng)先對Ri 賦地址初值.對于8051系列單片機(jī),片內(nèi)低128個單元才可間接尋址去訪問 .例如:設(shè)片內(nèi)RAM中,(30H)=40H, (40H)=20H,P1口為輸入口,其輸入的數(shù)據(jù)為CAH,執(zhí)行下列程序段:MOV R0 , #30H ; R0 30HMOV A , R0 ; A (30H)MOV R1 , A ; R1 40HMOV B , R1 ; B 20HMOV R1 , P1 ; (R1) CAH程序控制執(zhí)行結(jié)果為: A=40H,R0 =30H ,R1= 40H, B =20H, (40H)=
15、0CAH5.立即數(shù)送數(shù)據(jù)指針:MOV DPTR , #data16.如: MOV DPTR , #2000H通用數(shù)據(jù)傳送類指令小結(jié):直接尋址單元間接尋址單元工作寄存器立即數(shù)DPTR16位注意:下列指令是不存在的:MOV Rn, Rn; MOV Ri, RnA改錯題: 指出下列指令中的錯誤,并更正:1.MOV R2 ,R5更正: MOV A ,R5 MOV R2 ,A2.MOV R0 , R4更正: MOV A , R4 MOV R0 , A二、堆棧操作指令(2條)進(jìn)棧操作:PUSH direct ; SP SP+1, (SP) (direct) 出棧操作:POP direct ; (direc
16、t) SP , SP SP1注意:堆棧操作指令的操作數(shù)是直接尋址方式,對累加器進(jìn)行堆棧操作時,用ACC表示。例子如:設(shè)SP=30H,(50H)=80H ,執(zhí)行下列程序段。PUSH 50HPOP 40HSP 30H8050H 31H SP 31H SP 30H31H 808050H40H8050H30H8080三、查表指令MOVC A, A+PC ; PC PC+1, A (A+PC)MOVC A , A+DPTR ; PC PC+1, A (A+DPTR)1 .都屬于單字節(jié)指令。2. 對程序存儲器空間進(jìn)行訪問。3. 一般用于查表操作。首先在程序存貯器的一塊連續(xù)存貯空間中建立數(shù)據(jù)表,表的首地址或
17、PC的內(nèi)容為基址,表的偏移地址即為變址。4. 基址確定后,查表范圍為基址后256個字節(jié),累加器A中的數(shù)據(jù)為正數(shù)。5. PC的值同指令所處的位置確定,而DPTR的值可以通過賦值改變。 例如,在程序存貯器中,數(shù)據(jù)表格為: 2000H: 01H 2001H: 23H 2002H: 45H 2003H: 67H;程序如下: 1000H: MOV A , #03H 1002H: MOV DPTR ,#2000H 1005H: MOVC A , A+DPTR結(jié)果為: A=67H,DPTR=2000H.039000012345671000H1001H1002H1003H1004H1005H1006H7420
18、932000H2001H2002H2003H032000ADPTR+123例如,在程序存儲器中,數(shù)據(jù)表格為: 1010H:01 1011H:02 1012H:03程序如下: 1000H: MOV A,#0DH ;A 0DH 1002H: MOVC A,A+PC ;A (0DH+1003H) 該程序運(yùn)行的結(jié)果為:A=01H, PC= 1003H0D830102031000H1001H1002H1003H1010H1011H1012H740DAPC+01H四.累加器與片外數(shù)據(jù)存貯器間的數(shù)據(jù)傳送指令(4條)注意注意:Ri間址只能訪問片外RAM的低256個單元,這時的地址由P0口輸出,P2口仍可作一般
19、I/O口使用.DPTR間址可訪問64KB的空間DPTR中的低8位地址由P0口輸出,高8位地址由P2口輸出.1)、MOVX A , Ri ;A (Ri)2)、MOVX Ri , A ;(Ri) A3)、MOVX A, DPTR ; A (DPTR)4)、MOVX DPTR , A ; (DPTR) A 問題:下列兩個程序段的功能是否相同?為什么?1、MOV R1 , #10H MOV P2, #20H MOVX A , R1 2、MOV DPTR , #2010H MOVX A , DPTR問題:下列指令正確嗎?MOV A , 2000H MOVX A , 2000H MOVC A , 2000
20、H問題:若當(dāng)前工作寄存器使用第一組,下列四組指令的功能相同嗎?1、MOV A , 0AH 2、MOV A , R2 3、MOV R0 ,#0AH MOV A , R0 4、MOV SP , #0AH POP ACC 五.交換指令XCH A , Rn ;A RnXCH A , direct ;A (direct) XCH A , Ri ;A (Ri)例如:已知R0=10H,A=4EH, (10H)=5FH,執(zhí)行指令 : 1.字節(jié)交換指令XCH A , R0.結(jié)果: A=5FH, 10H=4EHA10H5FH(4EH)4EH(5FH)R010H2、 半字節(jié)交換指令.XCHD A , Ri ;A.
21、3 0 (Ri). 3 0例如:R0=10H, A=35H,片內(nèi)RAM(10H)=46H;執(zhí)行指令:XCHD , R0程序運(yùn)行結(jié)果為:A=36H,(10H)=45H;可見低4位發(fā)生了交換,高4位不變.0 0 1 1 0 1 0 1A35H0 1 0 0 0 1 1 0 (10H)46H10HR03、SWAP A ;累加器中的高底4 位相互交換.算術(shù)運(yùn)算類指令分類:加法,減法,乘法, 除法.加1,減1,二十進(jìn)制調(diào)整。注意:算術(shù)運(yùn)算類指令一般會影響狀態(tài)標(biāo)志位,數(shù)據(jù)傳送類指令只有以累加器為目的操作數(shù)的影響標(biāo)志,其它都不影響標(biāo)志位。 ADDA,Rn ;A A+Rn ADD A , direct ;A
22、A+(direct) ADD A , Ri ;A A+(Ri) ADD A , #data ;A A+data一加法類指令加法指令(條):2.帶進(jìn)位的加法指令 ADDC A , Rn ;A A+Rn+Cy ADDC A , direct ;A A+(direct)+Cy ADDC A , Ri ;A A+(Ri)+Cy ADDC A , #data ;A A+data +Cy加法類指令對標(biāo)志位的影響:結(jié)果的第七位向第八位有進(jìn)位時,置位Cy,結(jié)果的第七位和第六位只有一位向高位有進(jìn)位時,置位OV,結(jié)果的第三位向第四位有進(jìn)位時,置位AC,累加器A中的結(jié)果有奇數(shù)個1置于位P,否則各位清零。1 0 0
23、0 0 1 0 1 1 0 0 1 1 1 1 0+0 0 1 0 0 0 1 11結(jié)果:Cy= 1, OV = 1, AC =1 ,P = 10 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 1+ 1 1 1 0 1 1 0 1結(jié)果:Cy = 0 , OV = 0, AC =1, P=0注意:帶進(jìn)位的加法運(yùn)算常用于多字節(jié)的求和。例如:設(shè)A=85H, (R0)=20H, (20H)=9EH;執(zhí)行指令:ADD ,0例如,A =4EH,R0 =20H,(20H) = 9EH, Cy =1 ;執(zhí)行指令:ADDC A , R0 INC A ; A A+ 1 INC direct ;(di
24、rect) (direct) + 1 INC Ri ; (Ri) (Ri)+ 1 INC Rn ; Rn Rn+ 1 INC DPTR ; DPTR DPTR+1只有INC A指令影響P標(biāo)志,當(dāng)計(jì)數(shù)到255時再加1則結(jié)果為0,不影響進(jìn)標(biāo)志Cy,半進(jìn)位標(biāo)志AC,溢出標(biāo)志OV!3. 加1 指令注意:加1 指令常用在循環(huán)程序中作計(jì)數(shù)器使用!4.二十進(jìn)制調(diào)整指令(1條)DA A ;對壓縮BCD碼加法的結(jié)果自動修正.二 . 減法類指令SUBB A , Rn ;A A Rn CySUBB A , direct ;A A (direct) CySUBB A , Ri ;A A (Ri) CySUBB A ,
25、 #data ;A A data Cy1.帶借位的減法指令(4條).由于沒有不帶借位的減法指令,兩個單字節(jié)數(shù)相減時,應(yīng)先清Cy,否則會錯誤地將結(jié)果多減一個1。減法指令可用來比較兩個無符號數(shù)的大小。2 . 減1指令(4條) :DEC A ; A DEC Rn ; Rn RnDEC direct ; (direct) (direct)DEC Ri ; (Ri) (Ri)減1指令對標(biāo)志位的影響同加1指令,一個為00H的數(shù)減1的結(jié)果為FFH(255)。三. 乘法指令(1條)MUL AB ;A B BA功能:該指令將累加器A中的被乘數(shù)與B寄存器中的乘數(shù)相乘,結(jié)果的低8位保存到A,高8位保存到B中。對標(biāo)志
26、位的影響:總是清Cy標(biāo)志,若乘積小于FFH(255)則清OV,否則OV置1。A中的數(shù)的奇/偶性會影響P標(biāo)志。例如:A=40H,B=5EH;執(zhí)行指令:MUL AB.結(jié)果為:A=80H,B=17H; OV=1,Cy=0, P=1 0 H5 E H 3 8 01 4 0+ 1 7 8 0 H四. 除法指令DIV AB ; A B的商到A ,余數(shù)到了B功能:將累加器中的8位無符號整數(shù)除B寄存器中的8位無符號整數(shù).,所得的商的整數(shù)部分存于A中,余數(shù)存于B中。對標(biāo)志位的影響:總是清Cy為零,若當(dāng)除數(shù)B中的內(nèi)容為零時置OV=1,否則清OV=0.A中的結(jié)果影響P標(biāo)志。例如,設(shè)A=18H , B=12H;執(zhí)行指
27、令:DIV AB。結(jié)果為: A=01H,B=06H; Cy=0,OV=0,P=1.邏輯運(yùn)算與移位類指令(24條)功能:對8位數(shù)進(jìn)行邏輯與/或/異或/取反/清零以及循環(huán)移位等運(yùn)算。一. 邏輯與指令(6條) ANL A , Rn ; A ARn ANL A , direct ; direct A (direct)ANL A ,Ri ;A A (Ri) ANL A , #data ;A A data ANL direct , A ; direct (direct) ANL direct , #data ; direct (direct) data后兩條指令若是以端口P0P3為目的操作數(shù),則稱之為具有
28、讀修改寫特性的指令.應(yīng)用:邏輯與指令常用來屏蔽某些位.1 0 0 0 1 1 0 10 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 例如:已知 A= 8DH,R0 = 0FH,執(zhí)行ANL A , R0后,結(jié)果 為:A = 0DH;二 . 邏輯或指令(6條)ORL A , Rn ; A A Rn ORL A , direct ; direct A (direct)ORL A ,Ri ;A A (Ri) ORL A , #data ;A A data ORL direct , A ; direct (direct) ORL direct , #data ; direct (dire
29、ct) data后兩條指令若是以端口P0P3為目的操作數(shù),則稱之為具有讀修改寫特性的指令.應(yīng)用: 邏輯或指令常用來使某些位置1.例如:已知 A= 86H,R0 = 79H,執(zhí)行 ORL A , R0后,結(jié)果 為:A = FFH.1 0 0 0 0 1 1 00 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 三 . 邏輯異或指令(6條)XRL A , Rn ; A A Rn XRL A , direct ; direct A (direct)XRL A ,Ri ;A A (Ri) XRL A , #data ;A A data XRL direct , A ; direct(dir
30、ect)XRL direct , #data ; direct (direct) data后兩條指令若是以端口P0P3為目的操作數(shù),則稱之為具有讀修改寫特性的指令應(yīng)用: 邏輯異或指令常用來把某些位取反。例如:已知 A= 87H,R0 = F9H,執(zhí)行 XRL A , R0后,結(jié)果 為:A = 7EH。1 0 0 0 0 1 1 11 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 四 . 累加器A清零,取反和循環(huán)移位指令(6條)D7 D01).循環(huán)左移指令: RL A;1.累加器清零指令: CLR A ; A 02.累加器取反指令: CPL A ;A A3.循環(huán)移位類指令(4條)
31、D7 D0Cy3 ).帶進(jìn)位的循環(huán)左移指令: RLC A ;D7 D0Cy4).帶進(jìn)位的循環(huán)右移指令: RRC A ;D7 D02).循環(huán)右移指令: RR A控制轉(zhuǎn)移類指令分類:轉(zhuǎn)移指令,子程序調(diào)用指令,返回指令。一. 轉(zhuǎn)移指令 長轉(zhuǎn)移 LJMP addr16 ; PC addr16絕對轉(zhuǎn)移 AJMP addr11; PC PC+2, PC. 10PC.0addr11相對轉(zhuǎn)移 SJMP rel ; PCPC+ 2, PCPC+ rel散轉(zhuǎn)指令JMP A +DPTR; PC A+DPTR1、無條件轉(zhuǎn)移指令問題1: 若執(zhí)行指令: 1803: AJMP 100H, 問PC= ? 解: PC+2=18
32、05= 0001 1000 0000 0101中的低11位用100H= 001 0000 0000替代后得PC = 0001 1001 0000 0000 =1900H。(1900H)問題2:散轉(zhuǎn)指令的特點(diǎn):問題3:如何使用JMP A+DPTR 實(shí)現(xiàn)多分支結(jié)構(gòu)(即散轉(zhuǎn))。Prog : AJMP prog0;轉(zhuǎn)prog0分支程序. AJMP prog1 ; 轉(zhuǎn)prog1分支程序. AJMP prog2 ; 轉(zhuǎn)prog2分支程序. MOV DPTR , #prog RL A JNC NEXT INC DPHNEXT: JMP A+DPTR (1)、動態(tài)特性;(2)、區(qū)域特性( 模216 加運(yùn)算 )
33、。首先建立一個散轉(zhuǎn)表 Prog+2Prog+42、 條件轉(zhuǎn)移指令(10條) 根據(jù)給定的條件進(jìn)行檢測,若條件滿足則轉(zhuǎn)移,否則繼續(xù)往下執(zhí)行。轉(zhuǎn)移范圍在當(dāng)前指令的下一條指令為起始地址的128127之間.1、累加器判零指令(2條)JZ rel ;若A=0,則PCPC+2+rel 轉(zhuǎn)移 .否則,PCPC+2,不轉(zhuǎn)移.往下順序執(zhí)行.JNZ rel ;若A 0,則PCPC+2+rel 轉(zhuǎn)移 .否則,PCPC+2,不轉(zhuǎn)移.往下順序執(zhí)行.2、 判Cy轉(zhuǎn)移指令JC rel ; 若Cy=1,則PCPC+2+rel,轉(zhuǎn)移.否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.JNC rel ; 若Cy 0, 則PCPC+2+rel
34、,轉(zhuǎn)移。否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.3、比較轉(zhuǎn)移指令CJNE A , direct , rel ; 若A (direct),則PCPC+3+rel,轉(zhuǎn)移;否則, PCPC +3,不轉(zhuǎn)移. CJNE A , #data , rel;若A data,則PCPC+3+rel,轉(zhuǎn)移;否則, PC PC +3,不轉(zhuǎn)移.CJNE Ri , #data , rel;若(Ri) data,則PC PC+3+rel,轉(zhuǎn)移;否則, PCPC +3,不轉(zhuǎn)移.CJNE Rn , #data , rel;若Rn data,則PCPC+3+rel,轉(zhuǎn)移;否則, PCPC +3,不轉(zhuǎn)移.4.計(jì)數(shù)循環(huán)指令(循環(huán)轉(zhuǎn)
35、移指令2條)DJNZ Rn , rel;若Rn-1 0,則PC PC+2+rel,轉(zhuǎn)移;否則,PCPC+2,不轉(zhuǎn)移.DJNZ direct , rel ;若(direct)-1 0,則PC PC+3+rel,轉(zhuǎn)移;否則,PC PC+3,不轉(zhuǎn)移.二、調(diào)用子程序及返回指令1. 調(diào)用子程序指令1)、長調(diào)用:LCALL addr16 ;(1) 、保護(hù)斷點(diǎn):PCPC+3, SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158 (2) . 產(chǎn)生目的地址( 轉(zhuǎn)移 ) :PCaddr16SPSP+1SPPC70SP+1SPPC1582)、絕對調(diào)用:ACALL addr11 ;(1).保護(hù)斷點(diǎn):P
36、C PC+2, SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158 (2). 產(chǎn)生目的地址( 轉(zhuǎn)移 ) :PC addr112 . 返回指令RET ; PC158 (SP) ;PC70 (SP )(2)、中斷子程序返回指令(1)、子程序調(diào)用返回指令RETI ; PC158 (SP) ;PC70(SP )SPSP-1SPPC70SP-1SPPC158注意:RET指令用于子程序返回;RETI指令用于中斷服務(wù)程序返回;兩者都有恢復(fù)斷點(diǎn)的功能 .但RETI指令還有清內(nèi)部優(yōu)先級狀態(tài)觸發(fā)器的功能,所以兩者不能互換使用!三、空操作指令 NOP ;PC PC+1;這是一條單字節(jié),單機(jī)器周期指令
37、,執(zhí)行時不作任何操作,只是耗用了一個機(jī)器周期。位操作對可位尋址空間的數(shù)據(jù)進(jìn)行操作。為了便于記憶,在匯編語言編程時,位地址一般有以下四種表示方式:1、直接位地址表示方式;如:07H,1FH2、點(diǎn)操作符表示方式;如:20H.7,PSW.13、位名方式;如RS0,C,F04、用戶使用偽指令定義方式; FLAG BIT P3.3位操作類指令(17條)一、位傳送指令(2條)MOV C , bit ; C(bit)MOV bit , C ; bit C例如:已知片內(nèi)RAM(20H)=8AH=10001010B,P1口輸出的數(shù)據(jù)為0110 0110B執(zhí)行下列程序: MOV C , 07H MOV P1.7,
38、 C結(jié)果:CY=1,P1.7=1。P1口的其它位不發(fā)生變化。二、置位復(fù)位指令(4條)3)、位邏輯非指令 CPL C CPL bitCLR C ; C0; CLR bit;bit0三、位邏輯運(yùn)算類指令(6條)1)、位邏輯與ANL C , bit ;C Cbit ANL C , /bit ;C C bit2)、位邏輯或 ORL C , bit ;C Cbit ORL C , /bit ;C C bitSETB C ; C1 SETB bit ; bit1位指令應(yīng)用舉例:用位指令實(shí)現(xiàn)組合邏輯電路的功能:1&UVWY算法:Y=(U V) & W 開始取U到CU與C或結(jié)果存CC與W的非與后存于C存結(jié)果到
39、Y暫停U BIT 20H.0 ;定義符號地址V BIT 20H.1W BIT 20H.2Y BIT 20H.3MOV C , U ;C UORL C , V ;C U VANL C , /W ;C (U V) & W MOV Y , C ;C Y如圖所示電路,設(shè)U、V、W分別放在20H.0,20H.1,20.2H單元。結(jié)果Y保存到20H.3單元.程序如下:JB bit, rel;若bit=1,則PCPC+3+rel;否則PCPC+3JNB bit, rel;若bit=0,則PCPC+3+rel;否則PCPC+3JBC bit , rel;若bit=1,則 bit0, PCPC+3+rel;否則
40、PCPC+3該類指令常用于測試端口的某一位端線的狀態(tài). SETB P1.7 JB P1.7 , NEXT MOV P1 ,#0FFH MOV A , P1 NEXT:MOV P2 , 30H四、位條件轉(zhuǎn)移指令1.狀態(tài)位判轉(zhuǎn)類指令2 2. 判Cy轉(zhuǎn)移指令JC rel ; 若Cy=1,則PCPC+2+rel,轉(zhuǎn)移.否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.JNC rel ; 若Cy=0, 則PCPC+2+rel,轉(zhuǎn)移.否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.小結(jié):(1):不同的存儲空間尋址方式不同,適用的指令不同,要注意區(qū)別。(2):指令是程序設(shè)計(jì)的基礎(chǔ),按功能分類記憶每條指令的功能、操作的對象和結(jié)
41、果以及對標(biāo)志位的影響,要求熟記。匯編語言程序設(shè)計(jì)基礎(chǔ)一、程序設(shè)計(jì)語言的分類:機(jī)器語言,匯編語言,高級語言1、機(jī)器語言:表現(xiàn)形式上是二進(jìn)制代碼,用一串二進(jìn)制代碼來表示一條指令,因此機(jī)器能直接識別并執(zhí)行.缺點(diǎn)是不便于記憶和交流,容易出錯.2、匯編語言:是機(jī)器指令系統(tǒng)的符號表示.不能直接執(zhí)行必須轉(zhuǎn)換成目標(biāo)代碼(匯編). 匯編效率高、能直接對硬件資源進(jìn)行操作。匯編語言源程序匯編程序目標(biāo)代碼3、高級語言:類似人類自然語言或數(shù)學(xué)語言,編程效率高,便于交流,但編譯效率低.二、 匯編語言的組成匯編語言語言的程序含有兩種語句:指令性語句,指示性語句。1、指令性語句:每條指令都產(chǎn)生相應(yīng)機(jī)器語言的目標(biāo)代碼,程序的功
42、能靠指令性語句去完成.2、指示性語句:為匯編程序提供匯編過程的控制信息(匯編控制指令或偽指令)三、 偽指令格式:ORG 16位地址功能:規(guī)定該偽指令后的源程序經(jīng)匯編后的目標(biāo)程序在程序存貯器空間的起始地址.1、ORG(origin匯編起始地址):例如: ORG 2000H START:MOV A , R12、END(匯編結(jié)束偽指令)格式: END | END 標(biāo)號通知匯編程序不再繼續(xù)往下匯編。如果源程序是一子程序則END后不加標(biāo)號,若是主程序所加標(biāo)號應(yīng)為主程序的首地址,否則匯編后的目標(biāo)程序從0000H單元開始存放。3、EQU(equate等值)格式: 標(biāo)識符號 EQU 數(shù)或匯編符號把數(shù)或匯編符號
43、賦給標(biāo)識符,只能賦值一次。例如 : LOOP EQU 10H LP EQU R2MOV LOOP,#10HMOV LP,R24、DB(Define Byte定義字節(jié))格式: 標(biāo)號: DB 項(xiàng)或項(xiàng)表把項(xiàng)或項(xiàng)表中的字節(jié)數(shù)據(jù)依次存入到標(biāo)號開始的存貯單元。5、DW(Define Word字定義)格式: 標(biāo)號: DW 項(xiàng)或項(xiàng)表把項(xiàng)或項(xiàng)表中的字?jǐn)?shù)據(jù)依次存入到了標(biāo)號開始的存貯單元.按高低原則存貯.例如:WORD: DW 1234H,5678H12H34H56H78HWORDWORD+1WORD+2WORD+3WORD+4 ORG 1000H CON :DB 50H SEG: DB 30H,06H,5B例如:
44、TAB:DB 12, “a”,“abcvy”SEGSEG+1SEG+250HCON30H06H5BH6、DS(Define Store預(yù)留存貯單元)格式 : 標(biāo)號:DS 數(shù)字從標(biāo)號開始按數(shù)字的值保留相應(yīng)數(shù)量的存貯單元.例如: 指令 SPACE: DS 0AH預(yù)留10個存貯單元,下條指令從SPACE+10開始存放.7、BIT(位地址符號指令)格式: 標(biāo)識符 BIT 位地址功能:將位地址賦給標(biāo)識符.例如: A1 BIT P1.0 A2 BIT P1.1四、 匯編語言程序設(shè)計(jì) . 分析問題,明確任務(wù); .確定解決問題的算法; .根據(jù)算法,分配資源,畫出程序流程圖; .根據(jù)流程圖,編寫源程序; .對源
45、程序匯編、調(diào)試;.全盤符號化,既增強(qiáng)了程序的可讀性,又便于修改;.程序結(jié)構(gòu)模塊化.每個模塊一個入口一個出口;.在模塊中慎用無條件轉(zhuǎn)移指令;.循環(huán)程序體內(nèi)要盡可能優(yōu)化;.各模塊使用各自的工作寄存器,注意相互之間的切換;.模塊間的參數(shù)傳遞僅可能用累加器完成;.在中斷服務(wù)程序中做好現(xiàn)場的保護(hù),做到進(jìn)棧的數(shù)據(jù)愈少愈好,盡量避免堆棧溢出;1.方法(步驟):2.好的程序設(shè)計(jì)風(fēng)格:五、幾種基本程序設(shè)計(jì)舉例1、順序程序例1:將一個字節(jié)的壓縮BCD碼轉(zhuǎn)換成ASCII碼,存入RAM的兩個單元。解:算法:ASCII碼=BCD碼+30H資源按排:設(shè)BCD碼數(shù)據(jù)存在片內(nèi)RAM的30H單元.轉(zhuǎn)換的結(jié)果高位BCD碼存入到了
46、31H單元,低位存入32H單元。開始取BCD碼轉(zhuǎn)換個位存結(jié)果取BCD碼轉(zhuǎn)換十位存結(jié)果暫停 MOV A ,30H SWAP A ANL A , #0FH ADD A, #30H MOV 31H , A SJMP $ END例1:將一個字節(jié)的壓縮BCD碼轉(zhuǎn)換成ASCII碼,存入RAM的兩個單元.解: ORG 0000h MOV A , 30H ANL A , #0FH ADD A , #30H MOV 32H , A例2:編程將外部數(shù)據(jù)存儲器000EH和000FH單元的內(nèi)容相交換。分析:外部數(shù)據(jù)存儲器操作數(shù)只能用MOVX指令訪問且只能與A之間傳送,因此必須用一個中間環(huán)節(jié)作暫存,設(shè)用20H。用R0、
47、R1指示兩個單元的低8位地址,高8位地下由P2指示。程序如下:MOV 20H , AORG 0000HMOV P2 , #0MOV R0 , #0EHMOV R1 , #0FHMOVX A ,R0ENDMOVX A,R1XCH A, 20HMOVX R1,AMOV A, 20HMOVX R0,ASJMP $例3:將內(nèi)部數(shù)據(jù)存儲器的(31H)(30H) 中的16位數(shù)求其補(bǔ)碼后放回原單元。分析: 先判斷數(shù)的正、負(fù),因?yàn)檎龜?shù)的補(bǔ)碼=原碼,而負(fù)數(shù)的補(bǔ)碼=反碼 + 1,因此,算法是低位取反加1,高位取反后再加低位的進(jìn)位Cy,由于INC 指令不影響Cy標(biāo)志,低位加1不能用INC指令。編程如下:2、分支程序
48、設(shè)計(jì)ORG 0000HMOV A , 31HJB ACC.7 ,CPLLSJMP EOFCPLL:MOV A , 30HCPL A ADD A , #1MOV 30H ,AMOV A , 31HXRL A , #7FHADDC A, #0MOV 31H ,AEOF :SJMP EOFEND例4:設(shè)變量以補(bǔ)碼形式存放在片內(nèi)RAMR 30H單元,函數(shù)Y和X有如下關(guān)系: X X0Y= 20H X=0 X+5 X0?(30H)+05(30H)結(jié)束YNYNORG 0000HMOV A , 30HJZ NEXT ;判斷是否為零ANL A , #80H ;判斷符號位JZ EOFMOV A , #05 ;X0
49、,完成X+5ADD A, 30HMOV 30H , ASJMP EOFNEXT: MOV 30H ,#20HEOF: SJMP EOFEND多分支散轉(zhuǎn)程序有一類分支程序根據(jù)不同的輸入條件或不同的運(yùn)算結(jié)果,轉(zhuǎn)向不同的處理程序,稱之為散轉(zhuǎn)程序。這類程序通常用JMP A+DPTR間接指令實(shí)現(xiàn)轉(zhuǎn)移。有如下兩種設(shè)計(jì)方法: 例5:根據(jù)R3的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序,設(shè)R3的內(nèi)容為0n,處理程序的入口符號地址分別為PR0、PR1PRn(n128)。 分析:將PR0PRn的地址列在表格中,每一項(xiàng)占兩個單元 ,PRn在表格中的偏移量分別為2n ,因此將R3乘2即得PRn在一表格中的偏移地址 ,從偏移地址2n 和 2n
50、+1 兩個單元分別取PRn的高8位地址和低 8 位地址送DPTR寄存器 ,用JMP A+DPTR指令(先清A為零) PRn的入口執(zhí)行。用轉(zhuǎn)移地址表實(shí)現(xiàn)轉(zhuǎn)移; 用轉(zhuǎn)移指令表實(shí)現(xiàn)轉(zhuǎn)移; TAB:DW PR0,PR1,PR2,PRnORG 0000HMOV DPTR ,#TABMOV A , R3ADD A , R3MOV B , AMOVC A , A+DPTRXCH B, AINC AMOVC A, A+DPTRMOV DPL , AMOV DPH ,BCLR AJMP A +DPTRPR0: LJMP EOFPR1: LJMP EOFPRn:EOF:SJMP $END例6:根據(jù)R3的內(nèi)容轉(zhuǎn)向?qū)?/p>
51、應(yīng)的程序設(shè)R3的內(nèi)容為0n,處理程序的入口符號地址分別為PR0、PR1PRn(n(R1)?內(nèi)循環(huán)結(jié)束?交換標(biāo)志為1?結(jié)束源程序如下:NOMIN: DJNZ R2, LP1 JB F0, LP2 EOF: SJMP EOF END SETB F0NEXT : INC R0 INC R1 ORG 0000H MOV B , #06HLP2: MOV R2,B DEC B CLR F0 MOV R0 , #30H MOV R1 , #31HLP1: MOV A , R0 CLR C SUBB A ,R1 JC NEXTMOV A,R0 XCH A ,R1XCH A ,R05、 子程序設(shè)計(jì)、什么是子程
52、序:功能獨(dú)立的程序段。、怎么寫一個子程序:子程序的基本結(jié)構(gòu)。子程序名:保護(hù)現(xiàn)場 子程序體 . . . 恢復(fù)現(xiàn)場 RETLCALL ARETRETLCALL B、子程序的嵌套調(diào)用與返回保護(hù)現(xiàn)場恢復(fù)現(xiàn)場保護(hù)現(xiàn)場恢復(fù)現(xiàn)場傳遞參數(shù)傳遞參數(shù)例:設(shè)計(jì)一個延時10ms的子程序,已知單片機(jī)的晶振頻率為6MHz。分析:延時時間與兩個因素有關(guān),一個是晶振頻率,一個是循環(huán)次數(shù)。由于晶振頻率為6MHz,一個機(jī)器周期是2s,用單循環(huán)實(shí)現(xiàn) 1ms的延時,外循環(huán)10次即可達(dá)到10ms的延時。內(nèi)循環(huán)如何1ms的延時呢?程序中先用MT代替,再根據(jù)程序執(zhí)行的時間計(jì)算(機(jī)器周期從附錄指令表中查到)。DL: MOV R2 ,#0AH;外循環(huán)10次DL2: MOV R3 ,#MTDL1: NOP NOP DJNZ R3,DL1 DJNZ R2,DL2 RET機(jī)器周期數(shù)1111222內(nèi)循環(huán)MT次外內(nèi)循環(huán)DL1到 指令DJNZ R3,DL1的計(jì)算: (1+1+2)2 s MT=1000 s MT=125=7DH將7DH代入上面的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《小烏龜看爺爺》課件
- 《電氣安全操作技術(shù)》課件
- 三年級數(shù)學(xué)認(rèn)識分?jǐn)?shù)課件
- 《神經(jīng)系統(tǒng)的療養(yǎng)》課件
- 單位管理制度集合大合集人員管理篇十篇
- 單位管理制度匯編大合集人力資源管理十篇
- 中心對稱課件
- 單位管理制度分享大全職工管理篇
- 《證據(jù)法的基礎(chǔ)知識》課件
- 《診斷學(xué)》課程標(biāo)準(zhǔn)
- 滬教版英語小學(xué)六年級上學(xué)期期末試題與參考答案(2024-2025學(xué)年)
- 北京市海淀區(qū)2023-2024學(xué)年四年級上學(xué)期語文期末試卷
- 混凝土企業(yè)安全培訓(xùn)
- 《腫瘤與營養(yǎng)》課件
- 國際政治學(xué)概論,宋新寧、陳岳
- 能源行業(yè)智能電網(wǎng)與需求響應(yīng)管理系統(tǒng)方案
- 2024至2030年電子壓力計(jì)項(xiàng)目投資價值分析報告
- GB/T 44747.1-2024建筑施工機(jī)械與設(shè)備固定式混凝土布料機(jī)第1部分:術(shù)語和商業(yè)規(guī)格
- 地質(zhì)災(zāi)害治理工程竣工報告
- 《濟(jì)南聯(lián)通公司成本管理問題及解決策略7000字論文》
- 程序員個人年終總結(jié)
評論
0/150
提交評論