單片機原理及應用教程.ppt

上傳人:w****2 文檔編號:15043844 上傳時間:2020-08-03 格式:PPT 頁數:54 大小:367.32KB
收藏 版權申訴 舉報 下載
單片機原理及應用教程.ppt_第1頁
第1頁 / 共54頁
單片機原理及應用教程.ppt_第2頁
第2頁 / 共54頁
單片機原理及應用教程.ppt_第3頁
第3頁 / 共54頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《單片機原理及應用教程.ppt》由會員分享,可在線閱讀,更多相關《單片機原理及應用教程.ppt(54頁珍藏版)》請在裝配圖網上搜索。

1、第3章 MCS-51指令系統(tǒng)及匯編語言程序設計 3.1 指令系統(tǒng)簡介 3.2 尋址方式 3.3 指令系統(tǒng) 3.4 匯編語言程序設計基礎 3.5 程序設計實例,指令系統(tǒng)是一種CPU所能直接執(zhí)行的所有命令的集合,CPU的主要功能是由它的指令系統(tǒng)來體現的。 3.1 指令系統(tǒng)簡介 MCS-51系列單片機指令系統(tǒng)共有111條指令,其中有49條單字節(jié)指令、45條雙字節(jié)指令和17條三字節(jié)指令。 MCS-51的指令系統(tǒng)中有64條指令的執(zhí)行時間為一個機器周期(12個振蕩周期),45條指令的執(zhí)行時間為兩個機器周期。 3.1.1 指令格式 MCS-51指令系統(tǒng)中的每一條指令都有兩級指令格式: CPU可直接識別并執(zhí)行

2、的機器語言指令。 匯編語言指令(簡稱匯編指令)。 機器語言指令由二進制數“0”和“1”編碼而成,也稱目標代碼,執(zhí)行速度最快。,匯編語言指令是在機器語言指令的基礎上,用英文單詞或英文單詞縮寫表示機器語言指令的操作碼(助記符),用符號表示操作數或操作數的地址。匯編語言指令實際上是符號化的機器語言。 MCS-51匯編語言指令格式由以下幾個部分組成: 標號: 操作碼 目的操作數 ,源操作數 ;注釋 其中, 中的項表示為可選項。 標號:又稱為指令地址符號,一般是由16個字符組成,以字母開頭的字母數字串,與操作碼之間用冒號分開。 操作碼:是由助記符所表示的指令的操作功能。 操作數:是指參加操作的數據或數據

3、的地址。 注釋:是為該條指令作的說明,以便于閱讀。 操作碼是指令的核心,不可缺少,其他幾項根據不同指令為可選項。,3.1.2 指令分類及符號說明 1. 指令分類 MSC-51的指令系統(tǒng)共有111條指令,分為五大類: (1) 數據傳送指令:片內RAM、片外RAM、程序存儲器的傳送指令,交換及堆棧指令。 (2) 算術運算類:加法、帶進位加、減、乘、除、加1、減1指令。 (3) 邏輯運算類:邏輯與、或、異或、測試及移位指令。 (4) 控制程序轉移類:無條件轉移與調用、條件轉移、空操作指令。 (5) 布爾變量操作類:分為位數據傳送、位與、位或、位轉移指令。 2. 符號說明 #data:表示指令中的8位

4、立即數(data),“#”表示后面的數據是立即數。 #data16:表示指令中的16位立即數。 direct:表示位內部數據存儲器單元的地址。,Rn:n=07,表示當前選中的寄存器區(qū)的8個工作寄存器R0R7。 Ri:i=0或1,表示當前選中的寄存器區(qū)中的2個寄存器R0、R1,可作地址指針即間址寄存器。 Addr11:表示11位的目的地址。 Addr16:表示16位的目的地址。 rel:表示一個補碼形式的位帶符號的偏移量。用于SJMP和所有的條件轉移指令中。 DPTR:為數據指針,可用作16位的地址寄存器。 bit:內部RAM或專用寄存器中的直接尋址位。 /:位操作數的前綴,表示對該位操作數取反

5、。 A:累加器ACC。 B:專用寄存器,用于MUL和DIV指令中。 C:進位/借位標志位,也可作為布爾處理機中的累加器。 :間址寄存器或基址寄存器的前綴。,$:當前指令的首地址。 :表示將箭頭右邊的內容傳送至箭頭的左邊。 3.2 尋址方式 所謂尋址方式就是尋找或獲得操作數的方式。 MCS-51指令系統(tǒng)的尋址方式有以下7種: 1. 立即尋址 在立即尋址方式中,操作數直接出現在指令中。操作數前加“#”號表示,也稱立即數。指令的操作數可以是8位或16位數。 例如: MOV A, #26H ; A26H 指令執(zhí)行結果:(A)=26H,即把立即數26H直接送到A中。 2. 直接尋址 在直接尋址方式中,操

