歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

單片機(jī)原理及應(yīng)用教程.ppt

  • 資源ID:15043844       資源大小:367.32KB        全文頁(yè)數(shù):54頁(yè)
  • 資源格式: PPT        下載積分:14.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要14.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說(shuō)明有答案則都視為沒有答案,請(qǐng)知曉。

單片機(jī)原理及應(yīng)用教程.ppt

第3章 MCS-51指令系統(tǒng)及匯編語(yǔ)言程序設(shè)計(jì) 3.1 指令系統(tǒng)簡(jiǎn)介 3.2 尋址方式 3.3 指令系統(tǒng) 3.4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ) 3.5 程序設(shè)計(jì)實(shí)例,指令系統(tǒng)是一種CPU所能直接執(zhí)行的所有命令的集合,CPU的主要功能是由它的指令系統(tǒng)來(lái)體現(xiàn)的。 3.1 指令系統(tǒng)簡(jiǎn)介 MCS-51系列單片機(jī)指令系統(tǒng)共有111條指令,其中有49條單字節(jié)指令、45條雙字節(jié)指令和17條三字節(jié)指令。 MCS-51的指令系統(tǒng)中有64條指令的執(zhí)行時(shí)間為一個(gè)機(jī)器周期(12個(gè)振蕩周期),45條指令的執(zhí)行時(shí)間為兩個(gè)機(jī)器周期。 3.1.1 指令格式 MCS-51指令系統(tǒng)中的每一條指令都有兩級(jí)指令格式: CPU可直接識(shí)別并執(zhí)行的機(jī)器語(yǔ)言指令。 匯編語(yǔ)言指令(簡(jiǎn)稱匯編指令)。 機(jī)器語(yǔ)言指令由二進(jìn)制數(shù)“0”和“1”編碼而成,也稱目標(biāo)代碼,執(zhí)行速度最快。,匯編語(yǔ)言指令是在機(jī)器語(yǔ)言指令的基礎(chǔ)上,用英文單詞或英文單詞縮寫表示機(jī)器語(yǔ)言指令的操作碼(助記符),用符號(hào)表示操作數(shù)或操作數(shù)的地址。匯編語(yǔ)言指令實(shí)際上是符號(hào)化的機(jī)器語(yǔ)言。 MCS-51匯編語(yǔ)言指令格式由以下幾個(gè)部分組成: 標(biāo)號(hào): 操作碼 目的操作數(shù) ,源操作數(shù) ;注釋 其中, 中的項(xiàng)表示為可選項(xiàng)。 標(biāo)號(hào):又稱為指令地址符號(hào),一般是由16個(gè)字符組成,以字母開頭的字母數(shù)字串,與操作碼之間用冒號(hào)分開。 操作碼:是由助記符所表示的指令的操作功能。 操作數(shù):是指參加操作的數(shù)據(jù)或數(shù)據(jù)的地址。 注釋:是為該條指令作的說(shuō)明,以便于閱讀。 操作碼是指令的核心,不可缺少,其他幾項(xiàng)根據(jù)不同指令為可選項(xiàng)。,3.1.2 指令分類及符號(hào)說(shuō)明 1. 指令分類 MSC-51的指令系統(tǒng)共有111條指令,分為五大類: (1) 數(shù)據(jù)傳送指令:片內(nèi)RAM、片外RAM、程序存儲(chǔ)器的傳送指令,交換及堆棧指令。 (2) 算術(shù)運(yùn)算類:加法、帶進(jìn)位加、減、乘、除、加1、減1指令。 (3) 邏輯運(yùn)算類:邏輯與、或、異或、測(cè)試及移位指令。 (4) 控制程序轉(zhuǎn)移類:無(wú)條件轉(zhuǎn)移與調(diào)用、條件轉(zhuǎn)移、空操作指令。 (5) 布爾變量操作類:分為位數(shù)據(jù)傳送、位與、位或、位轉(zhuǎn)移指令。 2. 符號(hào)說(shuō)明 #data:表示指令中的8位立即數(shù)(data),“#”表示后面的數(shù)據(jù)是立即數(shù)。 #data16:表示指令中的16位立即數(shù)。 direct:表示位內(nèi)部數(shù)據(jù)存儲(chǔ)器單元的地址。,Rn:n=07,表示當(dāng)前選中的寄存器區(qū)的8個(gè)工作寄存器R0R7。 Ri:i=0或1,表示當(dāng)前選中的寄存器區(qū)中的2個(gè)寄存器R0、R1,可作地址指針即間址寄存器。 Addr11:表示11位的目的地址。 Addr16:表示16位的目的地址。 rel:表示一個(gè)補(bǔ)碼形式的位帶符號(hào)的偏移量。用于SJMP和所有的條件轉(zhuǎn)移指令中。 DPTR:為數(shù)據(jù)指針,可用作16位的地址寄存器。 bit:內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧?/:位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反。 A:累加器ACC。 B:專用寄存器,用于MUL和DIV指令中。 C:進(jìn)位/借位標(biāo)志位,也可作為布爾處理機(jī)中的累加器。 :間址寄存器或基址寄存器的前綴。,$:當(dāng)前指令的首地址。 :表示將箭頭右邊的內(nèi)容傳送至箭頭的左邊。 3.2 尋址方式 所謂尋址方式就是尋找或獲得操作數(shù)的方式。 MCS-51指令系統(tǒng)的尋址方式有以下7種: 1. 立即尋址 在立即尋址方式中,操作數(shù)直接出現(xiàn)在指令中。操作數(shù)前加“#”號(hào)表示,也稱立即數(shù)。指令的操作數(shù)可以是8位或16位數(shù)。 例如: MOV A, #26H ; A26H 指令執(zhí)行結(jié)果:(A)=26H,即把立即數(shù)26H直接送到A中。 2. 直接尋址 在直接尋址方式中,操作數(shù)的單元地址直接出現(xiàn)在指令中,這一尋址方式可進(jìn)行內(nèi)部存儲(chǔ)單元的訪問。它包括:,(1) 特殊功能寄存器地址空間。這也是惟一可尋址特殊功能寄存器(SFR)的尋址方式。 例如:MOV TCON, A 指令執(zhí)行結(jié)果:A的內(nèi)容傳送給寄存器TCON。 (2) 內(nèi)部RAM的低128字節(jié) 例如: MOV A, 76H 指令執(zhí)行結(jié)果:內(nèi)部RAM地址為76H單元的內(nèi)容傳送給A。 3. 寄存器尋址 在寄存器尋址方式中,寄存器中的內(nèi)容就是操作數(shù)。 例如: MOV A, R1; A(R1) 指令執(zhí)行結(jié)果:把寄存器R1中的內(nèi)容送到累加器A中。,4. 寄存器間接尋址 在寄存器間接尋址方式中,指定寄存器中的內(nèi)容是操作數(shù)的地址,該地址對(duì)應(yīng)存儲(chǔ)單元的內(nèi)容才是操作數(shù)。 例如 MOV A, R0 該指令的功能是將R0所指3FH單元中內(nèi)容45H送A中,執(zhí)行結(jié)果:(A)=45H。 16位數(shù)據(jù)指針DPTR作為間址寄存器。 訪問內(nèi)部數(shù)據(jù)存儲(chǔ)器時(shí),用當(dāng)前工作寄存器R0和R1作間址,即R0、R1,在堆棧操作中則用堆棧指針SP作間址。 例如: MOVX A, R1 MOVX DPTR, A,5. 變址尋址 變址尋址方式是以程序指針PC或數(shù)據(jù)指針DPTR為基址寄存器,以累加器A作為變址寄存器,兩者內(nèi)容相加(即基地址+偏移量)形成16位的操作數(shù)地址,變址尋址方式主要用于訪問固化在程序存儲(chǔ)器中的某個(gè)字節(jié)。 變址尋址方式有兩類: (1) 用程序指針PC作基地址,A作變址,形成操作數(shù)地址:A+PC。 (2) 用數(shù)據(jù)指針DPTR作基地址,A作變址,形成操作數(shù)地址:A+DPTR。 6. 相對(duì)尋址 相對(duì)尋址是以程序計(jì)數(shù)器PC的當(dāng)前值作為基地址,與指令中的第二字節(jié)給出的相對(duì)偏移量rel進(jìn)行相加,所得和為程序的轉(zhuǎn)移地址。,7. 位尋址 MCS-51系列單片機(jī)中有獨(dú)立的性能優(yōu)越的布爾處理器,包括位變量操作運(yùn)算器、位累加器和位存儲(chǔ)器,可對(duì)位地址空間的每個(gè)位進(jìn)行位變量傳送、狀態(tài)控制、邏輯運(yùn)算等操作。位地址包括:內(nèi)部RAM地址空間的可進(jìn)行位尋址的128位和SFR地址空間的可位尋址的11個(gè)8位寄存器的88位。位尋址給出的是直接地址。 3.3 指令系統(tǒng) 3.3.1 數(shù)據(jù)傳送類指令 1. 數(shù)據(jù)傳送類指令的特點(diǎn) 數(shù)據(jù)傳送指令是最常用的一類指令,共有29條,可以通過(guò)累加器進(jìn)行數(shù)據(jù)傳送,還可以在數(shù)據(jù)存儲(chǔ)器之間或工作寄存器與數(shù)據(jù)存儲(chǔ)器之間直接進(jìn)行數(shù)據(jù)傳送。 2. 數(shù)據(jù)傳送類指令 (1) 片內(nèi)數(shù)據(jù)傳送指令,1) 以累加器A為目的操作數(shù)的指令有以下形式: MOV A, Rn ; A(Rn) 源操作數(shù)為寄存器尋址 MOV A, Ri; A(Ri) 源操作數(shù)為寄存器間接尋址 MOV A, direct ; A(direct) 源操作數(shù)為直接尋址 MOV A, #data ; Adata 源操作數(shù)為立即尋址 該組指令的功能是把源操作數(shù)傳送給累加器A。 2) 以工作寄存器Rn為目的操作數(shù)的指令有以下形式: MOV Rn, A ; Rn(A) MOV Rn, direct; Rn(direct) MOV Rn, #data; Rndata,3) 以直接地址為目的操作數(shù)的指令有以下形式: MOV direct, A MOV direct, Rn MOV direct, direct MOV direct, Ri MOV direct, #data 4) 以間接地址為目的操作數(shù)的指令: MOV Ri, A MOV Ri, direct MOV Ri, #data 該組指令的功能:把源操作數(shù)所指定的內(nèi)容傳送至以R0或R1為地址指針的片內(nèi)RAM單元中。 5) 16位數(shù)據(jù)傳送指令有以下惟一形式: MOV DPTR, #data16 該指令的功能:把16位立即數(shù)傳送至16位數(shù)據(jù)指針寄存器DPTR。,(2) 片外數(shù)據(jù)存儲(chǔ)器傳送指令 片外數(shù)據(jù)存儲(chǔ)器傳送指令有以下形式: MOVX A, Ri ; A(Ri),為寄存器間接尋址 MOVX A, DPTR ; A(DPTR),為寄存器間接尋址 MOVX R, A ; (Ri)(A) MOVX DPTR, A ; (DPTR)(A) 單片機(jī)內(nèi)部與片外數(shù)據(jù)存儲(chǔ)器是通過(guò)累加器A進(jìn)行數(shù)據(jù)傳送的。 (3) 程序存儲(chǔ)器數(shù)據(jù)傳送指令 程序存儲(chǔ)器數(shù)據(jù)傳送指令有以下兩種形式: MOVC A, A+PC MOVC A, A+DPTR,(4) 數(shù)據(jù)交換指令 數(shù)據(jù)交換指令有以下形式: 1) 字節(jié)交換指令: XCH A, Rn ; A的內(nèi)容與Rn的內(nèi)容交換 XCH A, Ri; A的內(nèi)容與(Ri)的內(nèi)容交換 XCH A, direct ; A的內(nèi)容與(direct)的內(nèi)容交換 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)(direct)(先彈出) ; SP(SP)-1(再指針減1) PUSH指令是入棧(或稱壓?;蜻M(jìn)棧)指令,其功能是先將堆棧指針SP的內(nèi)容加1,然后將直接尋址direct單元中的數(shù)壓入到SP所指示的單元中。 POP是出棧(或稱彈出)指令,其功能是先將堆棧指針SP所指示的單元內(nèi)容彈出到直接尋址direct單元中,然后將SP的內(nèi)容減1,SP始終指向棧頂。 3.3.2 算術(shù)運(yùn)算類指令 1. 算術(shù)運(yùn)算類指令特點(diǎn) 算術(shù)運(yùn)算類指令共有24條,包括加、減、乘、除4種基本的算術(shù)運(yùn)算指令。 該類指令的主要功能: (1) 對(duì)8位無(wú)符號(hào)數(shù)進(jìn)行直接的運(yùn)算。 (2) 借助溢出標(biāo)志對(duì)有符號(hào)的二進(jìn)制整數(shù)進(jìn)行加減運(yùn)算。 (3) 借助進(jìn)位標(biāo)志,可以實(shí)現(xiàn)多字節(jié)的加減運(yùn)算。,(4) 對(duì)壓縮的BCD數(shù)進(jìn)行運(yùn)算(壓縮BCD數(shù),是指在1個(gè)字節(jié)中存放2位BCD數(shù))。 (5) 算術(shù)運(yùn)算指令對(duì)程序狀態(tài)字PSW中的Cy、AC、OV三個(gè)標(biāo)志都有影響,根據(jù)運(yùn)算的結(jié)果可將它們置1或清除。但是加1和減1指令不影響這些標(biāo)志。 算術(shù)運(yùn)算類指令用到的助記符有:ADD、ADDC、SUBB、INC、DEC、DA、MUL和DIV八種 。 2. 加法指令 (1) 不帶進(jìn)位的加法指令 不帶進(jìn)位的加法指令有以下形式: ADD A, #data ; A(A)+data ADD A, direct ; A(A)+(direct) ADD A, Rn ; A(A)+(Rn) ADD A, Ri ; A(A)+(Ri) 這4條指令的功能是完成A中的數(shù)與源操作數(shù)所確定的內(nèi)容按二進(jìn)制運(yùn)算相加,其和送入目的操作數(shù)累加器A中。,(2) 帶進(jìn)位加法指令 帶進(jìn)位加法指令有以下形式: ADDCA, Rn; A(A)+(Rn)+Cy ADDCA, Ri; A(A)+(Ri)+Cy ADDCA, direct; A(A)+(direct)+Cy ADDCA, #data; A(A)+#data+Cy 該組指令的功能:將指令中指出的源操作數(shù)與A的內(nèi)容及進(jìn)位標(biāo)志位Cy的值相加,結(jié)果送A。此類指令常用于多字節(jié)加法算中。 (3) 加1指令 加1指令有以下形式: INCA; A(A)+1 INCRn; Rn(Rn)+1 INCdirect; (direct)(direct)+1,INCRi; (Ri)(Ri)+1 INCDPTR; DPTR(DPTR)+1 該組指令的功能:把操作數(shù)指定的單元或寄存器的內(nèi)容加1。 (4) 十進(jìn)制調(diào)整指令 十進(jìn)制調(diào)整指令有以下惟一形式: DAA; A(A)(BCD碼調(diào)整) 指令的功能:將存放于A中的兩個(gè)BCD碼(十進(jìn)制數(shù))的和進(jìn)行十進(jìn)制調(diào)整,使A中的結(jié)果為正確的BCD碼數(shù)。 3. 減法指令 (1) 帶借位減法指令 帶借位減法指令有以下形式: SUBBA, Rn; A(A)-(Rn)-Cy SUBBA, Ri; A(A)-(Ri)-Cy SUBBA, direct; A(A)-(direct)-Cy SUBBA, #data; A(A)-data-Cy,該組指令的功能:從累加器A中減去源操作數(shù)指定的內(nèi)容和標(biāo)志位Cy,結(jié)果存入累加器A中。 (2) 減1指令 減1指令有以下形式: DEC A; A(A)-1 DEC Rn; Rn(Rn)-1 DEC Ri; (Ri)(Ri)-1 DEC direct; (direct)(direct)-1 該組指令的功能:將操作數(shù)指定的內(nèi)容減1。若操作數(shù)為00H,則減1后下溢為0FFH,不影響標(biāo)志位,只有DEC A影響標(biāo)志位P。 4. 乘法指令 乘法指令有以下惟一形式: MUL AB; AAB低字節(jié),BAB高字節(jié),該指令的功能:把累加器A和寄存器B中的兩個(gè)8位無(wú)符號(hào)數(shù)相乘,乘積又送回A、B內(nèi),A中存放低位字節(jié),B中存放高位字節(jié)。 除法指令有以下惟一形式: DIVAB; A(A)/(B)(商),B(A)/(B)(余數(shù)) 該指令的功能:把A中的8位無(wú)符號(hào)數(shù)除以B中的8位無(wú)符號(hào)數(shù),商存放在A中,余數(shù)存放在B中。Cy和OV均清0。若除數(shù)為0,執(zhí)行該指令后結(jié)果不定,并將OV置1。 3.3.3 邏輯運(yùn)算類指令 邏輯操作指令共24條,所有指令均對(duì)8位二進(jìn)制數(shù)按位進(jìn)行邏輯運(yùn)算。 邏輯運(yùn)算類指令無(wú)進(jìn)位,一般不影響標(biāo)志位。 1. 雙操作數(shù)邏輯運(yùn)算指令 (1) 邏輯“與”指令 邏輯“與”指令有以下形式: ANLA, Rn; 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 該組指令的功能:將源操作數(shù)和目的操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯“與”運(yùn)算,并將結(jié)果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。 與運(yùn)算規(guī)則是:與“0”相與,本位為“0”(即屏蔽);與“1”相與,本位不變。 邏輯“與”指令常用于屏蔽操作數(shù)中的某些位。 (2) 邏輯“或”指令,邏輯“或”指令有以下形式: 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 該組指令的功能:將源操作數(shù)和目的操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯“或”運(yùn)算,并將結(jié)果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。 或運(yùn)算規(guī)則是:與“1”相或,本位為“1”;與“0”相或,本位不變。,(3) 邏輯“異或”指令 邏輯“異或”指令有以下形式: 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 該組指令的功能是:將源操作數(shù)和目的操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯“異或”運(yùn)算,并將結(jié)果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。 異或運(yùn)算的運(yùn)算規(guī)則是:與“1”異或,本位為非(即求反);與“0”異或,本位不變。,2. 單操作數(shù)邏輯運(yùn)算指令 單操作數(shù)邏輯運(yùn)算指令有以下形式: (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 該組指令不影響標(biāo)志位。 當(dāng)A的最高位(D7)為0時(shí),執(zhí)行一次RL指令相當(dāng)于對(duì)A進(jìn)行一次乘2操作。,當(dāng)A的最低位(D0)為0時(shí),執(zhí)行一次RR指令相當(dāng)于對(duì)A進(jìn)行一次除2操作。 (2) 帶進(jìn)位位Cy的累加器A循環(huán)移位指令 帶進(jìn)位位Cy的累加器A循環(huán)移位指令有以下形式: RLCA; A的各位依次左移一位,CyA.7,A.0Cy RRC A; A的各位依次右移一位,CyA.0,A.7Cy 3.3.4 控制轉(zhuǎn)移類指令 控制轉(zhuǎn)移指令共17條,可分為三類:無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令及子程序調(diào)用與返回指令。 1. 無(wú)條件轉(zhuǎn)移指令 不受任何條件限制的轉(zhuǎn)移指令稱為無(wú)條件轉(zhuǎn)移指令。MCS-51無(wú)條件轉(zhuǎn)移指令有以下類型: (1) 長(zhǎng)轉(zhuǎn)移指令,長(zhǎng)轉(zhuǎn)移指令有以下惟一形式: LJMPaddrl6 ; PC(PC)+2; PCaddr16 該指令功能:把16位地址(addr16)送給PC,從而實(shí)現(xiàn)程序轉(zhuǎn)移。允許轉(zhuǎn)移的目標(biāo)地址在整個(gè)程序存儲(chǔ)器空間。 (2) 絕對(duì)轉(zhuǎn)移指令 絕對(duì)轉(zhuǎn)移指令有以下惟一形式: AJMPaddr11; PC(PC)+2 ; PC100addr100 ,PC1511不變 該指令功能:把PC當(dāng)前值(加2修改后的值)的高5位與指令中的11位地址拼接在一起,共同形成16位目標(biāo)地址送給PC,從而使程序轉(zhuǎn)移。 (3) 相對(duì)轉(zhuǎn)移指令(亦稱短轉(zhuǎn)移指令) 相對(duì)轉(zhuǎn)移指令有以下惟一形式: SJMPrel; PC(PC)+2+rel,該指令的功能:根據(jù)指令中給出的相對(duì)偏移量rel(相對(duì)于當(dāng)前PC=(PC)+2),計(jì)算出程序?qū)⒁D(zhuǎn)移的目標(biāo)地址(PC)+2+rel,把該目標(biāo)地址送給PC。 (4) 間接長(zhǎng)轉(zhuǎn)移指令(相對(duì)長(zhǎng)轉(zhuǎn)移指令) 間接長(zhǎng)轉(zhuǎn)移指令有以下惟一形式: JMPA+DPTR; PC(A)+(DPTR) 該指令也稱散轉(zhuǎn)指令,其功能是把累加器A中8位無(wú)符號(hào)數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,結(jié)果作為下一條指令地址送入PC,指令執(zhí)行后不改變A和DPTR中的內(nèi)容,也不影響標(biāo)志位。 2. 條件轉(zhuǎn)移指令 所謂條件轉(zhuǎn)移指令是指根據(jù)指令中給定的判斷條件決定程序是否轉(zhuǎn)移。,當(dāng)條件滿足時(shí),就按指令給定的相對(duì)偏移量進(jìn)行轉(zhuǎn)移;否則,程序順序執(zhí)行。 MCS-51的條件轉(zhuǎn)移指令有以下類型: (1) 累加器判零轉(zhuǎn)移指令 累加器判零轉(zhuǎn)移指令有以下形式: JZrel JNZrel 這兩條指令均為雙字節(jié)指令,以累加器A的內(nèi)容是否為0作為轉(zhuǎn)移的條件。本指令執(zhí)行前,累加器A應(yīng)有確定的值。 (2) 比較不相等轉(zhuǎn)移指令 比較不相等轉(zhuǎn)移指令有以下形式: 1) 指令格式為: CJNEA, #data, rel 該指令的功能:若Adata,則PC(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(A)<data,則,PC(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC(PC)+3且Cy=0(順序執(zhí)行)。 2) 指令格式為: CJNEA,direct, rel 該指令的功能:若(A)(direct),則PC(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(A)data,則PC(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(Rn)<data,則PC(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC(PC)+3且Cy=0(順序執(zhí)行)。 4) 指令格式為: CJNERi, data, rel,該指令的功能:若(Ri)data,則PC(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(Ri)<data,則PC(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC(PC)+3且Cy=0(順序執(zhí)行)。 (3) 減1不為0轉(zhuǎn)移指令 減1不為0轉(zhuǎn)移指令有以下形式: DJNZRn,rel DJNZdirect,rel 該組指令中第一條指令為兩字節(jié)指令,第二條指令為三字節(jié)指令。 3. 空操作指令 空操作指令有以下惟一形式: NOP; PC(PC)+1 空操作指令是惟一的一條不使CPU產(chǎn)生任何操作控制的指令,NOP指令的功能是使程序計(jì)數(shù)器PC加1,在執(zhí)行時(shí)間上消耗12個(gè)時(shí)鐘周期 。,3.3.5 位操作類指令 位操作指令共17條,所有的位操作指令均采用位(直接)尋址方式,在進(jìn)行位操作時(shí),MCS-51匯編語(yǔ)言中的位地址可用以下四種方式表示: (1) 直接位地址方式。 (2) 點(diǎn)操作符表示方式。 (3) 位名稱方式。 (4) 用戶定義名方式。 1. 位傳送指令 位傳送指令有以下形式: MOVC,bit; Cy(bit) MOVbit,C; (bit)(Cy) 指令中其中一個(gè)操作數(shù)必須是進(jìn)位標(biāo)志C,bit可表示任何直接位地址。,2. 位置位和復(fù)位指令 (1) 位置位指令 位置位指令有以下形式: SETBC; Cy1 SETBbit; (bit)1 (2) 位復(fù)位指令 位復(fù)位指令有以下形式: CLRC; Cy0 CLRbit; (bit)0 采用這類指令可以對(duì)布爾累加器C和指定位置1或清零。 3. 位邏輯運(yùn)算指令 (1) 位邏輯“與”指令 位邏輯“與”指令有以下形式: ANLC, bit; C(C)(bit) ANLC, /bit; C(C)(),該組指令的功能是:進(jìn)位標(biāo)志Cy與直接尋址位的布爾值進(jìn)行位邏輯“與”運(yùn)算,結(jié)果送入Cy。 (2) 位邏輯“或”指令 位邏輯“或”指令有以下形式: ORLC, bit; C(C)(bit) ORLC, /bit; C(C)() 該組指令的功能是:進(jìn)位標(biāo)志Cy與直接尋址位的布爾值進(jìn)行位邏輯“或”運(yùn)算,結(jié)果送入Cy。 (3) 位邏輯“非”指令 位邏輯“非”指令有以下形式: CPLC; Cy() CPLbit;(bit)() 該組指令的功能是:對(duì)進(jìn)位標(biāo)志Cy或直接尋址位bit的布爾值進(jìn)行位邏輯“非”運(yùn)算,結(jié)果送入Cy或bit。,4. 位條件轉(zhuǎn)移指令 (1) 位累加器Cy狀態(tài)判斷轉(zhuǎn)移指令 位累加器Cy狀態(tài)判斷轉(zhuǎn)移指令有以下形式: JCrel JNCrel 該組指令通常與CJNE指令一起使用,可以比較出兩個(gè)數(shù)的大小,從而形成大于、小于、等于三個(gè)分支。 (2) 位狀態(tài)判斷轉(zhuǎn)移指令 位狀態(tài)判斷轉(zhuǎn)移指令有以下形式: JBbit, rel JNBbit, rel JBCbit, rel 該組指令為三字節(jié)指令。,3.3.6 子程序調(diào)用與返回指令 在調(diào)用子程序過(guò)程中需要解決以下方面的問題: (1) 保護(hù)斷點(diǎn)。所謂斷點(diǎn)是指子程序調(diào)用指令的下一條指令的第一個(gè)字節(jié)地址。 (2) 建立子程序入口。子程序入口是指子程序中第一條指令的第一個(gè)字節(jié)地址,即子程序調(diào)用指令給出的目標(biāo)地址。 (3) 保護(hù)現(xiàn)場(chǎng)。所謂保護(hù)現(xiàn)場(chǎng)是指在執(zhí)行子程序前,需要保存程序中正在使用的存儲(chǔ)單元和寄存器的內(nèi)容。 MCS-51子程序調(diào)用與返回指令有以下形式: 1) 絕對(duì)調(diào)用指令 ACALLaddrl1 其功能是:首先保護(hù)斷點(diǎn),將PC的值壓棧保護(hù)(先壓低位,后壓高位),接著將指令中的11位目標(biāo)地址(addr11)送入PC的低11位與PC的高5位合成一個(gè)程序要轉(zhuǎn)移的目標(biāo)地址 。,2) 長(zhǎng)調(diào)用指令 LCALLaddrl6 其功能是:首先保護(hù)斷點(diǎn),將PC的值壓棧保護(hù)(先壓低位,后壓高位),接著將指令中的16位目標(biāo)地址(addr16)送入PC,即子程序入口地址,從而轉(zhuǎn)去執(zhí)行被調(diào)用的子程序。 3) 一般子程序返回指令 RET 當(dāng)程序執(zhí)行到本指令時(shí),自動(dòng)從堆棧中取出斷點(diǎn)地址送給PC,程序返回?cái)帱c(diǎn)的下一條指令處,繼續(xù)往下執(zhí)行。 4) 中斷子程序返回指令 RETI 該指令除具有RET指令的功能外,RETI在返回?cái)帱c(diǎn)的同時(shí),還要釋放中斷邏輯以接受新的中斷請(qǐng)求。中斷服務(wù)程序(中斷子程序)必須用RETI返回。,3.4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ) 匯編語(yǔ)言是一種采用助記符表示的機(jī)器語(yǔ)言 。匯編語(yǔ)言與高級(jí)語(yǔ)言相比有以下特點(diǎn): (1) 在功能相同的條件下,匯編語(yǔ)言生成的目標(biāo)程序,所占用的存儲(chǔ)單元比較少,而且執(zhí)行的速度也比較快。 (2) 由于單片機(jī)應(yīng)用的許多場(chǎng)合主要是輸入輸出、檢測(cè)及控制,而匯編語(yǔ)言具有直接針對(duì)輸入輸出端口的操作指令,便于自控系統(tǒng)及檢測(cè)系統(tǒng)中數(shù)據(jù)的采集與發(fā)送。 3.4.1 匯編語(yǔ)言程序的組成 匯編語(yǔ)言語(yǔ)句可分為:指令性語(yǔ)句(即匯編指令)和指示性語(yǔ)句(即偽指令)。 1. 指令性語(yǔ)句 指令性語(yǔ)句(可簡(jiǎn)稱指令)是進(jìn)行匯編語(yǔ)言程序設(shè)計(jì)的可執(zhí)行語(yǔ)句,每條指令都產(chǎn)生相應(yīng)的機(jī)器語(yǔ)言的目標(biāo)代碼。,2. 指示性語(yǔ)句 指示性語(yǔ)句(偽指令)又稱匯編控制指令。它是控制匯編(翻譯)過(guò)程的一些命令,程序員通過(guò)偽指令要求匯編程序在進(jìn)行匯編時(shí)的一些操作。因此,偽指令不產(chǎn)生機(jī)器語(yǔ)言的目標(biāo)代碼,是匯編語(yǔ)言程序中的不可執(zhí)行語(yǔ)句。偽指令主要用于指定源程序存放的起始地址、定義符號(hào)、指定暫存數(shù)據(jù)的存儲(chǔ)區(qū)以及將數(shù)據(jù)存入存儲(chǔ)器、結(jié)束匯編等。 3.4.2 偽指令 MCS-51單片機(jī)匯編語(yǔ)言中常用的偽指令如下: 1. ORG(匯編起始地址) 格式:ORG 16位地址 功能:規(guī)定緊跟在該偽指令后的源程序經(jīng)匯編后產(chǎn)生的目標(biāo)程序在程序存儲(chǔ)器中存放的起始地址。 2. END(結(jié)束匯編) 格式:END或END 標(biāo)號(hào) 功能:匯編語(yǔ)言源程序的結(jié)束標(biāo)志,即通知匯編程序不再繼續(xù)往下匯編。,3. EQU(等值) 格式:標(biāo)識(shí)符 EQU 數(shù)或匯編符號(hào) 功能:把數(shù)或匯編符號(hào)賦給標(biāo)識(shí)符,且只能賦值一次。 4. DB(定義字節(jié)) 格式:標(biāo)號(hào): DB 項(xiàng)或項(xiàng)表 功能:將項(xiàng)或項(xiàng)表中的字節(jié)(8位)數(shù)據(jù)依次存入標(biāo)號(hào)所指示的存儲(chǔ)單元中。 5. DW(定義字) 格式:標(biāo)號(hào): DW 項(xiàng)或項(xiàng)表 功能:將項(xiàng)或項(xiàng)表中的字(16位)數(shù)據(jù)依次存入標(biāo)號(hào)所指示的存儲(chǔ)單元中。 6. DS(定義存儲(chǔ)單元) 格式:標(biāo)號(hào):DS 數(shù)字 功能:從標(biāo)號(hào)所指示的單元開始,根據(jù)數(shù)字的值保留一定數(shù)量的字節(jié)存儲(chǔ)單元,留給以后存儲(chǔ)數(shù)據(jù)用。,7. BIT(地址符號(hào)命令) 格式:標(biāo)識(shí)符 BIT 位地址 功能:將位地址賦以標(biāo)識(shí)符(注意,不是標(biāo)號(hào))。 3.4.3 程序設(shè)計(jì)步驟及技術(shù) 1. 程序設(shè)計(jì)步驟 匯編語(yǔ)言程序設(shè)計(jì)一般經(jīng)過(guò)以下幾個(gè)步驟: (1) 分析問題,明確任務(wù)要求,對(duì)于復(fù)雜的問題,還要將要解決的問題抽象成數(shù)學(xué)模型。 (2) 確定算法,即根據(jù)實(shí)際問題和指令系統(tǒng)的特點(diǎn)確定完成這一任務(wù)需經(jīng)歷的步驟。 (3) 根據(jù)所選擇的算法,確定內(nèi)存單元的分配;使用哪些存儲(chǔ)器單元;使用哪些寄存器;程序運(yùn)行中的中間數(shù)據(jù)及結(jié)果存放在哪些單元,以利于提高程序的效率和運(yùn)行速度。 (4) 根據(jù)流程圖,編寫源程序。 (5) 上機(jī)對(duì)源程序進(jìn)行匯編、調(diào)試。,2. 程序設(shè)計(jì)技術(shù) 3.5 程序設(shè)計(jì)實(shí)例 3.5.1 匯編語(yǔ)言基本程序設(shè)計(jì) 1. 簡(jiǎn)單程序 簡(jiǎn)單程序是按照程序編寫的順序逐條依次執(zhí)行的,是程序的最基本的結(jié)構(gòu)。 【例3-39】 將片內(nèi)RAM的30H和31H的內(nèi)容相加,結(jié)果存入32H。假設(shè)整個(gè)程序存放在存儲(chǔ)器中以2000H為起始地址的單元。 程序1: ORG 2000H MOV A, 30H ; 取第一個(gè)操作數(shù) ADD A, 31H ; 兩個(gè)操作數(shù)相加 MOV 32H, A ; 存放結(jié)果 END 本程序采用直接尋址方式傳送數(shù)據(jù)進(jìn)行兩個(gè)操作數(shù)相加運(yùn)算。,2. 分支程序 分支程序是根據(jù)程序中給定的條件進(jìn)行判斷,然后根據(jù)條件的“真”與“假”決定程序是否轉(zhuǎn)移。 【例3-41】 把片外RAM的首地址為10H開始存放的數(shù)據(jù)塊,傳送給片內(nèi)RAM首地址為20H開始的數(shù)據(jù)塊中去,如果數(shù)據(jù)為“0”,就停止傳送。 程序如下: ORG 2000H MOV R0, #10H MOV R1, #20H LOOP:MOVX A, R0 ; A片外RAM數(shù)據(jù) HERE:JZ HERE ; 數(shù)據(jù)=0終止,程序原地踏步 MOV R1, A ; 片內(nèi)RAMA INC R0,INC R1 SJMP LOOP ; 循環(huán)傳送 END 3. 循環(huán)程序 在程序執(zhí)行過(guò)程中,當(dāng)需要多次反復(fù)執(zhí)行某段程序時(shí),可采用循環(huán)程序。 循環(huán)程序一般由三部分組成: (1) 初始化。 (2) 循環(huán)體。 (3) 循環(huán)控制。 【例3-43】 有20個(gè)數(shù)存放在內(nèi)部RAM從41H開始的連續(xù)單元中,試求其和并將結(jié)果存放在40H單元(和數(shù)是一個(gè)8位二進(jìn)制數(shù),不考慮進(jìn)位問題)。 程序流程圖如圖3-3所示。 程序如下: ORG2000H,MOV A, #00H; 清累加器A MOV R7, #14H; 建立循環(huán)計(jì)數(shù)器R7初值 MOV R0, #41H; 建立內(nèi)存數(shù)據(jù)指針 LOOP:ADD A, R0; 累加 INCR0; 指向下一個(gè)內(nèi)存單元 DJNZ R7, LOOP ; 修改循環(huán)計(jì)數(shù)器,判循環(huán)結(jié)束條件 MOV 40H, A; 存累加結(jié)果于40H SJMP$ END 3.5.2 延時(shí)程序設(shè)計(jì) 【例3-45】 較長(zhǎng)時(shí)間的延時(shí)子程序,可以采用多重循環(huán)來(lái)實(shí)現(xiàn)。 利用CPU中每執(zhí)行一條指令都有固定的時(shí)序這一特征,令其重復(fù)執(zhí)行某些指令從而達(dá)到延時(shí)的目的。,子程序如下: 源程序 機(jī)器周期數(shù) 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 代碼轉(zhuǎn)換程序設(shè)計(jì) 【例3-46】 編寫一子程序,將8位二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼。 設(shè)要轉(zhuǎn)換的二進(jìn)制數(shù)在累加器A中,子程序的入口地址為BCD1,轉(zhuǎn)換結(jié)果存入R0所指示的RAM中。 程序如下:,BCD1:MOVB, #100 DIVAB ; A百位數(shù),B余數(shù) MOVR0, A ; (R0)百位數(shù) INCR0 MOVA, #10 XCHA, B DIVAB ; A十位數(shù),B個(gè)位數(shù) SWAPA ADDA, B ; 十位數(shù)和個(gè)位數(shù)組合到A MOVR0, A ; 存入(R0) RET 3.5.4 查表程序設(shè)計(jì) 查表是程序設(shè)計(jì)中使用的基本方法。只要適當(dāng)?shù)亟M織表格,就可以十分方便地利用表格進(jìn)行多種代碼轉(zhuǎn)換和算術(shù)運(yùn)算等。 【例3-49】 利用表格計(jì)算內(nèi)部RAM的40H單元中一位BCD數(shù)的平方值,并將結(jié)果存入41H單元。首先組織平方表,且把它作為程序的一部分。,程序如下: ORG 2000H MOV A, 40H MOV DPTR, #SQTAB MOVC A, A+DPTR MOV 41H, A SJMP $ SQTAB:DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 3.5.5 運(yùn)算程序設(shè)計(jì) 【例3-50】 編寫一子程序,實(shí)現(xiàn)多字節(jié)加法。 兩個(gè)多字節(jié)數(shù)分別存放在起始地址為FIRST和SECOND的連續(xù)單元中(從低位字節(jié)開始存放),兩個(gè)數(shù)的字節(jié)數(shù)存放在NUMBER單元中,最后求得的和存放在FIRST開始的區(qū)域中。使用MCS-51字節(jié)加法指令進(jìn)行多字節(jié)的加法運(yùn)算,可用循環(huán)程序來(lái)實(shí)現(xiàn)。,SUBAD:MOV R0, #FIRST MOV R1, #SECOND; 置起始地址 MOV R2, NUMBER; 置計(jì)數(shù)初值 CLRC; 清Cy LOOP:MOV A, R0 ADDCA, R1; 進(jìn)行一次加法運(yùn)算 MOV R0, A; 存結(jié)果 INCR0 INC R1; 修改地址指針 DJNZR2, LOOP; 計(jì)數(shù)及循環(huán)控制 RET 3.5.6 排序程序設(shè)計(jì) 【例3-51】 設(shè)N個(gè)數(shù)據(jù)依次存放在內(nèi)部RAM以BLOCK開始的存儲(chǔ)單元中,編寫程序?qū)崿F(xiàn)N個(gè)數(shù)據(jù)按升序次序排序,結(jié)果仍存放在原存儲(chǔ)單元中。,冒泡排序法的基本算法是:N個(gè)數(shù)排序,從數(shù)據(jù)存放單元的一端(如起始單元)開始,將相鄰二個(gè)數(shù)依次進(jìn)行比較,如果相鄰兩個(gè)數(shù)的大小次序和排序要求一致,則不改變它們的存放次序,否則相互交換兩數(shù)位置,使其符合排序要求,這樣逐次比較,直至將最?。ń敌颍┗蜃畲螅ㄉ颍┑臄?shù)移至最后。然后,再將n-1個(gè)數(shù)繼續(xù)比較,重復(fù)上面操作,直至比較完畢。 程序如下: ORG0000H BLOCKEQU 20H ;設(shè)BLOCK為20H單元 NEQU 10 MOV R7, #N-1 ;設(shè)置外循環(huán)計(jì)數(shù)器 NEXT: MOV A, R7 MOV 80H, A MOV R6, A ;設(shè)置外循環(huán)計(jì)數(shù)器,MOV R0, #20H ;設(shè)置數(shù)據(jù)指針 COMP:MOV A, R0 MOV R2, A INC R0 CLRC SUBB A, R0 JCLESS MOVA, R2 XCHA, R0 DEC R0 MOVR0, A INC R0 LESS: DJNZR6,COMP ;(R6)-1不等于0,轉(zhuǎn) COMP繼續(xù)內(nèi)循環(huán),MOVR0,#20H DEC 80H MOV R6, 80h DJNZR7, COMP RET END 3.5.7 輸入輸出程序設(shè)計(jì) 【例3-52】 編寫一數(shù)據(jù)輸入程序,每當(dāng)P0.0由高電平變?yōu)榈碗娖綍r(shí),由P1口讀入1個(gè)數(shù)據(jù),連續(xù)讀入N次。讀入數(shù)據(jù)分別存入內(nèi)部RAM以BLOCK開始的存儲(chǔ)單元中。 程序如下: ORG 0000 BLOCK EQU 20H N EQU 10 MOV R2 , #8H MOV R0, #BLOCK,LOOP: MOV P1, #0FFH JBP0.0 $ MOVA, P1 JNB P0.0 $ MOV R0, A INC R0 DJNZ R2, LOOP RET END 3.5.8 數(shù)字濾波程序設(shè)計(jì) 【例3-54】 限幅濾波子程序可以有效的抑制尖脈沖干擾。 設(shè)D1、D2為內(nèi)部RAM單元,分別存放有某一輸入口在相鄰時(shí)刻采樣的兩個(gè)數(shù)據(jù),如果它們的差值過(guò)大,超出了允許相鄰采樣值之差的最大變化范圍M,則認(rèn)為發(fā)生了干擾,此次輸入數(shù)據(jù)予以剔除,則用D1單元的數(shù)據(jù)取代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,本章結(jié)束 謝謝使用,

注意事項(xiàng)

本文(單片機(jī)原理及應(yīng)用教程.ppt)為本站會(huì)員(w****2)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


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