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

《單片機原理及應(yīng)用》2010-第4章.ppt

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

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

《單片機原理及應(yīng)用》2010-第4章.ppt

單片機原理及應(yīng)用,佘勇電子基礎(chǔ)教學(xué)實驗中心課件密碼:kys2006Tel:13980905197Email:sy辦公室:科教樓110,第四章MCS-51單片機的指令系統(tǒng)與匯編程序設(shè)計,上章內(nèi)容小結(jié),51單片機基本特點51單片機存儲器組織程序存儲器片內(nèi)ROM和片外ROM擴展(EA引腳作用)PC與中斷向量數(shù)據(jù)存儲器片內(nèi)RAM:工作寄存器、位尋址區(qū)、用戶RAM(堆棧)SFR片外RAM擴展時序與復(fù)位節(jié)拍、狀態(tài)、機器周期和指令周期的概念單片機復(fù)位,MCS-51內(nèi)部RAM配置,直接尋址,內(nèi)部數(shù)據(jù)存儲器配置圖(總結(jié)),地址重疊,256B,384B,間接尋址,僅52系列有,本章內(nèi)容,本節(jié)課需掌握指令的基本概念操作數(shù)尋址方式51單片機的指令系統(tǒng)偽指令匯編語言程序設(shè)計重點操作數(shù)尋址方式51單片機的指令系統(tǒng)匯編語言程序設(shè)計,指令、指令系統(tǒng)和程序指令是CPU能執(zhí)行的一個基本操作。如:取數(shù)、加、減、乘、除、存數(shù)等指令系統(tǒng)是CPU所能執(zhí)行的全部指令的集合。不同的CPU,其指令系統(tǒng)不同。程序用戶編寫的完成特定任務(wù)的指令的有序集合。,4.1指令概述,程序設(shè)計語言,指令助記符指令編碼是二進制編碼,記憶起來有些困難,可用與指令含義接近的英文單詞或縮寫來代替指令的二進制編碼程序設(shè)計語言機器語言:二進制指令代碼程序設(shè)計語言,形成目標程序計算機唯一可以直接識別的語言二進制的表達形式,編程困難高級語言和匯編語言程序(源程序)必須轉(zhuǎn)換成機器語言目標代碼(目標程序)才能被計算機執(zhí)行,高級語言:面向過程和對象的程序設(shè)計語言語句功能強,編程速度快需要編譯程序或解釋程序翻譯成機器代碼不太適用于微型計算機系統(tǒng)匯編語言:用助記符代替二進制指令代碼的程序語言每條語句與一個具體的操作或指令對應(yīng)編寫的程序需要匯編成機器代碼運行程序代碼短,運行效率高,但編程復(fù)雜非常適合計算機原理的學(xué)習(xí),匯編語言指令格式,MCS-51單片機指令格式標號:操作碼操作數(shù);注釋,18個字母、數(shù)字、下劃線,字母開頭,13個,多個操作數(shù)之間用“,”分隔,介紹描述指令符號的意義,(Ri),由Ri尋址的單元中的內(nèi)容,Ri,(DPTR),由DPTR尋址的單元中的內(nèi)容,DPTR,(direct),由direct尋址的單元中的內(nèi)容,直接尋址,(Rn),Rn中的內(nèi)容,4.2尋址方式,MCS-51單片機指令格式標號:操作碼操作數(shù);注釋定位操作數(shù)所在存儲位置的方式叫尋址方式寄存器尋址直接尋址立即尋址寄存器間接尋址變址尋址(基址寄存器加變址寄存器間接尋址)相對尋址位尋址,寄存器尋址方式,操作數(shù)位置出現(xiàn)的是工作寄存器名,操作數(shù)存放在工作寄存器中,MOVA,R1,30H,30H,MOVB,A,3FH,3FH,INCB,3FH,40H,直接尋址方式,出現(xiàn)在操作數(shù)位置不是操作數(shù)本身,而是操作數(shù)所在的存儲單元的地址可用于轉(zhuǎn)移或調(diào)用指令的目標地址尋址,以“addr16”或“addr11”的形式出現(xiàn)可用于RAM存儲單元的尋址,以“direct”的形式出現(xiàn),MOVA,30H,;A(30H),24H,立即尋址方式,指令的操作數(shù)存放在程序存儲器中,緊跟在操作碼的后面,前綴指示符“#”,MOVA,#30H,;A#30H,30H,直接尋址與立即尋址的區(qū)別,MOVA,30H,;A(30H),MOVA,#30H,;A#30H,寄存器間接尋址方式,出現(xiàn)在操作數(shù)位置的寄存器的內(nèi)容不是操作數(shù)本身,而是操作數(shù)所在的存儲單元的地址,以“寄存器名”形式表示R0、R1可用于片內(nèi)RAM和片外RAM低256字節(jié)的間接尋址(MOVA,Ri或MOVXA,Ri),DPTR可用于片外RAM整個64K字節(jié)空間的間接尋址(MOVXA,DPTR),MOVA,R0,;A(R0),24H,寄存器尋址與寄存器間接尋址區(qū)別,MOVA,R1,30H,30H,MOVA,R1,;A(R1),設(shè)R1=30H,MOVCA,A+DPTR,變址尋址,以累加器A為變址寄存器,以程序計數(shù)器PC或數(shù)據(jù)指針DPTR為基址寄存器,以二者之和作為程序存儲器單元地址,取出其中的數(shù)據(jù)作為操作數(shù),;A(A)+(DPTR),02H,2002H,82H,相對尋址,相對尋址用于訪問程序存儲器,在相對轉(zhuǎn)移指令后作為轉(zhuǎn)移的地址偏移,以“rel”形式表示“rel”是8位補碼,范圍“-128+127”轉(zhuǎn)移的目標地址為轉(zhuǎn)移指令的下一條指令(PC)+rel,JNZrel,例:,;累加器A不等零則轉(zhuǎn)移設(shè):rel=23H,(PC)=2002H,rel=23H,修正后轉(zhuǎn)移目標地址D(PC)=2025H,(PC)=2002H,Rel=23H,),0,0,5,2,0,2,H,D=,尋址空間:,片內(nèi)RAM的地址為20H2FH字節(jié)單元共128位位地址表現(xiàn)形式:1、位地址00H7FH2、字節(jié)地址.位序號,SFR中12個能被8整除的字節(jié)地址位地址請參看P52表2.6SFR中的可尋址位的三種形式:1、位地址:如80H、81H2、位地址名:如C、OV、AC3、SFR名.位序號:如P1.0、P0.5,對內(nèi)部RAM、SFR的位地址空間進行訪問,稱為位尋址,位地址用于布爾指令。,共221位,位尋址,關(guān)于累加器A在指令中的形式,累加器A在指令中的表現(xiàn)形式1、以累加器A形式出現(xiàn)A是指令編碼的一部分,不占用獨立字節(jié)例:MOVA,Ri指令編碼:E8EF2、以direct地址形式(SFR地址)出現(xiàn)ACC或字節(jié)地址例:PUSHACC指令編碼:C0E0,4.3MCS-51指令系統(tǒng),MCS-51指令系統(tǒng)有111條指令,按操作功能分類,算術(shù)操作指令24條,邏輯操作指令24條,程序轉(zhuǎn)移指令17條,數(shù)據(jù)傳送指令29條,位操作指令17條,按指令長度分類,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條,按指令周期分類,單周期指令64條,雙周期指令45條,四周期指令2條,1s,2s,4s,設(shè)時鐘頻率為12MHz,則按指令執(zhí)行的時間分:,4.3.1數(shù)據(jù)傳送類指令,數(shù)據(jù)傳送類指令的種類(29條)片內(nèi)RAM傳送指令:MOV片外RAM傳送指令:MOVXROM傳送(查表傳送):MOVC累加器交換指令:XCH、XCHD、SWAP堆棧操作指令:進棧指令:PUSH出棧指令:POP對標志位的影響影響累加器A內(nèi)容的傳送指令影響奇偶標志P,其它標志位不受影響,傳送類指令操作示意圖,累加器A,Rn工作寄存器,Ri片內(nèi)RAM單元,direct,Ri、DPTR片外RAM單元,A+PCA+DPTRROM單元,堆棧,#data,PUSH,POP,MOVC,MOVX,MOV,XCH,MOV,XCH、XCHD,MOV,XCH,MOV,MOV,MOV,MOV,MOV,MOV,MOV,DPTR,MOV,寄存器間接尋址,寄存器尋址,立即尋址,寄存器間接尋址,變址尋址:基址寄存器加變址寄存器,應(yīng)用實例,直接尋址,以累加器A為一方的傳送指令,累加器A,Rn工作寄存器,Ri片內(nèi)RAM單元,direct,Ri、DPTR片外RAM單元,A+PCA+DPTRROM單元,#data,MOVC,MOVX,MOV,XCH,MOV,XCH、XCHD,MOV,XCH,MOV,MOVdirect,AMOVA,directXCHA,direct,MOVRi,AMOVA,RiXCHA,Ri低半字節(jié)交換XCHDA,Ri,MOVRn,AMOVA,RnXCHA,Rn,MOVA,#data,MOVCA,A+PCMOVCA,A+DPTR,MOVXRi,AMOVXA,RiMOVXDPTR,AMOVXA,DPTR,變址尋址,寄存器間接尋址,立即尋址,寄存器尋址,寄存器間接尋址,直接尋址,SWAPA,以direct單元為一方的傳送指令,Rn工作寄存器,Ri片內(nèi)RAM單元,direct,堆棧,PUSH,POP,MOV,MOV,MOV,寄存器間接尋址,寄存器尋址,直接尋址,MOVRn,directMOVdirect,Rn,MOVRi,directMOVdirect,Ri,MOVdirect,direct,PUSHdirect(SP)(SP)1(SP)(direct),POPdirect(direct)(SP)(SP)(SP)-1,例:PUSHACCPUSH30HPOP40HPOPB,立即數(shù)傳送指令,累加器A,Rn工作寄存器,Ri片內(nèi)RAM單元,direct,#data,MOV,MOV,MOV,MOV,DPTR,MOV,寄存器間接尋址,寄存器尋址,立即尋址,直接尋址,MOVDPTR,#data16例:MOVDPTR,#2000H,MOVRn,#data例:MOVR0,#2FH,MOVRi,#data例:MOVR1,#2FH,MOVdirect,#data例:MOV30H,#2FH,MOVA,#data例:MOVA,#2FH,傳送類指令實例1,立即數(shù)送至累加器MOVA,#20H;A#20H累加器與工作寄存器R0R7之間的傳送MOVR1,#20HMOVA,R1MOVR0,A;R0#20H累加器與Ri間接尋址的片內(nèi)RAM單元之間的傳送MOVA,#2FHMOVR0,#30HMOVR1,#40HMOVR0,A;(30H)#2FHMOVA,R1;A(40H)XCHA,R0;A(30H),傳送類指令實例2,累加器與direct直接尋址的片內(nèi)RAM單元之間的傳送MOVA,20H;A(20H)MOVP1,A;P1AXCHA,30H;30HA累加器與片外RAM單元之間的傳送MOVR1,#20HMOVDPTR,#2000HMOVXA,R1MOVXDPTR,A;2000H(0020H)累加器與ROM單元之間的傳送(查表指令)MOVDPTR,#2000HMOVCA,A+DPTRMOVCA,A+PC,傳送類指令實例3,工作寄存器與direct直接尋址的片內(nèi)RAM單元之間的傳送MOVR1,20H;R1(20H)MOV2FH,R1;2FH(R1)direct直接尋址的片內(nèi)RAM單元與Rj間接尋址的片內(nèi)RAM單元之間的傳送MOVR1,#20HMOV30H,R1;30H(20H)MOVR1,40H;20H(40H)direct直接尋址的片內(nèi)RAM單元之間的傳送MOV30H,40H;30H(40H),MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,12HMOVR1,#12HMOVA,R0MOV34H,R1MOV45H,34HMOVDPTR,#6712HMOV12H,DPHMOVR0,DPLMOVA,R0,;(23H)=30H;(12H)=34H;R0=23H,;R7=34H;R1=12H;A=30H,;(34H)=34H;(45H)=34H;DPTR=6712H,;(12H)=67H;R0=12H;A=67H,傳送類指令綜合實例,30H,34H,23H,34H,12H,34H,34H,67H,12H,67H,12H,4.3.2算術(shù)操作類指令,算術(shù)操作類指令的種類(24條)加法指令:ADD、ADDC減法指令:SUBB加1指令:INC減1指令:DEC十進制調(diào)整指令:DA乘法指令:MUL除法指令:DIV,加法指令,不帶進位的加法指令A(yù)DDA,Rn;A(A)+(Rn)ADDA,Ri;A(A)+(Ri)ADDA,direct;A(A)+(direct)ADDA,#data;A(A)+data帶進位的加法指令A(yù)DDCA,Rn;A(A)+(Rn)+(Cy)ADDCA,Ri;A(A)+(Ri)+(Cy)ADDCA,direct;A(A)+(direct)+(Cy)ADDCA,#data;A(A)+data+(Cy)加法指令影響PSW中的Cy、OV、AC、P,加法實例,MOVA,#-1;A#0FFHADDA,#255;A(A)+#0FFHMOVR0,#0;R0#0ADDCA,R0;A(A)+(R0)+(Cy),OVCyA11111111+111111110111111110ADD二進制結(jié)果00000000+10011111111ADDC二進制結(jié)果,對編程者來說,可以把這兩個數(shù)的當作無符號數(shù),也可以當作帶符號數(shù),減法指令,帶借位的減加法指令SUBBA,Rn;A(A)-(Rn)-(Cy)SUBBA,Ri;A(A)-(Ri)-(Cy)SUBBA,direct;A(A)-(direct)-(Cy)SUBBA,#data;A(A)-data-(Cy)減法指令沒有不減進位位的指令,所以必須注意,在減法指令之前應(yīng)清除進位位減法指令影響PSW中的Cy、OV、AC、P,減法實例,CLRC;Cy0MOVA,#52H;A#52HMOVR0,#0B4H;R0#0B4HSUBBA,R0;AA-R0-Cy,OVCyA001010010-1011010010010110-01110010110SUBB二進制結(jié)果,0B4H當作無符號數(shù)180,也可以當作帶符號數(shù)-76,加1減1指令,加1指令I(lǐng)NCA;A(A)+1INCRn;Rn(Rn)+1INCRi;(Ri)(Ri)+1INCdirect;direct(direct)+1,用于端口操作時“讀-改-寫”INCDPTR;DPTRDPTR+1減1指令DECA;A(A)-1DECRn;Rn(Rn)-1DECRi;(Ri)(Ri)-1DECdirect;direct(direct)-1,用于端口操作時“讀-改-寫”加1減1指令不影響PSW中的標志位,16位無符號數(shù)加法實例,設(shè)在片內(nèi)RAM地址為30H和40H處存放著2個16位無符號數(shù)(低位在前),編程求兩者之和,存放于R3、R4中,16位無符號數(shù)加法實例流程圖,2個間接尋址寄存器(地址指針)指向操作數(shù)低8位,取加數(shù)低8位至累加器,低8位加法,結(jié)果存儲,調(diào)整間址寄存器,指向操作數(shù)高8位,取加數(shù)高8位至累加器,高8位加法,結(jié)果存儲,MOVR0,#M1;R0#M1,R1#M2,間接MOVR1,#M2;尋址寄存器(地址指針)初始化MOVA,R0;取第1個數(shù)第8位ADDA,R1;低8位相加MOVR4,A;R4低8位和INCR0;調(diào)整地址指針,指向高8位INCR1;MOVA,R0;ADDCA,R1;高8位相加MOVR3,A;R4高8位和,累加器十進制調(diào)整指令DA,ALU完成壓縮BCD碼(每字節(jié)兩位十進制數(shù)碼)運算后,累加器中的運算結(jié)果并不是十進制結(jié)果,必須用DA指令調(diào)整成十進制結(jié)果指令格式:DAA調(diào)整方法:DA指令一般跟在加法指令的后面,利用加法指令對標志位C、AC影響以及累加器A內(nèi)容完成十進制調(diào)整如果低半字節(jié)9或AC=1,則低半字節(jié)加6如果高半字節(jié)9或C=1,則高半字節(jié)加6DA指令影響進位位C(只置位,不復(fù)位),不影響OV位,十進制調(diào)整指令實例,MOVR1,#92H;R1#92HMOVA,#73H;A#73HADDA,R1;A=05H,AC=0,C=1DAA;A=65H,C=1,CA10010010壓縮BCD碼92+01110011壓縮BCD碼73100000101二進制結(jié)果01100000十進制調(diào)整101100101十進制結(jié)果163,乘法指令,乘法指令格式:MULAB執(zhí)行時間:4個機器周期操作:累加器A和寄存器B中的兩個數(shù)相乘,乘積的高8位在B中,低8位在A中對標志位的影響:Cy=0;當乘積255時,OV=1,否則,OV=0,除法指令,除法指令格式:DIVAB執(zhí)行時間:4個機器周期操作:累加器A中的被除數(shù)除以寄存器B中的除數(shù),除得的商在A中,余數(shù)在B中對標志位的影響:一般情況下,Cy=0,OV=0;當除數(shù)為0時,OV=1,乘法實例,設(shè)在片內(nèi)RAM地址為M1處存放著一個16位無符號數(shù)(低位在前),在M2處存放著一個8位無符號數(shù),編程求兩者之積,存放于R2、R3、R4中,乘法實例,(M1+1)(M1)(M2)R3R4BAR2R3R4,MOVR0,#M1MOVA,R0MOVB,M2MULABMOVR4,AMOVR3,BINCR0MOVA,R0MOVB,M2MULAB,;R0#M1,指向被乘數(shù)低8位,;A被乘數(shù)低8位(M1),;B乘數(shù)(M2),;(M1)(M2),;R4乘積低8位,;R3乘積高8位,暫存,;指向被乘數(shù)高8位,;A被乘數(shù)高8位(M1+1),;B乘數(shù)(M2),;(M1+1)(M2),ADDA,R3MOVR3,AMOVA,BADDCA,#00HMOVR2,A,;乘積第2字節(jié)相加,;R3乘積第2字節(jié),;A乘積第3字節(jié),;加進位位Cy,;R2乘積第3字節(jié),4.3.3邏輯操作類指令,邏輯操作類指令的種類(24條,按位運算)與指令:ANL或指令:ORL異或指令:XRL累加器取反指令:CPL累加器清零指令:CLR移位指令:RL、RR、RLC、RRC,與指令,與指令:源操作數(shù)與目標操作數(shù)按位相與ANLA,Rn;A(A)direct(direct)順序執(zhí)行elsePCPC+2+rel累加器非0轉(zhuǎn)移指令格式:JNZrel執(zhí)行操作:ifA0PCPC+2;順序執(zhí)行elsePCPC+2+rel,累加器零條件轉(zhuǎn)移指令實例,編程實現(xiàn)將片外RAM地址為DATA1的8位無符號數(shù)組(位于地址低256單元內(nèi))連續(xù)傳送到片內(nèi)RAM地址為DATA2處,直到遇到數(shù)組元素為0為止。,累加器零條件轉(zhuǎn)移指令實例,MOVR0,#DATA1MOVR1,#DATA2LOOP:MOVXA,R0JZAA1MOVR1,AINCR0INCR1SJMPLOOPAA1:SJMP$,距離127,注意此例的缺陷,沒有考慮數(shù)據(jù)區(qū)長度,改進,條件轉(zhuǎn)移指令-進位條件轉(zhuǎn)移,進位位C為1轉(zhuǎn)移指令格式:JCrel執(zhí)行操作:ifC0PCPC+2;順序執(zhí)行elsePCPC+2+rel進位位C為0轉(zhuǎn)移指令格式:JNCrel執(zhí)行操作:ifC1PCPC+2;順序執(zhí)行elsePCPC+2+rel,條件轉(zhuǎn)移指令-位條件轉(zhuǎn)移,直接尋址位為1轉(zhuǎn)移指令格式:JBbit,rel執(zhí)行操作:ifbit0PCPC+3elsePCPC+3+rel直接尋址位為0轉(zhuǎn)移指令格式:JNBbit,rel執(zhí)行操作:ifbit1PCPC+3elsePCPC+3+rel直接尋址位為1轉(zhuǎn)移且該位清0指令格式:JBCbit,rel執(zhí)行操作:ifbit0PCPC+3elsePCPC+3+rel,bit=0,條件轉(zhuǎn)移指令-比較條件轉(zhuǎn)移,指令格式:CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNERi,#data,rel執(zhí)行操作:if第一操作數(shù)第二操作數(shù)PCPC+3,C=0if第一操作數(shù)第二操作數(shù)PCPC+3+relif第一操作數(shù)第二操作數(shù)C=0if第一操作數(shù)第二操作數(shù)C=1,CJNE應(yīng)用實例-無符號數(shù)的比較,編程實現(xiàn):如果R0與R1相等,轉(zhuǎn)移到AA1,如果R0大于R1,轉(zhuǎn)移到AA2,如果R0小于R1,轉(zhuǎn)移到AA3,MOVA,R0MOV30H,R1CJNEA,30H,MIDAA1:MID:JNCAA2AA3:AA2:,注意指令的語法,R0與R1不能直接比較,Yes,CJNE應(yīng)用實例-帶符號數(shù)的比較,編程實現(xiàn):A與30H單元內(nèi)容(帶符號數(shù))進行比較,如果相等,轉(zhuǎn)移到LOOP1,如果大于,轉(zhuǎn)移到LOOP2,如果小于,轉(zhuǎn)移到LOOP3,A0?,(30H)0?,(30H)0?,A(30H),CJNEA,30H比較,A(30H)?,A(30H),A(30H),Cy0?,No,No,Yes,Yes,No,Yes,No,Yes,No,LOOP1,LOOP2,LOOP3,COMP,NEXT,+,-,+,+,-,-,-,+,MOVR0,AANLA,#80HJNZNEGMOVA,30HANLA,#80HJNZLOOP2SJMPCOMPNEG:MOVA,30HANLA,#80HJNZLOOP3,COMP:MOVA,R0CJNEA,30H,NEXTSJMPLOOP1NEXT:JNCLOOP2LOOP3:NOP,A為+,(30H)為+,A為-,(30H)為+,A=(30H),A(30H),A(30H),條件轉(zhuǎn)移指令-減1條件轉(zhuǎn)移,寄存器減“1”不等零轉(zhuǎn)移指令格式:DJNZRn,rel執(zhí)行操作:Rn=Rn-1ifRn0PCPC+2;順序執(zhí)行elsePCPC+2+rel內(nèi)部RAM或SFR減“1”不為零轉(zhuǎn)移指令格式:DJNZdirect,rel執(zhí)行操作:(direct)=(direct)-1if(direct)0PCPC+3;順序執(zhí)行elsePCPC+3+rel,DJNZ指令實例1-對累加器零條件轉(zhuǎn)移實例的修改,MOVR0,#DATA1MOVR1,#DATA2MOVR3,#nLOOP:MOVXA,R0JZAA1MOVR1,AINCR0INCR1DJNZR3,LOOPAA1:SJMP$,距離128,考慮數(shù)據(jù)區(qū)長度,累加器零條件轉(zhuǎn)移實例,考慮數(shù)據(jù)區(qū)長度,DJNZ應(yīng)用實例2(課堂練習(xí)),編寫一段程序,把片內(nèi)RAM地址30H3FH的16個存儲單元清0,DJNZ應(yīng)用實例2(解答),編寫一段程序,把片內(nèi)RAM地址30H3FH的16個存儲單元清0,MOVR0,#30H;地址指針初始化MOVR1,#16;循環(huán)變量初始化AGA:MOVR0,#0;存儲單元清0INCR0;地址指針增加DJNZR1,AGA;循環(huán)變量判斷,子程序調(diào)用與返回指令,主,程,序,子,程,序,1,子,程,序,2,斷點1,斷點2,恢復(fù)斷點2,恢復(fù)斷點1,斷點:在子程序調(diào)用時,指調(diào)用指令的下一條指令地址,將被壓入堆棧,在返回指令中被從棧頂彈出到PC,絕對調(diào)用指令,指令格式:ACALLaddr11執(zhí)行操作:PCPC+2SPSP+1,(SP)PC70SPSP+1,(SP)PC158PC100addr11PC1511不變,斷點保護,絕對調(diào)用指令示例,MOVA,#20HACALLAA1AA1:MOVA,R0RET,在同一個2KB區(qū)間內(nèi),長調(diào)用指令,指令格式:LCALLaddr16執(zhí)行操作:PCPC+3SPSP+1,(SP)PC70SPSP+1,(SP)PC158PC150addr16,斷點保護,長調(diào)用指令示例,MOVA,#20HLCALLAA1AA1:MOVA,R0RET,距離任意,64KB轉(zhuǎn)移空間,返回指令,返回指令指令格式:RET執(zhí)行操作:PC158(SP)SPSP-1PC70(SP)SPSP-1中斷返回指令格式:RETI操作:(1)清除中斷響應(yīng)時置位的優(yōu)先級狀態(tài)觸發(fā)器,使同級或低級中斷請求不會被阻斷(2)其它操作同RET指令,斷點恢復(fù),位處理器(布爾處理器),布爾處理器,布爾運算器ALU,布爾累加器CY(PSW.7),布爾RAM區(qū)共128位,布爾I/O口,P0P3口每位都可做布爾I/O口,布爾指令子集,17條布爾指令,布爾SFR區(qū),共221位,布爾地址空間,4.3.5位操作類指令,位操作類指令的分類(17條)位傳送指令:MOV位邏輯操作指令:CPL、CLR、SETB、ANL、ORL位條件轉(zhuǎn)移指令:JC、JNC、JB、JNB、JBC(見轉(zhuǎn)移類指令),位傳送指令,直接尋址位內(nèi)容送進位位MOVC,bit;Cy(bit)進位位內(nèi)容送直接尋址位MOVbit,C;(bit)Cy位地址表示方法1、位地址:RAM(00H7FH),SFR(80HFFH)2、位名稱:SFR中的專用名稱位3、點表示:字節(jié)地址或SFR名.位序號4、位符號地址表示方式:用偽指令定義的符號地址,如:FLGbitF0,位邏輯操作指令,進位位取反:CPLC進位位清零:CLRC進位位置1:SETBC,直接尋址位取反:CPLbit直接尋址位清零:CLRbit直接尋址位置1:SETBbit,直接尋址位與進位位與:ANLC,bit直接尋址位與進位位或:ORLC,bit直接尋址位取反后與進位位與:ANLC,/bit直接尋址位取反后與進位位或:ORLC,/bit,直接尋址位原值不變,4.4MCS-51匯編語言偽指令,匯編語言程序的格式,匯編語言程序語句,指令語句,偽指令語句,匯編過程中產(chǎn)生CPU將要執(zhí)行的機器代碼,僅對匯編過程進行控制,不產(chǎn)生可執(zhí)行的機器代碼:程序定位、符號定義和存儲空間保留等,指令語句,指令語句格式標號:操作碼操作數(shù);注釋各部分由分隔符(空格或Tab)分開標號一條指令或一段程序的符號地址,由1-8個字母、數(shù)字與下劃線(首字符必須是字母)組成,后跟“:”號指令語句在匯編過程中將產(chǎn)生機器碼,偽指令語句,偽指令格式名稱或標號:偽指令表達式或符號列表在匯編過程中不產(chǎn)生機器碼和目標程序,不令計算機產(chǎn)生任何操作作用:在匯編程序?qū)υ闯绦蜻M行匯編的過程中,控制匯編程序?qū)υ闯绦虻慕忉?,完成?shù)據(jù)、符號的定義等,偽指令-ORG,ORG命令格式:ORG16位地址作用:用在一段源程序或數(shù)據(jù)塊前,說明程序段或數(shù)據(jù)塊的起始地址例1:ORG0000HLJMPMAINORG1000HMAIN:MOVR0,#100H例2:ORG1000HTAB:DB01H,02H,,偽指令-END,END命令格式:END作用:表明源程序結(jié)束,偽指令-DB命令,DB命令格式:標號:DB數(shù)據(jù)項或數(shù)據(jù)項列表作用:定義字節(jié)數(shù)據(jù)或數(shù)據(jù)塊,列表中的數(shù)據(jù)項用逗號分開,匯編程序把它們依次存放在從標號地址開始的連續(xù)存儲單元中例:ORG2000HFIRST:DB10,20,30,40DB11,12,13,14,則:從地址為2000H的單元開始,存儲單元中的數(shù)據(jù)依次為10,20,30,40,11,12,13,14,偽指令-DW命令,DW命令格式:標號:DW數(shù)據(jù)項或數(shù)據(jù)項列表作用:定義字數(shù)據(jù)或數(shù)據(jù)塊,列表中的數(shù)據(jù)項用逗號分開,匯編程序把它們依次存放在從標號地址開始的連續(xù)存儲單元中,字的高8位在前,低8位在后例:ORG2000HFIRST:DW1001H,2002HDW03H,4004HDW3344H,5566H,偽指令-DS命令,DS命令格式:標號:DS數(shù)字作用:定義偽初始化數(shù)據(jù)塊,從標號地址開始保留“數(shù)字”規(guī)定個數(shù)的連續(xù)字節(jié)存儲單元,供以后存入數(shù)據(jù)例:ORG2000HFIRST:DS20H則:從地址為2000H的單元開始,保留32個存儲單元,偽指令-bit命令,bit命令格式:符號名稱bit位地址作用:給位地址賦予一個代替的字符名稱例:A1bitP1.0,偽指令-EQU與DATA,賦值命令EQU(先賦值,后使用)格式:符號名稱EQU表達式或匯編符號作用:給表達式或符號一個代替的字符名稱例:rregEQUR0標號地址賦值命令DATA格式:標號名稱DATA表達式作用:此命令把數(shù)據(jù)/代碼地址賦予標號段所規(guī)定的字符名稱。定義的字符名稱可先使用后定義例:addrDATA2000H,EQU與DATA示例,合法的:reg1EQUR1reg2EQUR2MASKEQU0FHAAEQU10HAA1EQUAA+1L1DATA1000HRAM2DATA30HRAM3DATARAM2+1,非法的:AAEQU30HAAEQU31HcpyEQUmovreg1DATAr1RAM2DATA1000HRAM2DATA30H,偽指令-HIGH與LOW,取16位數(shù)高字節(jié)命令HIGH格式:#HIGH(表達式)取16位數(shù)低字節(jié)命令LOW格式:#LOW(表達式),4.5匯編語言程序設(shè)計,匯編語言程序結(jié)構(gòu),順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu),4.5.1順序程序設(shè)計,初始化,指令1,指令2,程序結(jié)束,順序程序?qū)嵗?將20H中的8位無符號數(shù)轉(zhuǎn)成3位BCD碼,存儲在30H、31H兩個RAM單元中,FIRSTDATA30HSECONDATA31HORG0000H;復(fù)位向量LJMPSTARTORG0100HSTART:MOVA,20H;A待轉(zhuǎn)換數(shù)據(jù)xMOVB,#100DIVAB;百位BCD=x/100MOVFIRST,A;30H百位MOVA,B;Ax/100的余數(shù)y,MOVB,#10;DIVAB;y/10,A中為十位,B中為個位SWAPA;把十位BCD交換到A的高4位ORLA,B;A高4位中的十位BCD與B中的;個位BCD組合起來MOVSECON,A;結(jié)果存儲31H單元SJMP$END,4.5.2分支程序設(shè)計,分支程序?qū)嵗ɡ?-2),ORG0000HSTART:MOVA,30H;取溫度值CLRCSUBBA,#35;溫度值減去35JCNEXT;小于35度轉(zhuǎn)下一步SETBP1.0;否則點亮紅燈CLRP1.1CLRP1.2SJMPSTART;繼續(xù)檢測NEXT:MOVA,30H;重取溫度值CLRCSUBBA,#20;溫度值減去20JCYE;小于20轉(zhuǎn)點黃燈,SETBP1.1;否則點亮綠燈CLRP1.0CLRP1.2SJMPSTARTYE:SETBP1.2;點亮黃燈CLRP1.0CLRP1.1SJMPSTARTEND,散轉(zhuǎn),散轉(zhuǎn)是一種并行的多分支程序轉(zhuǎn)移結(jié)構(gòu)在同一轉(zhuǎn)移點上,根據(jù)不同的輸入條件使程序轉(zhuǎn)移向不同的入口點上。散轉(zhuǎn)方法:1、構(gòu)建轉(zhuǎn)移指令表,用指令JMPA+DPTR執(zhí)行程序轉(zhuǎn)移2、構(gòu)建轉(zhuǎn)移目標地址表,用指令MOVC裝載目標地址至DPTR,用指令JMPA+DPTR執(zhí)行程序轉(zhuǎn)移,散轉(zhuǎn)程序?qū)嵗ɡ?-3),ORG0000HSTART:MOVDPTR,#TAB;指向轉(zhuǎn)移指令表MOVA,30H;取30H內(nèi)容MOVB,#3MULAB;30H內(nèi)容乘以3JMPA+DPTR;轉(zhuǎn)向地址(DPTR)+(A)TAB:LJMPOPR0;轉(zhuǎn)向功能程序1LJMPOPR1;轉(zhuǎn)向功能程序2LJMPOPR2;轉(zhuǎn)向功能程序3OPR0:MOV31H,#10H;功能程序1SJMP$OPR1:MOV31H,#20H;功能程序2SJMP$OPR2:MOV31H,#30H;功能程序3SJMP$,基于地址表方法的例4-3,ORG0000HSTART:MOVDPTR,#TAB;指向轉(zhuǎn)移目標地址表MOVA,30H;取30H內(nèi)容MOVB,#2MULAB;30H內(nèi)容乘以2MOVR1,A;目標地址表偏移MOVCA,A+DPTR;取目標地址高位PUSHACC;暫存MOVA,R1ADDA,#1;地址表偏移+1MOVCA,A+DPTR;取目標地址低位MOVDPL,A,POPACC;恢復(fù)目標地址高位MOVDPH,ACLRAJMPA+DPTR;轉(zhuǎn)向地址(DPTR)+(A)TAB:DWOPR0,OPR1,OPR2OPR0:MOV31H,#10H;功能程序1SJMP$OPR1:MOV31H,#20H;功能程序2SJMP$OPR2:MOV31H,#30H;功能程序2SJMP$END,4.5.3循環(huán)程序設(shè)計,地址指針和循環(huán)變量初始化,循環(huán)控制,循環(huán)體,地址指針和循環(huán)變量修改,地址指針和循環(huán)變量初始化,循環(huán)控制,循環(huán)體,地址指針和循環(huán)變量修改,Yes,No,No,Yes,先處理后判斷,先判斷后處理,循環(huán)程序示例,從BLOCK單元開始有一無符號數(shù)據(jù)塊,其長度存放于LEN單元,求出數(shù)據(jù)塊中最大的數(shù),并存放于MAX中,LENDATA30HMAXDATA31HBLOCKDATA32HORG0000H;復(fù)位向量LJMPSTARTORG0100HSTART:CLRA;A0MOVR2,LEN;循環(huán)變量(循環(huán)計數(shù))MOVR1,#BLOCK;地址指針R1指向BLOCK,LOOP:CLRC;準備減法SUBBA,R1;A與數(shù)據(jù)塊中數(shù)據(jù)(R1)比較JNCNEXT;A(R1),轉(zhuǎn)移MOVA,R1;A(R1),A(R1),SJMPNEXT1NEXT:ADDA,R1;恢復(fù)A中減掉部分NEXT1:INCR1;指向下一個待比較數(shù)據(jù)DJNZR2,LOOP;循環(huán)控制MOVMAX,A;結(jié)果存儲SJMP$END,軟件延時,DELAY:MOVR7,#n;1TDELY:MOVR6,#m;1TDJNZR6,$;2TDJNZR7,DELY;2TRET;2T注:T表示機器周期,利用軟件循環(huán)可以產(chǎn)生一定時間長度的延時,2Tm1TK,(2TK)n1T,4.5.4查表程序設(shè)計,MOVCA,A+DPTR1、表首地址DPTR2、表項偏移A3、執(zhí)行MOVC,查詢結(jié)果A,MOVCA,A+PC1、表項偏移A2、計算“MOVC”下一條指令地址與表首址的字節(jié)距離distance3、將distance加到A中4、執(zhí)行MOVC,查詢結(jié)果A,查表程序示例,在HEX單元存放著一個2位十六進制數(shù),把它轉(zhuǎn)換2位ASCII碼,并存放于ASC、ASC+1單元中,HEXEQU30HASCEQU31HORG0000H;復(fù)位向量LJMPSTARTORG0100HSTART:MOVDPTR,#ASCTBMOVA,HEX;A(HEX)PUSHACC;保留高位ANDA,#0FH;屏蔽高位MOVCA,A+DPTR;查表,另一種查表法:去掉此句,更改為ADDA,#ASCTB-M1MOVCA,A+PC,M1:MOVASC,A;高位轉(zhuǎn)換結(jié)果存儲POPACC;恢復(fù)高位SWAPA;高低位交換ANDA,#0FHMOVCA,A+DPTR;查表M2:MOVASC+1,A;低位轉(zhuǎn)換結(jié)果存儲SJMP$ASCTB:DB“0123456789abcdef”END,更改為ADDA,#ASCTB-M2MOVCA,A+PC,4.5.5子程序設(shè)計,調(diào)用主程序通過調(diào)用指令進入子程序(斷點保護)子程序通過RET指令返回主程序(斷點恢復(fù))在子程序必須保護公用寄存器或其它資源的內(nèi)容(現(xiàn)場保護)主子程序間的參數(shù)傳遞入口參數(shù):主程序傳給子程序的參數(shù)出口參數(shù):子程序傳給主程序的參數(shù)參數(shù)傳遞方法:通過寄存器(工作寄存器或累加器)或固定地址的片內(nèi)RAM單元傳遞參數(shù)通過堆棧傳遞參數(shù),工作寄存器傳遞參數(shù)子程序?qū)嵗?ORG0000HSTART:MOVR0,#30H;RAM區(qū)始址MOVR7,#20H;RAM區(qū)長度LCALLCLEAR;調(diào)用清零子程序CLEAR:CLAA;清零子程序LOOP:MOVR0,AINCR0DJNZR7,LOOPRET;子程序返回END,堆棧傳遞子程序示例,在HEX單元存放著一個2位十六進制數(shù),把它轉(zhuǎn)換2位ASCII碼,并存放于ASC、ASC+1單元中,HEXEQU30HASCEQU31HORG0100HSTART:PUSHHEX;待轉(zhuǎn)換數(shù)據(jù)通過堆棧傳遞LCALLHASC;調(diào)用轉(zhuǎn)換子程序POPASC;轉(zhuǎn)換結(jié)果通過堆棧傳遞MOVA,HEXSWAPAPUSHACCLCALLHASCPOPASC+1SJMP$,HASC:DECSP;SP指向待轉(zhuǎn)換數(shù)據(jù)DECSPPOPACC;待轉(zhuǎn)換數(shù)據(jù)送AANDA,#0FHADDA,#7;查表地址校正MOVCA,A+PC;查表PUSHACC;轉(zhuǎn)換結(jié)果推入棧頂INCSP;SP指向斷點返回地址INCSPRETASCTB:DB“0123456789abcdef”END,

注意事項

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

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




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

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

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


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