6、作數的單元地址直接出現在指令中,這一尋址方式可進行內部存儲單元的訪問。它包括:,(1) 特殊功能寄存器地址空間。這也是惟一可尋址特殊功能寄存器(SFR)的尋址方式。 例如:MOV TCON, A 指令執(zhí)行結果:A的內容傳送給寄存器TCON。 (2) 內部RAM的低128字節(jié) 例如: MOV A, 76H 指令執(zhí)行結果:內部RAM地址為76H單元的內容傳送給A。 3. 寄存器尋址 在寄存器尋址方式中,寄存器中的內容就是操作數。 例如: MOV A, R1; A(R1) 指令執(zhí)行結果:把寄存器R1中的內容送到累加器A中。,4. 寄存器間接尋址 在寄存器間接尋址方式中,指定寄存器中的內容是操作數的地

7、址,該地址對應存儲單元的內容才是操作數。 例如 MOV A, R0 該指令的功能是將R0所指3FH單元中內容45H送A中,執(zhí)行結果:(A)=45H。 16位數據指針DPTR作為間址寄存器。 訪問內部數據存儲器時,用當前工作寄存器R0和R1作間址,即R0、R1,在堆棧操作中則用堆棧指針SP作間址。 例如: MOVX A, R1 MOVX DPTR, A,5. 變址尋址 變址尋址方式是以程序指針PC或數據指針DPTR為基址寄存器,以累加器A作為變址寄存器,兩者內容相加(即基地址+偏移量)形成16位的操作數地址,變址尋址方式主要用于訪問固化在程序存儲器中的某個字節(jié)。 變址尋址方式有兩類: (1) 用

8、程序指針PC作基地址,A作變址,形成操作數地址:A+PC。 (2) 用數據指針DPTR作基地址,A作變址,形成操作數地址:A+DPTR。 6. 相對尋址 相對尋址是以程序計數器PC的當前值作為基地址,與指令中的第二字節(jié)給出的相對偏移量rel進行相加,所得和為程序的轉移地址。,7. 位尋址 MCS-51系列單片機中有獨立的性能優(yōu)越的布爾處理器,包括位變量操作運算器、位累加器和位存儲器,可對位地址空間的每個位進行位變量傳送、狀態(tài)控制、邏輯運算等操作。位地址包括:內部RAM地址空間的可進行位尋址的128位和SFR地址空間的可位尋址的11個8位寄存器的88位。位尋址給出的是直接地址。 3.3 指令系統(tǒng)

9、 3.3.1 數據傳送類指令 1. 數據傳送類指令的特點 數據傳送指令是最常用的一類指令,共有29條,可以通過累加器進行數據傳送,還可以在數據存儲器之間或工作寄存器與數據存儲器之間直接進行數據傳送。 2. 數據傳送類指令 (1) 片內數據傳送指令,1) 以累加器A為目的操作數的指令有以下形式: MOV A, Rn ; A(Rn) 源操作數為寄存器尋址 MOV A, Ri; A(Ri) 源操作數為寄存器間接尋址 MOV A, direct ; A(direct) 源操作數為直接尋址 MOV A, #data ; Adata 源操作數為立即尋址 該組指令的功能是把源操作數傳送給累加器A。 2) 以

10、工作寄存器Rn為目的操作數的指令有以下形式: MOV Rn, A ; Rn(A) MOV Rn, direct; Rn(direct) MOV Rn, #data; Rndata,3) 以直接地址為目的操作數的指令有以下形式: MOV direct, A MOV direct, Rn MOV direct, direct MOV direct, Ri MOV direct, #data 4) 以間接地址為目的操作數的指令: MOV Ri, A MOV Ri, direct MOV Ri, #data 該組指令的功能:把源操作數所指定的內容傳送至以R0或R1為地址指針的片內RAM單元中。 5)

