資源描述:
《第4章 mcs-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第4章MCS-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)本章定位匯總提高4.1匯編語(yǔ)言程序的基本結(jié)構(gòu)形式4.2順序結(jié)構(gòu)程序設(shè)計(jì)4.3分支結(jié)構(gòu)程序設(shè)計(jì)4.3.1單分支程序設(shè)計(jì)4.3.2多分支程序設(shè)計(jì)4.3.3分支結(jié)構(gòu)程序設(shè)計(jì)實(shí)例4.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)4.4.1單循環(huán)4.4.2多重循環(huán)4.5子程序的設(shè)計(jì)4.5.1子程序結(jié)構(gòu)4.5.2子程序調(diào)用4.6程序設(shè)計(jì)應(yīng)用實(shí)例第4章MCS-51匯編語(yǔ)言程序設(shè)計(jì)3語(yǔ)言機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言3原則盡可能節(jié)省數(shù)據(jù)存放單元、縮短程序長(zhǎng)度、加快運(yùn)算時(shí)間匯編語(yǔ)言是面向機(jī)器硬件的語(yǔ)言,要求程序設(shè)計(jì)者對(duì)MCS-51單片機(jī)具有很好的“軟、
2、硬結(jié)合”的功底。介紹程序設(shè)計(jì)的基本知識(shí)及如何使用匯編語(yǔ)言來(lái)進(jìn)行基本的程序設(shè)計(jì)。4.1匯編語(yǔ)言程序的基本結(jié)構(gòu)形式順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),再加上廣泛使用的子程序和中斷服務(wù)子程序。1.順序結(jié)構(gòu)2.分支結(jié)構(gòu)程序中含有轉(zhuǎn)移指令,無(wú)條件分支,有條件分支。有條件分支又分為:?jiǎn)畏种ЫY(jié)構(gòu)和多分支結(jié)構(gòu)。3.循環(huán)結(jié)構(gòu)4.子程序5.中斷服務(wù)子程序4.2順序結(jié)構(gòu)程序設(shè)計(jì)4.2.1一般的順序結(jié)構(gòu)一、子程序設(shè)計(jì)原則和應(yīng)注意的問(wèn)題順序結(jié)構(gòu)是最簡(jiǎn)單最常用的程序結(jié)構(gòu),在順序結(jié)構(gòu)的程序中既無(wú)分支,也無(wú)循環(huán),也不調(diào)用子程序。程序執(zhí)行時(shí),程序流向不變,按順序一條一條地執(zhí)行指令,如
3、圖4-1所示。也稱(chēng)為簡(jiǎn)單程序或直線程序。順序程序結(jié)構(gòu)雖然比較簡(jiǎn)單,但也能完成一定的功能任務(wù),是構(gòu)成復(fù)雜程序的基礎(chǔ)。例4-1已知16位二進(jìn)制負(fù)數(shù)存放在R1、RO中,試求其補(bǔ)碼,并將結(jié)果存在R3、R2中。分析:二進(jìn)制負(fù)數(shù)的求補(bǔ)方法可歸結(jié)為“求反加1”,符號(hào)位不變。利用CPL指令實(shí)現(xiàn)求反:加1時(shí),應(yīng)低8位先加1,高8位再加上低位的進(jìn)位。注意這里不能用INC指令,因?yàn)镮NC指令不影響標(biāo)志位。CONT∶MOVA,R0;讀低8位CPLA;取反ADDA,#1;加1MOVR2,A;存低8位MOVA,R1;讀高8位CPLA;取反ADDCA,#80H;加進(jìn)位及符號(hào)
4、位MOVR3,A;存高8位RET例4-2編寫(xiě)邏輯運(yùn)算程序,功能為:F=X(Y+Z)其中,F、X、Y、Z均為位變量,依次存在以30H為首址的位尋址區(qū)。FBIT30HXBIT31HYBIT32HZBIT33HLOG1:MOVC,Y;Y--->CORLC,Z;(Y+Z)-->CANLC,X;X(Y+Z)-->CMOVF,C;X(Y+Z)-->FRET例4-1補(bǔ)程序初始化。初始化就是為變量、寄存器、存儲(chǔ)單元賦一初值,是最簡(jiǎn)單、最常用的操作。如將R0-R3,P1,30H,40H單元初始化為00H,把R4,R5初始化為0FFH。ORG0000H;PC起始地
5、址LJMPSTART;轉(zhuǎn)主程序ORG0100H;主程序起始地址START:MOVR0,#00H;初始化MOVR1,#00HMOVR2,#00HMOVR3,#00HMOVP1,#00HMOVR4,#0FFHMOVR5,#0FFHMOV30H,#00HMOV40H,#00HHERE:SJMPHERE;反復(fù)執(zhí)行該指令,相當(dāng)于等待END4.2.2查表程序設(shè)計(jì)數(shù)據(jù)計(jì)算、轉(zhuǎn)換等各種功能,具有程序簡(jiǎn)單、執(zhí)行速度快等優(yōu)點(diǎn)。查表就是根據(jù)自變量x,在表格中尋找y,使y=f(x)。執(zhí)行查表指令時(shí),發(fā)出讀程序存儲(chǔ)器選通脈沖/PSEN。指令系統(tǒng),給用戶(hù)提供了兩條極為有用
6、的查表指令:⑴MOVCA,@A+DPTR⑵MOVCA,@A+PC指令“MOVCA,@A+DPTR”完成把A中的內(nèi)容作為一個(gè)無(wú)符號(hào)數(shù)與DPTR中的內(nèi)容相加,所得結(jié)果為某一程序存儲(chǔ)單元的地址,然后把該地址單元中的內(nèi)容送到累加器A中?!贰分噶睢癕OVCA,@A+PC”以PC作為基址寄存器,PC的內(nèi)容和A的內(nèi)容作為無(wú)符號(hào)數(shù),相加后所得的數(shù)作為某一程序存儲(chǔ)器單元的地址,根據(jù)地址取出程序存儲(chǔ)器相應(yīng)單元中的內(nèi)容送到累加器A中。執(zhí)行該指令語(yǔ)句時(shí),PC的內(nèi)容指向查表指令的下一條指令。指令執(zhí)行完,PC的內(nèi)容不發(fā)生變化,仍指向查表指令的下一條指令。優(yōu)點(diǎn):預(yù)處理較少且
7、不影響其它特殊功能寄存器的值,所以不必保護(hù)其它特殊功能寄存器的原先值缺點(diǎn):在于該表格只能存放在這條指令的地址(例如1000H)以下的00~FFH之中。表格所在的程序空間受到了限制。例4-2補(bǔ)子程序的功能為:根據(jù)累加器A中的數(shù)x(0~9之間)查x的平方表y,根據(jù)x的值查出相應(yīng)的平方y(tǒng)。x和y均為單字節(jié)數(shù)。地址子程序1000HADDA,#01H1002HMOVCA,@A+PC1003HRET1004HDB00H,01H,04H,09H,10HDB19H,24H,31H,40H,51H第1條指令A(yù)DDA,#01H的作用是加上偏移量,可以根據(jù)A的內(nèi)容查
8、出X對(duì)應(yīng)的平方。MOVCA,@A+DPTR這條指令的應(yīng)用范圍較為廣泛,一般情況下,大多使用該指令,使用該指令時(shí)不必計(jì)算偏移量。使用該指令的優(yōu)點(diǎn)是表格可