11、16位數據傳送指令有以下惟一形式: MOV DPTR, #data16 該指令的功能:把16位立即數傳送至16位數據指針寄存器DPTR。,(2) 片外數據存儲器傳送指令 片外數據存儲器傳送指令有以下形式: MOVX A, Ri ; A(Ri),為寄存器間接尋址 MOVX A, DPTR ; A(DPTR),為寄存器間接尋址 MOVX R, A ; (Ri)(A) MOVX DPTR, A ; (DPTR)(A) 單片機內部與片外數據存儲器是通過累加器A進行數據傳送的。 (3) 程序存儲器數據傳送指令 程序存儲器數據傳送指令有以下兩種形式: MOVC A, A+PC MOVC A, A+DPTR

12、,(4) 數據交換指令 數據交換指令有以下形式: 1) 字節(jié)交換指令: XCH A, Rn ; A的內容與Rn的內容交換 XCH A, Ri; A的內容與(Ri)的內容交換 XCH A, direct ; A的內容與(direct)的內容交換 2) 低半字節(jié)交換指令: XCHD A, Ri ; A的低四位與(Ri)的低四位交換 3) 累加器A的高、低半字節(jié)交換指令: SWAP A ; A的低四位與高四位互換 (5) 堆棧操作指令 堆棧操作指令有以下形式: PUSH direct; SP(SP)+1(先指針加1) ; (SP)(direct)(再壓棧),POP direct; (SP)(dire

13、ct)(先彈出) ; SP(SP)-1(再指針減1) PUSH指令是入棧(或稱壓?;蜻M棧)指令,其功能是先將堆棧指針SP的內容加1,然后將直接尋址direct單元中的數壓入到SP所指示的單元中。 POP是出棧(或稱彈出)指令,其功能是先將堆棧指針SP所指示的單元內容彈出到直接尋址direct單元中,然后將SP的內容減1,SP始終指向棧頂。 3.3.2 算術運算類指令 1. 算術運算類指令特點 算術運算類指令共有24條,包括加、減、乘、除4種基本的算術運算指令。 該類指令的主要功能: (1) 對8位無符號數進行直接的運算。 (2) 借助溢出標志對有符號的二進制整數進行加減運算。 (3) 借助進位

14、標志,可以實現多字節(jié)的加減運算。,(4) 對壓縮的BCD數進行運算(壓縮BCD數,是指在1個字節(jié)中存放2位BCD數)。 (5) 算術運算指令對程序狀態(tài)字PSW中的Cy、AC、OV三個標志都有影響,根據運算的結果可將它們置1或清除。但是加1和減1指令不影響這些標志。 算術運算類指令用到的助記符有:ADD、ADDC、SUBB、INC、DEC、DA、MUL和DIV八種 。 2. 加法指令 (1) 不帶進位的加法指令 不帶進位的加法指令有以下形式: ADD A, #data ; A(A)+data ADD A, direct ; A(A)+(direct) ADD A, Rn ; A(A)+(Rn)

15、ADD A, Ri ; A(A)+(Ri) 這4條指令的功能是完成A中的數與源操作數所確定的內容按二進制運算相加,其和送入目的操作數累加器A中。,(2) 帶進位加法指令 帶進位加法指令有以下形式: ADDCA, Rn; A(A)+(Rn)+Cy ADDCA, Ri; A(A)+(Ri)+Cy ADDCA, direct; A(A)+(direct)+Cy ADDCA, #data; A(A)+#data+Cy 該組指令的功能:將指令中指出的源操作數與A的內容及進位標志位Cy的值相加,結果送A。此類指令常用于多字節(jié)加法算中。 (3) 加1指令 加1指令有以下形式: INCA; A(A)+1 IN

16、CRn; Rn(Rn)+1 INCdirect; (direct)(direct)+1,INCRi; (Ri)(Ri)+1 INCDPTR; DPTR(DPTR)+1 該組指令的功能:把操作數指定的單元或寄存器的內容加1。 (4) 十進制調整指令 十進制調整指令有以下惟一形式: DAA; A(A)(BCD碼調整) 指令的功能:將存放于A中的兩個BCD碼(十進制數)的和進行十進制調整,使A中的結果為正確的BCD碼數。 3. 減法指令 (1) 帶借位減法指令 帶借位減法指令有以下形式: SUBBA, Rn; A(A)-(Rn)-Cy SUBBA, Ri; A(A)-(Ri)-Cy SUBBA, d

17、irect; A(A)-(direct)-Cy SUBBA, #data; A(A)-data-Cy,該組指令的功能:從累加器A中減去源操作數指定的內容和標志位Cy,結果存入累加器A中。 (2) 減1指令 減1指令有以下形式: DEC A; A(A)-1 DEC Rn; Rn(Rn)-1 DEC Ri; (Ri)(Ri)-1 DEC direct; (direct)(direct)-1 該組指令的功能:將操作數指定的內容減1。若操作數為00H,則減1后下溢為0FFH,不影響標志位,只有DEC A影響標志位P。 4. 乘法指令 乘法指令有以下惟一形式: MUL AB; AAB低字節(jié),BAB高字節(jié)

18、,該指令的功能:把累加器A和寄存器B中的兩個8位無符號數相乘,乘積又送回A、B內,A中存放低位字節(jié),B中存放高位字節(jié)。 除法指令有以下惟一形式: DIVAB; A(A)/(B)(商),B(A)/(B)(余數) 該指令的功能:把A中的8位無符號數除以B中的8位無符號數,商存放在A中,余數存放在B中。Cy和OV均清0。若除數為0,執(zhí)行該指令后結果不定,并將OV置1。 3.3.3 邏輯運算類指令 邏輯操作指令共24條,所有指令均對8位二進制數按位進行邏輯運算。 邏輯運算類指令無進位,一般不影響標志位。 1. 雙操作數邏輯運算指令 (1) 邏輯“與”指令 邏輯“與”指令有以下形式: ANLA, Rn;

19、 A(A)(Rn),ANLA, Ri; A(A)(Ri) ANLA, direct; A(A)(direct) ANLA, #data; A(A)data ANLdirect, A; (direct)(direct)(A) ANLdirect, #data; (direct)(direct)data 該組指令的功能:將源操作數和目的操作數按對應位進行邏輯“與”運算,并將結果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。 與運算規(guī)則是:與“0”相與,本位為“0”(即屏蔽);與“1”相與,本位不變。 邏輯“與”指令常用于屏蔽操作數中的某些位。 (2) 邏輯“或”指令,邏

20、輯“或”指令有以下形式: ORL A, Rn; A(A)(Rn) ORL A, Ri; A(A)(Ri) ORL A, direct; A(A)(direct) ORL A, #data; A(A)data ORL direct, A; (direct)(direct)(A) ORL direct, #data; (direct)(direct)data 該組指令的功能:將源操作數和目的操作數按對應位進行邏輯“或”運算,并將結果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。 或運算規(guī)則是:與“1”相或,本位為“1”;與“0”相或,本位不變。,(3) 邏輯“異或”指令

21、 邏輯“異或”指令有以下形式: XRL A, Rn; A(A)(Rn) XRL A, Ri; A(A)(Ri) XRL A, direct; A(A)(direct) XRL A, #data; A(A)data XRL direct, A; (direct)(direct)(A) XRL direct, #data; (direct)(direct)data 該組指令的功能是:將源操作數和目的操作數按對應位進行邏輯“異或”運算,并將結果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。 異或運算的運算規(guī)則是:與“1”異或,本位為非(即求反);與“0”異或,本位不變。,

22、2. 單操作數邏輯運算指令 單操作數邏輯運算指令有以下形式: (1) 累加器A清0指令 CLRA; A0 (2) 累加器A求反指令 CPLA; A() 3. 累加器A循環(huán)移位指令 (1) 累加器A循環(huán)移位指令 累加器A循環(huán)移位指令有以下形式: RL A; A的各位依次左移一位,A.0A.7 RR A; A的各位依次右移一位,A.7A.0 該組指令不影響標志位。 當A的最高位(D7)為0時,執(zhí)行一次RL指令相當于對A進行一次乘2操作。,當A的最低位(D0)為0時,執(zhí)行一次RR指令相當于對A進行一次除2操作。 (2) 帶進位位Cy的累加器A循環(huán)移位指令 帶進位位Cy的累加器A循環(huán)移位指令有以下形式

23、: RLCA; A的各位依次左移一位,CyA.7,A.0Cy RRC A; A的各位依次右移一位,CyA.0,A.7Cy 3.3.4 控制轉移類指令 控制轉移指令共17條,可分為三類:無條件轉移指令、條件轉移指令及子程序調用與返回指令。 1. 無條件轉移指令 不受任何條件限制的轉移指令稱為無條件轉移指令。MCS-51無條件轉移指令有以下類型: (1) 長轉移指令,長轉移指令有以下惟一形式: LJMPaddrl6 ; PC(PC)+2; PCaddr16 該指令功能:把16位地址(addr16)送給PC,從而實現程序轉移。允許轉移的目標地址在整個程序存儲器空間。 (2) 絕對轉移指令 絕對轉移指

24、令有以下惟一形式: AJMPaddr11; PC(PC)+2 ; PC100addr100 ,PC1511不變 該指令功能:把PC當前值(加2修改后的值)的高5位與指令中的11位地址拼接在一起,共同形成16位目標地址送給PC,從而使程序轉移。 (3) 相對轉移指令(亦稱短轉移指令) 相對轉移指令有以下惟一形式: SJMPrel; PC(PC)+2+rel,該指令的功能:根據指令中給出的相對偏移量rel(相對于當前PC=(PC)+2),計算出程序將要轉移的目標地址(PC)+2+rel,把該目標地址送給PC。 (4) 間接長轉移指令(相對長轉移指令) 間接長轉移指令有以下惟一形式: JMPA+DP

25、TR; PC(A)+(DPTR) 該指令也稱散轉指令,其功能是把累加器A中8位無符號數與數據指針DPTR的16位數相加,結果作為下一條指令地址送入PC,指令執(zhí)行后不改變A和DPTR中的內容,也不影響標志位。 2. 條件轉移指令 所謂條件轉移指令是指根據指令中給定的判斷條件決定程序是否轉移。,當條件滿足時,就按指令給定的相對偏移量進行轉移;否則,程序順序執(zhí)行。 MCS-51的條件轉移指令有以下類型: (1) 累加器判零轉移指令 累加器判零轉移指令有以下形式: JZrel JNZrel 這兩條指令均為雙字節(jié)指令,以累加器A的內容是否為0作為轉移的條件。本指令執(zhí)行前,累加器A應有確定的值。 (2)

26、比較不相等轉移指令 比較不相等轉移指令有以下形式: 1) 指令格式為: CJNEA, #data, rel 該指令的功能:若Adata,則PC(PC)+3+rel,且Cy=0(滿足條件相對轉移)。若(A)data,則,PC(PC)+3+rel,且Cy=1(滿足條件相對轉移)。否則,PC(PC)+3且Cy=0(順序執(zhí)行)。 2) 指令格式為: CJNEA,direct, rel 該指令的功能:若(A)(direct),則PC(PC)+3+rel,且Cy=0(滿足條件相對轉移)。若(A)data,則PC(PC)+3+rel,且Cy=0(滿足條件相對轉移)。若(Rn)data,則PC(PC)+3+r

27、el,且Cy=1(滿足條件相對轉移)。否則,PC(PC)+3且Cy=0(順序執(zhí)行)。 4) 指令格式為: CJNERi, data, rel,該指令的功能:若(Ri)data,則PC(PC)+3+rel,且Cy=0(滿足條件相對轉移)。若(Ri)data,則PC(PC)+3+rel,且Cy=1(滿足條件相對轉移)。否則,PC(PC)+3且Cy=0(順序執(zhí)行)。 (3) 減1不為0轉移指令 減1不為0轉移指令有以下形式: DJNZRn,rel DJNZdirect,rel 該組指令中第一條指令為兩字節(jié)指令,第二條指令為三字節(jié)指令。 3. 空操作指令 空操作指令有以下惟一形式: NOP; PC(P

28、C)+1 空操作指令是惟一的一條不使CPU產生任何操作控制的指令,NOP指令的功能是使程序計數器PC加1,在執(zhí)行時間上消耗12個時鐘周期 。,3.3.5 位操作類指令 位操作指令共17條,所有的位操作指令均采用位(直接)尋址方式,在進行位操作時,MCS-51匯編語言中的位地址可用以下四種方式表示: (1) 直接位地址方式。 (2) 點操作符表示方式。 (3) 位名稱方式。 (4) 用戶定義名方式。 1. 位傳送指令 位傳送指令有以下形式: MOVC,bit; Cy(bit) MOVbit,C; (bit)(Cy) 指令中其中一個操作數必須是進位標志C,bit可表示任何直接位地址。,2. 位置位

29、和復位指令 (1) 位置位指令 位置位指令有以下形式: SETBC; Cy1 SETBbit; (bit)1 (2) 位復位指令 位復位指令有以下形式: CLRC; Cy0 CLRbit; (bit)0 采用這類指令可以對布爾累加器C和指定位置1或清零。 3. 位邏輯運算指令 (1) 位邏輯“與”指令 位邏輯“與”指令有以下形式: ANLC, bit; C(C)(bit) ANLC, /bit; C(C)(),該組指令的功能是:進位標志Cy與直接尋址位的布爾值進行位邏輯“與”運算,結果送入Cy。 (2) 位邏輯“或”指令 位邏輯“或”指令有以下形式: ORLC, bit; C(C)(bit)

30、ORLC, /bit; C(C)() 該組指令的功能是:進位標志Cy與直接尋址位的布爾值進行位邏輯“或”運算,結果送入Cy。 (3) 位邏輯“非”指令 位邏輯“非”指令有以下形式: CPLC; Cy() CPLbit;(bit)() 該組指令的功能是:對進位標志Cy或直接尋址位bit的布爾值進行位邏輯“非”運算,結果送入Cy或bit。,4. 位條件轉移指令 (1) 位累加器Cy狀態(tài)判斷轉移指令 位累加器Cy狀態(tài)判斷轉移指令有以下形式: JCrel JNCrel 該組指令通常與CJNE指令一起使用,可以比較出兩個數的大小,從而形成大于、小于、等于三個分支。 (2) 位狀態(tài)判斷轉移指令 位狀態(tài)判斷

31、轉移指令有以下形式: JBbit, rel JNBbit, rel JBCbit, rel 該組指令為三字節(jié)指令。,3.3.6 子程序調用與返回指令 在調用子程序過程中需要解決以下方面的問題: (1) 保護斷點。所謂斷點是指子程序調用指令的下一條指令的第一個字節(jié)地址。 (2) 建立子程序入口。子程序入口是指子程序中第一條指令的第一個字節(jié)地址,即子程序調用指令給出的目標地址。 (3) 保護現場。所謂保護現場是指在執(zhí)行子程序前,需要保存程序中正在使用的存儲單元和寄存器的內容。 MCS-51子程序調用與返回指令有以下形式: 1) 絕對調用指令 ACALLaddrl1 其功能是:首先保護斷點,將PC的

32、值壓棧保護(先壓低位,后壓高位),接著將指令中的11位目標地址(addr11)送入PC的低11位與PC的高5位合成一個程序要轉移的目標地址 。,2) 長調用指令 LCALLaddrl6 其功能是:首先保護斷點,將PC的值壓棧保護(先壓低位,后壓高位),接著將指令中的16位目標地址(addr16)送入PC,即子程序入口地址,從而轉去執(zhí)行被調用的子程序。 3) 一般子程序返回指令 RET 當程序執(zhí)行到本指令時,自動從堆棧中取出斷點地址送給PC,程序返回斷點的下一條指令處,繼續(xù)往下執(zhí)行。 4) 中斷子程序返回指令 RETI 該指令除具有RET指令的功能外,RETI在返回斷點的同時,還要釋放中斷邏輯以

33、接受新的中斷請求。中斷服務程序(中斷子程序)必須用RETI返回。,3.4 匯編語言程序設計基礎 匯編語言是一種采用助記符表示的機器語言 。匯編語言與高級語言相比有以下特點: (1) 在功能相同的條件下,匯編語言生成的目標程序,所占用的存儲單元比較少,而且執(zhí)行的速度也比較快。 (2) 由于單片機應用的許多場合主要是輸入輸出、檢測及控制,而匯編語言具有直接針對輸入輸出端口的操作指令,便于自控系統(tǒng)及檢測系統(tǒng)中數據的采集與發(fā)送。 3.4.1 匯編語言程序的組成 匯編語言語句可分為:指令性語句(即匯編指令)和指示性語句(即偽指令)。 1. 指令性語句 指令性語句(可簡稱指令)是進行匯編語言程序設計的可執(zhí)

34、行語句,每條指令都產生相應的機器語言的目標代碼。,2. 指示性語句 指示性語句(偽指令)又稱匯編控制指令。它是控制匯編(翻譯)過程的一些命令,程序員通過偽指令要求匯編程序在進行匯編時的一些操作。因此,偽指令不產生機器語言的目標代碼,是匯編語言程序中的不可執(zhí)行語句。偽指令主要用于指定源程序存放的起始地址、定義符號、指定暫存數據的存儲區(qū)以及將數據存入存儲器、結束匯編等。 3.4.2 偽指令 MCS-51單片機匯編語言中常用的偽指令如下: 1. ORG(匯編起始地址) 格式:ORG 16位地址 功能:規(guī)定緊跟在該偽指令后的源程序經匯編后產生的目標程序在程序存儲器中存放的起始地址。 2. END(結束

35、匯編) 格式:END或END 標號 功能:匯編語言源程序的結束標志,即通知匯編程序不再繼續(xù)往下匯編。,3. EQU(等值) 格式:標識符 EQU 數或匯編符號 功能:把數或匯編符號賦給標識符,且只能賦值一次。 4. DB(定義字節(jié)) 格式:標號: DB 項或項表 功能:將項或項表中的字節(jié)(8位)數據依次存入標號所指示的存儲單元中。 5. DW(定義字) 格式:標號: DW 項或項表 功能:將項或項表中的字(16位)數據依次存入標號所指示的存儲單元中。 6. DS(定義存儲單元) 格式:標號:DS 數字 功能:從標號所指示的單元開始,根據數字的值保留一定數量的字節(jié)存儲單元,留給以后存儲數據用。,

36、7. BIT(地址符號命令) 格式:標識符 BIT 位地址 功能:將位地址賦以標識符(注意,不是標號)。 3.4.3 程序設計步驟及技術 1. 程序設計步驟 匯編語言程序設計一般經過以下幾個步驟: (1) 分析問題,明確任務要求,對于復雜的問題,還要將要解決的問題抽象成數學模型。 (2) 確定算法,即根據實際問題和指令系統(tǒng)的特點確定完成這一任務需經歷的步驟。 (3) 根據所選擇的算法,確定內存單元的分配;使用哪些存儲器單元;使用哪些寄存器;程序運行中的中間數據及結果存放在哪些單元,以利于提高程序的效率和運行速度。 (4) 根據流程圖,編寫源程序。 (5) 上機對源程序進行匯編、調試。,2. 程

37、序設計技術 3.5 程序設計實例 3.5.1 匯編語言基本程序設計 1. 簡單程序 簡單程序是按照程序編寫的順序逐條依次執(zhí)行的,是程序的最基本的結構。 【例3-39】 將片內RAM的30H和31H的內容相加,結果存入32H。假設整個程序存放在存儲器中以2000H為起始地址的單元。 程序1: ORG 2000H MOV A, 30H ; 取第一個操作數 ADD A, 31H ; 兩個操作數相加 MOV 32H, A ; 存放結果 END 本程序采用直接尋址方式傳送數據進行兩個操作數相加運算。,2. 分支程序 分支程序是根據程序中給定的條件進行判斷,然后根據條件的“真”與“假”決定程序是否轉移。

38、【例3-41】 把片外RAM的首地址為10H開始存放的數據塊,傳送給片內RAM首地址為20H開始的數據塊中去,如果數據為“0”,就停止傳送。 程序如下: ORG 2000H MOV R0, #10H MOV R1, #20H LOOP:MOVX A, R0 ; A片外RAM數據 HERE:JZ HERE ; 數據=0終止,程序原地踏步 MOV R1, A ; 片內RAMA INC R0,INC R1 SJMP LOOP ; 循環(huán)傳送 END 3. 循環(huán)程序 在程序執(zhí)行過程中,當需要多次反復執(zhí)行某段程序時,可采用循環(huán)程序。 循環(huán)程序一般由三部分組成: (1) 初始化。 (2) 循環(huán)體。 (3)

39、循環(huán)控制。 【例3-43】 有20個數存放在內部RAM從41H開始的連續(xù)單元中,試求其和并將結果存放在40H單元(和數是一個8位二進制數,不考慮進位問題)。 程序流程圖如圖3-3所示。 程序如下: ORG2000H,MOV A, #00H; 清累加器A MOV R7, #14H; 建立循環(huán)計數器R7初值 MOV R0, #41H; 建立內存數據指針 LOOP:ADD A, R0; 累加 INCR0; 指向下一個內存單元 DJNZ R7, LOOP ; 修改循環(huán)計數器,判循環(huán)結束條件 MOV 40H, A; 存累加結果于40H SJMP$ END 3.5.2 延時程序設計 【例3-45】 較長時

40、間的延時子程序,可以采用多重循環(huán)來實現。 利用CPU中每執(zhí)行一條指令都有固定的時序這一特征,令其重復執(zhí)行某些指令從而達到延時的目的。,子程序如下: 源程序 機器周期數 DELAY:MOV R7,#0FFH 1 LOOP1:MOV R6,#0FFH 1 LOOP2:NOP 1 NOP 1 DJNZR6,LOOP2 2 DJNZR7,LOOP1 2 RET 2 3.5.3 代碼轉換程序設計 【例3-46】 編寫一子程序,將8位二進制數轉換為BCD碼。 設要轉換的二進制數在累加器A中,子程序的入口地址為BCD1,轉換結果存入R0所指示的RAM中。 程序如下:,BCD1:MOVB, #100 DIVA

41、B ; A百位數,B余數 MOVR0, A ; (R0)百位數 INCR0 MOVA, #10 XCHA, B DIVAB ; A十位數,B個位數 SWAPA ADDA, B ; 十位數和個位數組合到A MOVR0, A ; 存入(R0) RET 3.5.4 查表程序設計 查表是程序設計中使用的基本方法。只要適當地組織表格,就可以十分方便地利用表格進行多種代碼轉換和算術運算等。 【例3-49】 利用表格計算內部RAM的40H單元中一位BCD數的平方值,并將結果存入41H單元。首先組織平方表,且把它作為程序的一部分。,程序如下: ORG 2000H MOV A, 40H MOV DPTR, #S

42、QTAB MOVC A, A+DPTR MOV 41H, A SJMP $ SQTAB:DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 3.5.5 運算程序設計 【例3-50】 編寫一子程序,實現多字節(jié)加法。 兩個多字節(jié)數分別存放在起始地址為FIRST和SECOND的連續(xù)單元中(從低位字節(jié)開始存放),兩個數的字節(jié)數存放在NUMBER單元中,最后求得的和存放在FIRST開始的區(qū)域中。使用MCS-51字節(jié)加法指令進行多字節(jié)的加法運算,可用循環(huán)程序來實現。,SUBAD:MOV R0, #FIRST MOV R1, #SECOND; 置起始地址 MOV R2, NUMBER

43、; 置計數初值 CLRC; 清Cy LOOP:MOV A, R0 ADDCA, R1; 進行一次加法運算 MOV R0, A; 存結果 INCR0 INC R1; 修改地址指針 DJNZR2, LOOP; 計數及循環(huán)控制 RET 3.5.6 排序程序設計 【例3-51】 設N個數據依次存放在內部RAM以BLOCK開始的存儲單元中,編寫程序實現N個數據按升序次序排序,結果仍存放在原存儲單元中。,冒泡排序法的基本算法是:N個數排序,從數據存放單元的一端(如起始單元)開始,將相鄰二個數依次進行比較,如果相鄰兩個數的大小次序和排序要求一致,則不改變它們的存放次序,否則相互交換兩數位置,使其符合排序要求

44、,這樣逐次比較,直至將最?。ń敌颍┗蜃畲螅ㄉ颍┑臄狄浦磷詈?。然后,再將n-1個數繼續(xù)比較,重復上面操作,直至比較完畢。 程序如下: ORG0000H BLOCKEQU 20H ;設BLOCK為20H單元 NEQU 10 MOV R7, #N-1 ;設置外循環(huán)計數器 NEXT: MOV A, R7 MOV 80H, A MOV R6, A ;設置外循環(huán)計數器,MOV R0, #20H ;設置數據指針 COMP:MOV A, R0 MOV R2, A INC R0 CLRC SUBB A, R0 JCLESS MOVA, R2 XCHA, R0 DEC R0 MOVR0, A INC R0 LE

45、SS: DJNZR6,COMP ;(R6)-1不等于0,轉 COMP繼續(xù)內循環(huán),MOVR0,#20H DEC 80H MOV R6, 80h DJNZR7, COMP RET END 3.5.7 輸入輸出程序設計 【例3-52】 編寫一數據輸入程序,每當P0.0由高電平變?yōu)榈碗娖綍r,由P1口讀入1個數據,連續(xù)讀入N次。讀入數據分別存入內部RAM以BLOCK開始的存儲單元中。 程序如下: ORG 0000 BLOCK EQU 20H N EQU 10 MOV R2 , #8H MOV R0, #BLOCK,LOOP: MOV P1, #0FFH JBP0.0 $ MOVA, P1 JNB P0.

46、0 $ MOV R0, A INC R0 DJNZ R2, LOOP RET END 3.5.8 數字濾波程序設計 【例3-54】 限幅濾波子程序可以有效的抑制尖脈沖干擾。 設D1、D2為內部RAM單元,分別存放有某一輸入口在相鄰時刻采樣的兩個數據,如果它們的差值過大,超出了允許相鄰采樣值之差的最大變化范圍M,則認為發(fā)生了干擾,此次輸入數據予以剔除,則用D1單元的數據取代D2。,濾波程序如下: ORG 0000H PT: MOV A, D2 CLR C SUBB A, D1 JNC PT1 CPL A INC A PT1:CJNE A, #M, PT2 AJMP DONE PT2: JC DONE MOV D2, D1 ONE:RET END,本章結束 謝謝使用,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!