第3章MCS51單片機匯編語音程序設(shè)計課件_第1頁
第3章MCS51單片機匯編語音程序設(shè)計課件_第2頁
第3章MCS51單片機匯編語音程序設(shè)計課件_第3頁
第3章MCS51單片機匯編語音程序設(shè)計課件_第4頁
第3章MCS51單片機匯編語音程序設(shè)計課件_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

單片機原理、接口及應(yīng)用第3章匯編語言程序設(shè)計劉尊民瀑臼洪蘑室勢敵次漆畦瞥憐乒勤禍滴福恭昌奸鉛脖福駕要嗚芯文兜譽扶惕第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計單片機原理、接口及應(yīng)用第3章匯編語言程序設(shè)計瀑臼洪蘑室勢敵內(nèi)容提要★概述★偽指令★匯編語言程序設(shè)計步驟★順序程序設(shè)計★分支程序設(shè)計★循環(huán)程序設(shè)計★位操作程序設(shè)計★子程序★小結(jié)坎番唬雷娟費倒鐘助緯滌術(shù)火擇純沁澆息巡絹順袱捶滾豪鋇兌神慕焉湊樓第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計內(nèi)容提要★概述坎番唬雷娟費倒鐘助緯滌術(shù)火擇純沁澆息巡絹3.1概述 MCS-51單片機的編程語言可以是匯編語言也可以是高級語言(如C語言),高級語言編程快捷,但程序長,占用存儲空間大,執(zhí)行慢;匯編語言產(chǎn)生的目標(biāo)程序簡短,占用存儲空間小,執(zhí)行快,能充分發(fā)揮計算機的硬件功能。無論是高級語言還是匯編語言,源程序都要轉(zhuǎn)換成目標(biāo)程序(機器語言)單片機才能執(zhí)行。

芬俄饅剃區(qū)涅架韋叁情荒念鎖囊靳汰捅屹采量曬啥搬鵬澎熏肘霧傲翟簾賃第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計3.1概述 MCS-51單片機的編程語言可以是匯連接/定位器L51匯編語言源程序匯編器A51符號轉(zhuǎn)換程序OHS51絕對地址目標(biāo)程序.BINC語言程序浮動地址目標(biāo)程序編譯器C51

·HEX圖3-1兩種語言源程序轉(zhuǎn)換成目標(biāo)程序拋燦悠常權(quán)翰派意柏聳飾退孔淹陋贖赴惱鍺九軀華扯材幕膛裂嘯沿督期菩第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計連接/定位器匯編語言匯編器A51符號轉(zhuǎn)換程序OHS51絕對地

目前很多公司將編輯器、匯編器、編譯器、連接/定位器、符號轉(zhuǎn)換程序做成集成軟件包,用戶進入該集成環(huán)境,編輯好程序后,只需點擊相應(yīng)菜單就可以完成上述的各步,如WAVE、KEIL,WAVE集成軟件的使用見附錄。

匯編:將匯編語言源程序轉(zhuǎn)換成機器語言目標(biāo)程序的過程稱為匯編。

匯編程序:能將匯編語言源程序轉(zhuǎn)換成機器語言目標(biāo)程序的系統(tǒng)軟件稱為匯編程序。勞茁站慰附意奮井乃直炕解咎搪魔懸筷粟橫魯拍翻尸掖涪汐膳船島蓖瞧挾第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計目前很多公司將編輯器、匯編器、編譯器匯編的方法:匯編的方法有兩種1.手工匯編:人工查指令表,查出程序中每條指令對應(yīng)的機器代碼。早期的計算機使用。2.機器匯編:用計算機中的匯編程序?qū)τ脩粼闯绦蜻M行匯編。用機器匯編要提供給匯編一些信息,遵循匯編程序的一些約定。這些由偽指令指定。敏黃砧宇瓣散炒倍刃敵諱艦俗謬數(shù)黔皮書閹禾蝶打桐兵軌藥航議蘋吐禍盯第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計匯編的方法:匯編的方法有兩種敏黃砧宇瓣散炒倍刃敵諱艦俗謬數(shù)黔1)確定程序中每條匯編語言指令的指令機器碼2)確定每條指令在存儲器中的存放地址3)提供錯誤信息 4)提供目標(biāo)執(zhí)行文件(*.OBJ/*.HEX)和列表文件(*.LST)地址 機器碼 源程序 ORG 2000H 2000H7830 MAIN: MOVR0,#30H2002HE6 MOVA,@R0 …

沸力嘔刊慣窘忍賀圃務(wù)聰夜遏岡迢返熄朔甥巋楞億照訂愛墟毒葬剎愚拆量第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1)確定程序中每條匯編語言指令的指令機器碼地址 1.機器指令:指令系統(tǒng)中的全部指令。每條機器指令都有對應(yīng)的機器代碼,可以被CPU執(zhí)行。2.偽指令:匯編控制指令,沒有指令代碼,只用于匯編過程,為匯編程序提供匯編信息。一、匯編語言指令類型

宏匯編功能:將需要反復(fù)多次執(zhí)行的程序段定義成一個宏指令名(宏定義)。編程時,可在程序中使用宏指令名來替代被定義的程序段(宏調(diào)用)。3.2偽指令茂囊希兆鵝燎篩節(jié)同拋乘參服撬沖誘揮店避件范坡椅迸一怔揀梗常疥料納第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1.機器指令:指令系統(tǒng)中的全部指令。每條機器指令都有對應(yīng)的宏定義過程:宏調(diào)用過程: … 宏指令名實際參數(shù) … 宏指令名實際參數(shù)宏指令名MACRO形式參數(shù) … ;被定義的程序段

ENDM蒸氮叢篇杏框魚肉殖慶緒股吉刷灰柒坍傈均航填店侶蹬壘遜糟傘攝息以謝第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計宏定義過程:宏調(diào)用過程:宏指令名MACRO形式參數(shù)二.偽指令常用偽指令及功能:1.起始指令ORGnn功能:定義程序或數(shù)據(jù)塊的起始地址。指示此語句后面的程序或數(shù)據(jù)塊以nn為起始地址,連續(xù)存放在程序存儲器中。

指令地址機器碼 源程序 ORG 2000H 2000H7830 MAIN: MOVR0,#30H2002HE6 MOVA,@R0 … ORG3000H3000H23 TAB:DB23H,100,‘A’3001H643002H41鄒舵惠健棧滁咸助只絨司稀娜捷陡簾彬祥蓋撮堿悔賒共惋藏寨沁贏跪尖裔第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計二.偽指令常用偽指令及功能:1.起始指令ORG2.字節(jié)定義標(biāo)號:DB(字節(jié)常數(shù),或字符或表達(dá)式)功能:指示在程序存儲器中以標(biāo)號為起始地址的單元里存放的數(shù)為字節(jié)數(shù)據(jù)(八位二進制數(shù))。例如LN:DB32,’C’,25H,-1;LN~LN+2地址單元依次存放20H,43H,25H,F(xiàn)FH地址

數(shù)據(jù)LN20LN+143LN+225LN+3FF3.字定義標(biāo)號:DW(字常數(shù)或表達(dá)式)作用:指示在程序存儲器中以標(biāo)號為起始地址的單元里存放的數(shù)為字?jǐn)?shù)據(jù)(即16位的二進制數(shù)),例如:GH:DW1234H,5678H,08GH1234GH+25678GH+40008姻睜食臥訛襟安狂樊躍佛貴滑姚販綸眾武炭撓承闊銹抒文吮顯謾甩仍解絕第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計2.字節(jié)定義標(biāo)號:DB(字節(jié)常數(shù),或字符或表達(dá)式)地5.等值指令標(biāo)號EQU(數(shù)值表達(dá)式)

表示EQU兩邊的量等值,用于為標(biāo)號或標(biāo)識符賦值。

例如:X1 EQU2000H

X2 EQU0FH

MAIN:MOVDPTR,#X1;DPTR=2000H ADDA,#X2;A=A+0FH4.保留字節(jié)標(biāo)號:DS(數(shù)值表達(dá)式)作用:

指示在程序存儲器中保留以標(biāo)號為起始地址的若干字節(jié)單元,其單元個數(shù)由數(shù)值表達(dá)式指定。例如L1:DS32;從L1地址開始保留32個存儲單元。炬鄖肋凋讓膏連池?fù)锘炱夹谴璞迯d概滴挺細(xì)華鬼湃柬普注嘲勒晶孕賄上掇第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計5.等值指令標(biāo)號EQU(數(shù)值表達(dá)式)

6.位定義

標(biāo)號BIT[位地址]作用:

同EQU指令,不過定義的是位操作地址。例如AICBITP1.1。7.匯編結(jié)束END作用:

指示源程序段結(jié)束。

END指令放在程序的最后。A51匯編程序還有一些其它的偽指令,列在教材表3-1中,以備查閱。訛批竣械也奇推臣吠梳鷹自催禱周絡(luò)術(shù)合悔爾格歡棕窖俐爐刑濰飲唁矣悍第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計6.位定義標(biāo)號BIT[位地址]7.匯編結(jié)束匯編語言程序設(shè)計步驟一.確定方案和計算方法二.了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo)三.建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟四.合理分配存儲器單元和了解I/O接口地址五.編制源程序1.按功能設(shè)計程序,明確各程序之間的相互關(guān)系2.用流程圖表示程序結(jié)構(gòu)和功能開始1YN?3.程序中用注釋說明指令在程序中的作用,方便閱讀、調(diào)試和修改填仇蒂柏尖茫午俏杰飲毒源彈刪翁尺釬陌莆卷罪椰宙精久糠式稱澤烴肘敘第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計匯編語言程序設(shè)計步驟一.確定方案和計算方法五.編制源程序開

順序程序設(shè)計例3-1編程將外部數(shù)據(jù)存儲器的000EH和000FH單元的內(nèi)容相換。

常用程序結(jié)構(gòu)

順序程序、分支程序、

循環(huán)程序、子程序000EH000FH000EH000FH000EH000FH000EH000FH分析:外部數(shù)據(jù)存儲器的數(shù)據(jù)操作只能用MOVX指令,且只能和A之間傳送,因此必須用一個中間環(huán)節(jié)作暫存,設(shè)用20H單元。用R0、R1指示兩單元的低八位地址,高八位地址由P2指示。編程過程如下:000EH000FH000EH000FH000EH000FH軟零谷振害綴螞蠱幸掌仇凹肢亨文液并寞駕愈烈鬃繭摘煽飛穩(wěn)舞協(xié)瞳陡丑第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計順序程序設(shè)計常用程序結(jié)構(gòu)

順序程序、ORG0000HMOVP2,#0H;送地址高八位至P2口MOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=OFHMOVXA,@R0;A=(000EH)MOV20H,A;(20H)=(000EH)MOVXA,@R1;A=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)MOVX@R1,AMOVA,20HMOVX@R0,A;交換后的數(shù)送各單元SJMP$END鎬故戶嘲漱終遺裝棟筆啡能虹槳予喜聯(lián)蕾菩兄梗祥麓由噸政皋歲墳酚網(wǎng)呼第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H鎬故戶嘲漱終遺裝棟筆啡能虹槳予喜聯(lián)蕾

3.3順序程序設(shè)計順序程序(簡單程序),程序走向只有一條路徑逢佃峙冗教赴社頂陰襖須珠儡傈薊呀昔凄箔媽只淑亂鄧?yán)畬O曾稱新嚼蹤睛第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計3.3順序程序設(shè)計逢佃峙冗教赴社頂陰襖例3-3分解壓縮式BCD碼,使其成為非壓縮式BCD碼。ORG0000HMOV R0,#40H ;設(shè)指針MOV A,@R0 ;取一個字節(jié)MOV R2,A ;暫存ANL A,#0FH ;清0高半字節(jié)INC R0MOV @R0,A ;保存數(shù)據(jù)個位片內(nèi)RAM42H41H40H65MOV A,R2SWAPA ;十位換到低半字節(jié)ANL A,#0FHINC R0MOV @R0,A ;保存數(shù)據(jù)十位END0506甚跨廢皺糧疽檔剪銘虐取匡斜憶犀峽肇叢燈壺耳窟圃嘿彼絢巢蘿惱鍘曬站第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-3分解壓縮式BCD碼,使其成為非壓縮式BCD碼。OR地址數(shù)據(jù)TAB0TAB+11TAB+24TAB+39TAB+416HTAB+525H例3-4設(shè)變量放在片內(nèi)RAM的20H單元,其值為00H~05H之間,要求編查表程序,查出變量的平方值,并放入片內(nèi)RAM的21H單元。

ORG0000HMOVDPTR,#TABMOVA,20HMOVCA,@A+DPTR;查表MOV21H,ASJMP$TAB2:DB00H,01H,04H,09H,16H,25HEND分析:在程序存儲器安排一張平方表,首地址為TAB,以DPTR指向表首址,A存放變量值,利用查表指令MOVCA,@A+DPTR,即可求得。表中數(shù)據(jù)用BCD碼存放合乎人們的習(xí)慣.如果平方值為兩個字節(jié),程序應(yīng)如何編。DPTRA隴仍寵惟粟宗蠕緩怨世繪規(guī)迪敝潞薦皚芬浙幕綏就縫半賄趁琴卞像蕾灘汕第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計地址數(shù)據(jù)TAB0TAB+11TAB+24TAB+39TAB+ ORG0000HMOVA,R2

JNBACC.7,N;為正數(shù)?

CPLA ;負(fù)數(shù)變補

INCA

MOVR2,AN:SJMP$ ;結(jié)束

3.4分支程序的設(shè)計

由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成分支結(jié)構(gòu)3.5.1單分支程序一個判斷決策框,兩種分支結(jié)構(gòu)圖。條件滿足?N影響條件Y處理段條件滿足?N影響條件Y處理1處理2例1求8位有符號數(shù)的絕對值。方法:正數(shù)不變,負(fù)數(shù)變補績捎溺汲聞梢塊趴酶渾幅既碧桐貨葡代東鍛閡緊瘸昭勁績低語鼓蔚摩岸則第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計 ORG0000H例2用單片機加重力傳感器作磅秤,秤出重量后算出行李運費價格,其秤出的重量以10kg為1個計價單位G,G已存入40H單元。計價方法

為50kg以內(nèi)按3元,50kg以上

分段計價:50kg按3元計價

,超過部分按2元計價。

由此列出算式:

G×3+(G-5)×2;當(dāng)G>5M=G×3;當(dāng)G≤53G因重復(fù)使用,先暫存在R2。流程見左,程序如下:詢郎壬二族良漿亂淬系唯然完鈞狀墨租倦帶荔窄矛盔避忘站籮崇努孫吵拌第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例2用單片機加重力傳感器作磅秤,秤出重量后算出行多分支散轉(zhuǎn)程序的設(shè)計

有一類分支程序,它根據(jù)不同的輸入條件或不同的運算結(jié)果,轉(zhuǎn)向不同的處理程序,稱之為散轉(zhuǎn)程序。這類程序通常利用JMP@A+DPTR間接轉(zhuǎn)移指令實現(xiàn)轉(zhuǎn)移。有如下兩種設(shè)計方法:

1.查轉(zhuǎn)移地址表:將轉(zhuǎn)移地址列成表格,將表格的內(nèi)容作轉(zhuǎn)移的目標(biāo)地址。2.查轉(zhuǎn)移指令表:將轉(zhuǎn)移到不同程序的轉(zhuǎn)移指令列成表格,判斷條件后查表,轉(zhuǎn)到表中指令執(zhí)行,下面用兩個例子說明。豪假梧啦薦卉俏與灣浮翰式少過怪湘村姚墑咬歧霸刻錠輥陳注貓恕職遼宙第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計多分支散轉(zhuǎn)程序的設(shè)計豪假梧啦薦卉俏與灣浮翰式少過怪湘村姚1.利用轉(zhuǎn)移地址表實現(xiàn)轉(zhuǎn)移例3-7根據(jù)R3的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序,R3的內(nèi)容為0~n,處理程序的入口符號地址分別為PR0~PRn(n<128)。分析:將PR0—PRn入口地址列在表格中,每一項占兩個單元,PRn在表中的偏移量為2n,因此將R3的內(nèi)容乘2即得PRn在表中的偏移地址,從偏移地址2n和2n+1兩個單元分別取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即轉(zhuǎn)移到PRn入口執(zhí)行。叢鳥娠督耶裂帆員簾涂率惟歸寇勉澀瞎琉戰(zhàn)療碗妙屈又疇談塑亨鮮銳掠詢第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1.利用轉(zhuǎn)移地址表實現(xiàn)轉(zhuǎn)移叢鳥娠督耶裂帆員簾涂率惟歸寇勉澀ORG0000HMOVA,R3;R3→AADDA,ACC;A*2MOVDPTR,#TABPUSHACCMOVCA,@A+DPTR;取地址表中高字節(jié)MOVB,A;暫存于BINCDPTRPOPACCMOVCA,@A+DPTR;取地址表中低字節(jié)MOVDPL,AMOVDPH,B;DPTR為表中地址CLRA;A=0JMP@A+DPTR;轉(zhuǎn)移TAB:DWPR0,PR1,PR2,…..,PRn;轉(zhuǎn)移地址表END01100220..TABTAB+2DPHDPL例如R3=1的操作0220木網(wǎng)師弓吐輕猙暮嶼裴酌漣族殘素沾擲己果鷹曝目藏舔章洲愛帆抑睜板廉第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H01100220..TABTAB+2DPH2.利用轉(zhuǎn)移指令表實現(xiàn)轉(zhuǎn)移

例3-8設(shè)有五個按鍵0、1、2、3、4其編碼分別為3AH、47H、65H、70H、8BH,要求根據(jù)按下的鍵轉(zhuǎn)向不同的處理程序,分別為PR0、PR1//PR2、PR3、PR4,設(shè)按鍵的編碼已在B寄存器中,編出程序。分析:將鍵碼排成表,將鍵碼表中的值和B中的鍵編碼比對,記下在鍵碼表中和B中的鍵編碼相等的序號,另安排一個轉(zhuǎn)移表,安排AJMP指令(機器碼),因每條AJMP指令占二字節(jié),將剛才記下的序號乘2即為轉(zhuǎn)移表的偏移地址,利用JMP@A+DPTR執(zhí)行表內(nèi)的AJMP指令,從而實現(xiàn)多分支轉(zhuǎn)移,設(shè)JPT的地址為001AH、PR0入口地址為0110H、,參考2.4.2節(jié),求AJMPPR0的機器碼0000000100010000

001

00001

0000(2110h)a10a9a8a7a6a5a4a3a2a1a0濫哇確鎊暈燈耀雌輩評然疙洞淚剝憋的臟要衡濺脫瓣圭掠翼東沫餓縷牙喻第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計2.利用轉(zhuǎn)移指令表實現(xiàn)轉(zhuǎn)移分析:將鍵碼排成表,將鍵碼表中AJMPPR0的機器碼為2110H,PR1入口地址為0220HAJMPPR1的機器碼為4120H,轉(zhuǎn)移指令表JPT的內(nèi)容如下所示。設(shè)B=65H,鍵值為2:2041JPT+42002JPT+21021JPTAJMPPR0AJMPPR1AJMPPR2TAB3AHTAB+147HTAB+265HTAB+370H轉(zhuǎn)移指令表JPT鍵碼表TAB65HA2B2×AA=1A=2A=065H65H良合干霹陣子裴心州刮刀耍誼您沈隱額沖沛脾鎊雍代俏穿啦辭系榷扇肇滬第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計AJMPPR0的機器碼為2110H,PR1入口地址為02

ORG0000HMOVDPTR,#TAB;置鍵碼表首址MOVA,#0;表的起始位的偏移量為0NEXT:PUSHACCMOVCA,@A+DPTR;A=鍵碼表的編碼CJNEA,B,AGAN;將B中值和鍵碼表的值比較POPACCRLA;如相等,序號乘2得分支表內(nèi)偏移量MOVDPTR,#JPT;置分支表首址JMP@A+DPTRAGAN:POPACC;不相等比較下一個INCA;序號加1CJNEA,#5,NEXTSJMP$;鍵碼查完還沒有B中按鍵編碼程序結(jié)束JPT:AJMPPR0;分支轉(zhuǎn)移表AJMPPR1AJMPPR2AJMPPR3AJMPPR4TAB:DB3AH,47H,65H,70H,8BH;鍵碼表END啊褲顴訊炒么角增發(fā)顏吝隅癟醇船橙娠宮啟窯共初肇映煎滾玩嚷摧淑衷迭第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H啊褲顴訊炒么角當(dāng)程序中的某些指令需要反復(fù)執(zhí)行多次時,采用循環(huán)程序的方式,這樣會使程序縮短,節(jié)省存儲單元(并不節(jié)省執(zhí)行時間)。循環(huán)次數(shù)的控制,有兩種控制方式:第一種方法先判斷再處理即先判斷滿不滿足循環(huán)條件,如不滿足,就不循環(huán),多以循環(huán)條件控制。第二種方法先處理再判斷,即循環(huán)執(zhí)行一遍后,下一輪還需不需要進行,多以計循環(huán)次數(shù)控制。循環(huán)可以有單重循環(huán)和多重循環(huán),在多重循環(huán)中,內(nèi)外循環(huán)不能交叉,也不允許外循環(huán)跳入內(nèi)循環(huán)。下面通過幾個實例說明循環(huán)程序的設(shè)計方法。3.5循環(huán)程序設(shè)計處菩峨炯淀脊訖興左幟硬唆隔蚌脯翅鉑象懊耙菌硒諒檄械危晴廚酷換鮮常第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計當(dāng)程序中的某些指令需要反復(fù)執(zhí)行多次時,采用循環(huán)程序的例3-9設(shè)計一個延時10ms的延時子程序,已知單片機使用的晶振為6MHz。分析:延時時間與兩個因素有關(guān):晶振頻率和循環(huán)次數(shù)。由于晶振采用6MHz,一個機器周期是2μs,用單循環(huán)可以實現(xiàn)1ms延時,外循環(huán)10次即可達(dá)10ms延時。內(nèi)循環(huán)如何實現(xiàn)1ms延時呢,程序中可先以未知數(shù)MT代替,從附錄A查每條指令機器周期計算程序的執(zhí)行時間。

哇匪幅鄰允傍犁買打楚睛淳癟每蟲網(wǎng)益縫獨陣席喘童能谷扶鯨樞捏懶盧虐第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-9設(shè)計一個延時10ms的延時子程序,已知單片機使用ORG0020HMOVR0,#0AH;外循環(huán)10次DL2:MOVR1,#MT;內(nèi)循環(huán)MT次DL1:NOPNOP;空操作指令DJNZR1,DL1DJNZR0,DL2

RET內(nèi)循環(huán)DL1到指令DJNZR1,DL1的計算:(1+1+2)×2μS×MT=1000μSMT=125=7DH將7DH代入上面程序的MT,計算總的延時時間:{1+[1+(1+1+2)×125+2]*10}×2μS=10062μS=10.062mS若需要延時更長時間,可以采用多重循環(huán)。內(nèi)外栓冊妻涕沾賦拯啟津尺騎臍慚緩載吝甥吝愁倉糖莊彝馱家柏彬球幕趣舊伊第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0例3-10編寫多字節(jié)數(shù)×10程序。

內(nèi)部RAM以20H為首址的一片單元中存放著一個多字節(jié)符號數(shù),字節(jié)數(shù)存放在R7中,存放方式為低位字節(jié)在低地址,高位字節(jié)在高地址,要求乘10后的積仍存放在這一片單元中。

分析用R1作該多字節(jié)的

地址指針,部分積的低位仍

存放于本單元,部分積的高

位存放于R2,以便和下一

位的部分積的低位相加。

以R7作字節(jié)數(shù)計數(shù)。

編程如下:

345H0AH32H28H2BH1EH20BH險泣捧涎涎瞻儀載湘峙丘砷局俄袱富棲烤澡叭拖閑隕矮荊很綠矽噪塞妄肩第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-10編寫多字節(jié)數(shù)×10程序。

內(nèi)部RORG0000HCLRC;清進位位CMOVR1,#20H;R1指示地址MOVR2,#00H;存積的高八位寄存器R2清0S10:MOVA,@R1;取一字節(jié)送AMOVB,#0AH;10送BPUSHPSWMULAB;字節(jié)乘10POPPSWADDCA,R2;上次積高八位加本次積低八位MOV@R1,A;送原存儲單元MOVR2,B;積的高八位送R2INCR1;指向下一字節(jié)DJNZR7,S10;未乘完去SH10,否則向下執(zhí)行MOV@R1,B;存最高字節(jié)積的高位SJMP$殲鵲辟刷淘施杯淫匹鹵現(xiàn)些沂揩頂淑筏犯須崇椒曾線與鍺棱怒晝已矩鋼亦第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H殲鵲辟刷淘施杯淫匹鹵現(xiàn)些MCS-51單片機有著優(yōu)異的位邏輯功能,可以方便的實現(xiàn)各種復(fù)雜的邏輯運算.這種用軟件替代硬件的方法,可以大大簡化甚至完全不用硬件,但比硬件要多花運算時間。例3-17編寫一程序,以實現(xiàn)圖3-4中的邏輯運算電路.3.6位操作程序設(shè)計姻寓遮撮肘言屬淮曝段數(shù)甫彩拷料抨痙摻誤依棲田既滁府臂顆棒損障疙酵第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計MCS-51單片機有著優(yōu)異的位邏輯功能,可

其中P1.1和P2.2分別是端口線上的信息,TF0和IE1分別是定時器定時溢出標(biāo)志和外部中請求標(biāo)志,25H和26H分別是兩個位地址,運算結(jié)果由端口線P1.3輸出。

圖3-4硬件邏輯運算電路頂啡亞拎惋閘耗屋救臣脈魁赴扶章村幾使慣淀嗣誘隆刪辰奠停案食高贛湍第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計其中P1.1和P2.2分別是端口線上的信息,TF程序如下:START:MOVC,P2.2ORLC,TF0ANLC,P1.1MOVF0,CMOVC,IE1ORLC,/25HANLC,F0ANLC,/26HMOVP1.3,CSJMP$統(tǒng)獺絳酷漢簽憋諾朋熊婦綴溉去攣前尚壓慧蓉運盤柳割漱盜酞肚啡匣粵戈第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計程序如下:統(tǒng)獺絳酷漢簽憋諾朋熊婦綴溉去攣前尚壓慧蓉運盤柳割漱例3-18設(shè)累加器A的各位ACC.0~ACC.7分別記為X0~X7,編制程序用軟件實現(xiàn)下式:

Y=X0X1X2+X0X1X2+X0X1X2X3+X4X5X6X7

X0BITACC.0X1BITACC.1X2BITACC.2X3BITACC.3X4BITACC.4X5BITACC.5X6BITACC.6X7BITACC.7聳卵昂增悍丸嫌壹戈客靖亂角攙丫蘇圭曉免信車餐酒蛇菩超晝遼佐敦袱闡第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-18設(shè)累加器A的各位ACC.0~ACC.7分別記為X

ORG0000HMOVC,X0ANLC,X1ANLC,X2MOV00H,C;X0X1X2MOVC,X0ANLC,/X1MOV01H,C;X0X1ANLC,/X2ORLC,00HMOV00H,CMOVC,X2ANLC,01H

ANLC,X3;X0X1X2X3ORLC,/00HMOV00H,CMOVC,X7ANLC,/X6ANLC,/X5ANLC,/X4;X4X5X6X7ORLC,00H;最終結(jié)果Y→CSJMP$票扭悟行幀凱伏耳嚇祭拐俏劑霸哦釘東猿屹糟俗耳炯骸隙蓄灣烴釬唐液租第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000HANLC,X3;X0X1子程序是構(gòu)成單片機應(yīng)用程序必不可少的部分,通過ACALL和LCALL兩條子程序調(diào)用指令,可以十分方便地用來調(diào)用任何地址處的子程序。子程序節(jié)省占用的存儲單元,使程序簡短、清晰,善于靈活的使用子程序,是程序設(shè)計的重要技巧之一。子程序必須以RET指令結(jié)尾.在調(diào)用子程序時,有以下幾點應(yīng)注意:3.7子程序當(dāng)一段程序需多次應(yīng)用,或為多人應(yīng)用時,這段程序編為子程序.崖拽闡潮覓賒枯儲楚謂懶既盔軟友訝巧礎(chǔ)疾豬弟江廠蛆這簡泥嘉艙誰竟畸第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計子程序是構(gòu)成單片機應(yīng)用程序必不可少的部分

1)保護現(xiàn)場。如果在調(diào)用前主程序已經(jīng)使用了某些存儲單元或寄存器,在調(diào)用時,這些寄存器和存儲單元又有其他用途,就應(yīng)先把這些單元或寄存器中的內(nèi)容壓入堆棧保護,調(diào)用完后再從堆棧中彈出以便加以恢復(fù)。如果有較多的寄存器要保護,應(yīng)使主、子程序使用不同的寄存器組。2)設(shè)置入口參數(shù)和出口參數(shù)。用之前主程序要按子程序的要求設(shè)置好地址單元或存儲器(稱為入口參數(shù)),以便子程序從指定的地址單元或存儲器獲得輸入數(shù)據(jù);子程序經(jīng)運算或處理后的結(jié)果存放到指定的地址單元或寄存器(稱為出口參數(shù)),主程序調(diào)用后從指定的地址單元或寄存器讀取運算或處理后的結(jié)果,只有這樣,才能完成子程序和主程序間的數(shù)據(jù)的正確傳遞。味闡默迢柄蛾裝驕竭硬庚憎摧晝捻麥腳狂敗另著性撓皿姑銹揩伍籍殷耳藍(lán)第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1)保護現(xiàn)場。味闡默迢柄蛾裝驕竭硬庚憎摧晝捻麥腳狂敗另著3)子程序中可包括對另外子程序的調(diào)用,稱為子程序嵌套。例3-19用程序?qū)崿F(xiàn)c=a2+b2,設(shè)a,b均小于10。a存放在31H單元,b存放在32H單元,把c存入34H和33H單元。(和要求為BCD碼)。

解:因該算式兩次用到平方值,所以在程序中采用把求平方編為子程序的方法。求平方采用查表法,主程序和子程序編寫如下:煤鄰賢尖恭馮睹孔錠沫拌牡榮膨險喪漬哺瞅崇勃陸渣腮禿泰梁稿味撞帳臟第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計3)子程序中可包括對另外子程序的調(diào)用,稱為子程序嵌套。例3-主程序:

ORG0000HMOVSP,#3FHMOVA,31H;取aLCALLSQR;求a方MOVR1,AMOVA,32H;取bLCALLSQR;求b方ADDA,R1;求和DAA;調(diào)整MOV33H,AMOVA,#0ADDCA,#0MOV34H,ASJMP$子程序:

ORG0030HSQR:INCAMOVCA,@A+PCRETTAB:DB00H,01H,04HDB09H16H,25H,DB36H,49H64H,81HEND廉現(xiàn)籍沒族饞汲晦字蔥言儒靠民郁雄逢誼頂少紊崔訃樂樟縛記洋膿俘受廓第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計主程序:子程序:廉現(xiàn)籍沒族饞汲晦字蔥言儒靠民郁雄逢誼3.8小結(jié)1、程序設(shè)計的關(guān)鍵在于指令熟悉和算法(思路)正確、清晰,對復(fù)雜的程序應(yīng)先畫出流程圖。只有多做練習(xí)多上機調(diào)試,熟能生巧,才能編出高質(zhì)量的程序。2、偽指令是非執(zhí)行指令,提供匯編程序以匯編信息,應(yīng)正確使用。3、本章應(yīng)掌握順序程序、分支程序、循環(huán)程序、子程序等各類程序的設(shè)計方法,并能熟練應(yīng)用查表技術(shù)簡化程序的設(shè)計。賬鴕揭螟盅推聾末增沼氏奸政躬肄窄薄嚏啟骨液眷適林弄崇腆了碟搶耗部第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計3.8小結(jié)1、程序設(shè)計的關(guān)鍵在于指令熟悉和算法(思路)單片機原理、接口及應(yīng)用第3章匯編語言程序設(shè)計劉尊民瀑臼洪蘑室勢敵次漆畦瞥憐乒勤禍滴福恭昌奸鉛脖福駕要嗚芯文兜譽扶惕第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計單片機原理、接口及應(yīng)用第3章匯編語言程序設(shè)計瀑臼洪蘑室勢敵內(nèi)容提要★概述★偽指令★匯編語言程序設(shè)計步驟★順序程序設(shè)計★分支程序設(shè)計★循環(huán)程序設(shè)計★位操作程序設(shè)計★子程序★小結(jié)坎番唬雷娟費倒鐘助緯滌術(shù)火擇純沁澆息巡絹順袱捶滾豪鋇兌神慕焉湊樓第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計內(nèi)容提要★概述坎番唬雷娟費倒鐘助緯滌術(shù)火擇純沁澆息巡絹3.1概述 MCS-51單片機的編程語言可以是匯編語言也可以是高級語言(如C語言),高級語言編程快捷,但程序長,占用存儲空間大,執(zhí)行慢;匯編語言產(chǎn)生的目標(biāo)程序簡短,占用存儲空間小,執(zhí)行快,能充分發(fā)揮計算機的硬件功能。無論是高級語言還是匯編語言,源程序都要轉(zhuǎn)換成目標(biāo)程序(機器語言)單片機才能執(zhí)行。

芬俄饅剃區(qū)涅架韋叁情荒念鎖囊靳汰捅屹采量曬啥搬鵬澎熏肘霧傲翟簾賃第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計3.1概述 MCS-51單片機的編程語言可以是匯連接/定位器L51匯編語言源程序匯編器A51符號轉(zhuǎn)換程序OHS51絕對地址目標(biāo)程序.BINC語言程序浮動地址目標(biāo)程序編譯器C51

·HEX圖3-1兩種語言源程序轉(zhuǎn)換成目標(biāo)程序拋燦悠常權(quán)翰派意柏聳飾退孔淹陋贖赴惱鍺九軀華扯材幕膛裂嘯沿督期菩第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計連接/定位器匯編語言匯編器A51符號轉(zhuǎn)換程序OHS51絕對地

目前很多公司將編輯器、匯編器、編譯器、連接/定位器、符號轉(zhuǎn)換程序做成集成軟件包,用戶進入該集成環(huán)境,編輯好程序后,只需點擊相應(yīng)菜單就可以完成上述的各步,如WAVE、KEIL,WAVE集成軟件的使用見附錄。

匯編:將匯編語言源程序轉(zhuǎn)換成機器語言目標(biāo)程序的過程稱為匯編。

匯編程序:能將匯編語言源程序轉(zhuǎn)換成機器語言目標(biāo)程序的系統(tǒng)軟件稱為匯編程序。勞茁站慰附意奮井乃直炕解咎搪魔懸筷粟橫魯拍翻尸掖涪汐膳船島蓖瞧挾第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計目前很多公司將編輯器、匯編器、編譯器匯編的方法:匯編的方法有兩種1.手工匯編:人工查指令表,查出程序中每條指令對應(yīng)的機器代碼。早期的計算機使用。2.機器匯編:用計算機中的匯編程序?qū)τ脩粼闯绦蜻M行匯編。用機器匯編要提供給匯編一些信息,遵循匯編程序的一些約定。這些由偽指令指定。敏黃砧宇瓣散炒倍刃敵諱艦俗謬數(shù)黔皮書閹禾蝶打桐兵軌藥航議蘋吐禍盯第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計匯編的方法:匯編的方法有兩種敏黃砧宇瓣散炒倍刃敵諱艦俗謬數(shù)黔1)確定程序中每條匯編語言指令的指令機器碼2)確定每條指令在存儲器中的存放地址3)提供錯誤信息 4)提供目標(biāo)執(zhí)行文件(*.OBJ/*.HEX)和列表文件(*.LST)地址 機器碼 源程序 ORG 2000H 2000H7830 MAIN: MOVR0,#30H2002HE6 MOVA,@R0 …

沸力嘔刊慣窘忍賀圃務(wù)聰夜遏岡迢返熄朔甥巋楞億照訂愛墟毒葬剎愚拆量第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1)確定程序中每條匯編語言指令的指令機器碼地址 1.機器指令:指令系統(tǒng)中的全部指令。每條機器指令都有對應(yīng)的機器代碼,可以被CPU執(zhí)行。2.偽指令:匯編控制指令,沒有指令代碼,只用于匯編過程,為匯編程序提供匯編信息。一、匯編語言指令類型

宏匯編功能:將需要反復(fù)多次執(zhí)行的程序段定義成一個宏指令名(宏定義)。編程時,可在程序中使用宏指令名來替代被定義的程序段(宏調(diào)用)。3.2偽指令茂囊希兆鵝燎篩節(jié)同拋乘參服撬沖誘揮店避件范坡椅迸一怔揀梗常疥料納第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1.機器指令:指令系統(tǒng)中的全部指令。每條機器指令都有對應(yīng)的宏定義過程:宏調(diào)用過程: … 宏指令名實際參數(shù) … 宏指令名實際參數(shù)宏指令名MACRO形式參數(shù) … ;被定義的程序段

ENDM蒸氮叢篇杏框魚肉殖慶緒股吉刷灰柒坍傈均航填店侶蹬壘遜糟傘攝息以謝第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計宏定義過程:宏調(diào)用過程:宏指令名MACRO形式參數(shù)二.偽指令常用偽指令及功能:1.起始指令ORGnn功能:定義程序或數(shù)據(jù)塊的起始地址。指示此語句后面的程序或數(shù)據(jù)塊以nn為起始地址,連續(xù)存放在程序存儲器中。

指令地址機器碼 源程序 ORG 2000H 2000H7830 MAIN: MOVR0,#30H2002HE6 MOVA,@R0 … ORG3000H3000H23 TAB:DB23H,100,‘A’3001H643002H41鄒舵惠健棧滁咸助只絨司稀娜捷陡簾彬祥蓋撮堿悔賒共惋藏寨沁贏跪尖裔第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計二.偽指令常用偽指令及功能:1.起始指令ORG2.字節(jié)定義標(biāo)號:DB(字節(jié)常數(shù),或字符或表達(dá)式)功能:指示在程序存儲器中以標(biāo)號為起始地址的單元里存放的數(shù)為字節(jié)數(shù)據(jù)(八位二進制數(shù))。例如LN:DB32,’C’,25H,-1;LN~LN+2地址單元依次存放20H,43H,25H,F(xiàn)FH地址

數(shù)據(jù)LN20LN+143LN+225LN+3FF3.字定義標(biāo)號:DW(字常數(shù)或表達(dá)式)作用:指示在程序存儲器中以標(biāo)號為起始地址的單元里存放的數(shù)為字?jǐn)?shù)據(jù)(即16位的二進制數(shù)),例如:GH:DW1234H,5678H,08GH1234GH+25678GH+40008姻睜食臥訛襟安狂樊躍佛貴滑姚販綸眾武炭撓承闊銹抒文吮顯謾甩仍解絕第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計2.字節(jié)定義標(biāo)號:DB(字節(jié)常數(shù),或字符或表達(dá)式)地5.等值指令標(biāo)號EQU(數(shù)值表達(dá)式)

表示EQU兩邊的量等值,用于為標(biāo)號或標(biāo)識符賦值。

例如:X1 EQU2000H

X2 EQU0FH

MAIN:MOVDPTR,#X1;DPTR=2000H ADDA,#X2;A=A+0FH4.保留字節(jié)標(biāo)號:DS(數(shù)值表達(dá)式)作用:

指示在程序存儲器中保留以標(biāo)號為起始地址的若干字節(jié)單元,其單元個數(shù)由數(shù)值表達(dá)式指定。例如L1:DS32;從L1地址開始保留32個存儲單元。炬鄖肋凋讓膏連池?fù)锘炱夹谴璞迯d概滴挺細(xì)華鬼湃柬普注嘲勒晶孕賄上掇第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計5.等值指令標(biāo)號EQU(數(shù)值表達(dá)式)

6.位定義

標(biāo)號BIT[位地址]作用:

同EQU指令,不過定義的是位操作地址。例如AICBITP1.1。7.匯編結(jié)束END作用:

指示源程序段結(jié)束。

END指令放在程序的最后。A51匯編程序還有一些其它的偽指令,列在教材表3-1中,以備查閱。訛批竣械也奇推臣吠梳鷹自催禱周絡(luò)術(shù)合悔爾格歡棕窖俐爐刑濰飲唁矣悍第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計6.位定義標(biāo)號BIT[位地址]7.匯編結(jié)束匯編語言程序設(shè)計步驟一.確定方案和計算方法二.了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo)三.建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟四.合理分配存儲器單元和了解I/O接口地址五.編制源程序1.按功能設(shè)計程序,明確各程序之間的相互關(guān)系2.用流程圖表示程序結(jié)構(gòu)和功能開始1YN?3.程序中用注釋說明指令在程序中的作用,方便閱讀、調(diào)試和修改填仇蒂柏尖茫午俏杰飲毒源彈刪翁尺釬陌莆卷罪椰宙精久糠式稱澤烴肘敘第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計匯編語言程序設(shè)計步驟一.確定方案和計算方法五.編制源程序開

順序程序設(shè)計例3-1編程將外部數(shù)據(jù)存儲器的000EH和000FH單元的內(nèi)容相換。

常用程序結(jié)構(gòu)

順序程序、分支程序、

循環(huán)程序、子程序000EH000FH000EH000FH000EH000FH000EH000FH分析:外部數(shù)據(jù)存儲器的數(shù)據(jù)操作只能用MOVX指令,且只能和A之間傳送,因此必須用一個中間環(huán)節(jié)作暫存,設(shè)用20H單元。用R0、R1指示兩單元的低八位地址,高八位地址由P2指示。編程過程如下:000EH000FH000EH000FH000EH000FH軟零谷振害綴螞蠱幸掌仇凹肢亨文液并寞駕愈烈鬃繭摘煽飛穩(wěn)舞協(xié)瞳陡丑第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計順序程序設(shè)計常用程序結(jié)構(gòu)

順序程序、ORG0000HMOVP2,#0H;送地址高八位至P2口MOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=OFHMOVXA,@R0;A=(000EH)MOV20H,A;(20H)=(000EH)MOVXA,@R1;A=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)MOVX@R1,AMOVA,20HMOVX@R0,A;交換后的數(shù)送各單元SJMP$END鎬故戶嘲漱終遺裝棟筆啡能虹槳予喜聯(lián)蕾菩兄梗祥麓由噸政皋歲墳酚網(wǎng)呼第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H鎬故戶嘲漱終遺裝棟筆啡能虹槳予喜聯(lián)蕾

3.3順序程序設(shè)計順序程序(簡單程序),程序走向只有一條路徑逢佃峙冗教赴社頂陰襖須珠儡傈薊呀昔凄箔媽只淑亂鄧?yán)畬O曾稱新嚼蹤睛第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計3.3順序程序設(shè)計逢佃峙冗教赴社頂陰襖例3-3分解壓縮式BCD碼,使其成為非壓縮式BCD碼。ORG0000HMOV R0,#40H ;設(shè)指針MOV A,@R0 ;取一個字節(jié)MOV R2,A ;暫存ANL A,#0FH ;清0高半字節(jié)INC R0MOV @R0,A ;保存數(shù)據(jù)個位片內(nèi)RAM42H41H40H65MOV A,R2SWAPA ;十位換到低半字節(jié)ANL A,#0FHINC R0MOV @R0,A ;保存數(shù)據(jù)十位END0506甚跨廢皺糧疽檔剪銘虐取匡斜憶犀峽肇叢燈壺耳窟圃嘿彼絢巢蘿惱鍘曬站第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-3分解壓縮式BCD碼,使其成為非壓縮式BCD碼。OR地址數(shù)據(jù)TAB0TAB+11TAB+24TAB+39TAB+416HTAB+525H例3-4設(shè)變量放在片內(nèi)RAM的20H單元,其值為00H~05H之間,要求編查表程序,查出變量的平方值,并放入片內(nèi)RAM的21H單元。

ORG0000HMOVDPTR,#TABMOVA,20HMOVCA,@A+DPTR;查表MOV21H,ASJMP$TAB2:DB00H,01H,04H,09H,16H,25HEND分析:在程序存儲器安排一張平方表,首地址為TAB,以DPTR指向表首址,A存放變量值,利用查表指令MOVCA,@A+DPTR,即可求得。表中數(shù)據(jù)用BCD碼存放合乎人們的習(xí)慣.如果平方值為兩個字節(jié),程序應(yīng)如何編。DPTRA隴仍寵惟粟宗蠕緩怨世繪規(guī)迪敝潞薦皚芬浙幕綏就縫半賄趁琴卞像蕾灘汕第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計地址數(shù)據(jù)TAB0TAB+11TAB+24TAB+39TAB+ ORG0000HMOVA,R2

JNBACC.7,N;為正數(shù)?

CPLA ;負(fù)數(shù)變補

INCA

MOVR2,AN:SJMP$ ;結(jié)束

3.4分支程序的設(shè)計

由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成分支結(jié)構(gòu)3.5.1單分支程序一個判斷決策框,兩種分支結(jié)構(gòu)圖。條件滿足?N影響條件Y處理段條件滿足?N影響條件Y處理1處理2例1求8位有符號數(shù)的絕對值。方法:正數(shù)不變,負(fù)數(shù)變補績捎溺汲聞梢塊趴酶渾幅既碧桐貨葡代東鍛閡緊瘸昭勁績低語鼓蔚摩岸則第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計 ORG0000H例2用單片機加重力傳感器作磅秤,秤出重量后算出行李運費價格,其秤出的重量以10kg為1個計價單位G,G已存入40H單元。計價方法

為50kg以內(nèi)按3元,50kg以上

分段計價:50kg按3元計價

,超過部分按2元計價。

由此列出算式:

G×3+(G-5)×2;當(dāng)G>5M=G×3;當(dāng)G≤53G因重復(fù)使用,先暫存在R2。流程見左,程序如下:詢郎壬二族良漿亂淬系唯然完鈞狀墨租倦帶荔窄矛盔避忘站籮崇努孫吵拌第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例2用單片機加重力傳感器作磅秤,秤出重量后算出行多分支散轉(zhuǎn)程序的設(shè)計

有一類分支程序,它根據(jù)不同的輸入條件或不同的運算結(jié)果,轉(zhuǎn)向不同的處理程序,稱之為散轉(zhuǎn)程序。這類程序通常利用JMP@A+DPTR間接轉(zhuǎn)移指令實現(xiàn)轉(zhuǎn)移。有如下兩種設(shè)計方法:

1.查轉(zhuǎn)移地址表:將轉(zhuǎn)移地址列成表格,將表格的內(nèi)容作轉(zhuǎn)移的目標(biāo)地址。2.查轉(zhuǎn)移指令表:將轉(zhuǎn)移到不同程序的轉(zhuǎn)移指令列成表格,判斷條件后查表,轉(zhuǎn)到表中指令執(zhí)行,下面用兩個例子說明。豪假梧啦薦卉俏與灣浮翰式少過怪湘村姚墑咬歧霸刻錠輥陳注貓恕職遼宙第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計多分支散轉(zhuǎn)程序的設(shè)計豪假梧啦薦卉俏與灣浮翰式少過怪湘村姚1.利用轉(zhuǎn)移地址表實現(xiàn)轉(zhuǎn)移例3-7根據(jù)R3的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序,R3的內(nèi)容為0~n,處理程序的入口符號地址分別為PR0~PRn(n<128)。分析:將PR0—PRn入口地址列在表格中,每一項占兩個單元,PRn在表中的偏移量為2n,因此將R3的內(nèi)容乘2即得PRn在表中的偏移地址,從偏移地址2n和2n+1兩個單元分別取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即轉(zhuǎn)移到PRn入口執(zhí)行。叢鳥娠督耶裂帆員簾涂率惟歸寇勉澀瞎琉戰(zhàn)療碗妙屈又疇談塑亨鮮銳掠詢第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計1.利用轉(zhuǎn)移地址表實現(xiàn)轉(zhuǎn)移叢鳥娠督耶裂帆員簾涂率惟歸寇勉澀ORG0000HMOVA,R3;R3→AADDA,ACC;A*2MOVDPTR,#TABPUSHACCMOVCA,@A+DPTR;取地址表中高字節(jié)MOVB,A;暫存于BINCDPTRPOPACCMOVCA,@A+DPTR;取地址表中低字節(jié)MOVDPL,AMOVDPH,B;DPTR為表中地址CLRA;A=0JMP@A+DPTR;轉(zhuǎn)移TAB:DWPR0,PR1,PR2,…..,PRn;轉(zhuǎn)移地址表END01100220..TABTAB+2DPHDPL例如R3=1的操作0220木網(wǎng)師弓吐輕猙暮嶼裴酌漣族殘素沾擲己果鷹曝目藏舔章洲愛帆抑睜板廉第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H01100220..TABTAB+2DPH2.利用轉(zhuǎn)移指令表實現(xiàn)轉(zhuǎn)移

例3-8設(shè)有五個按鍵0、1、2、3、4其編碼分別為3AH、47H、65H、70H、8BH,要求根據(jù)按下的鍵轉(zhuǎn)向不同的處理程序,分別為PR0、PR1//PR2、PR3、PR4,設(shè)按鍵的編碼已在B寄存器中,編出程序。分析:將鍵碼排成表,將鍵碼表中的值和B中的鍵編碼比對,記下在鍵碼表中和B中的鍵編碼相等的序號,另安排一個轉(zhuǎn)移表,安排AJMP指令(機器碼),因每條AJMP指令占二字節(jié),將剛才記下的序號乘2即為轉(zhuǎn)移表的偏移地址,利用JMP@A+DPTR執(zhí)行表內(nèi)的AJMP指令,從而實現(xiàn)多分支轉(zhuǎn)移,設(shè)JPT的地址為001AH、PR0入口地址為0110H、,參考2.4.2節(jié),求AJMPPR0的機器碼0000000100010000

001

00001

0000(2110h)a10a9a8a7a6a5a4a3a2a1a0濫哇確鎊暈燈耀雌輩評然疙洞淚剝憋的臟要衡濺脫瓣圭掠翼東沫餓縷牙喻第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計2.利用轉(zhuǎn)移指令表實現(xiàn)轉(zhuǎn)移分析:將鍵碼排成表,將鍵碼表中AJMPPR0的機器碼為2110H,PR1入口地址為0220HAJMPPR1的機器碼為4120H,轉(zhuǎn)移指令表JPT的內(nèi)容如下所示。設(shè)B=65H,鍵值為2:2041JPT+42002JPT+21021JPTAJMPPR0AJMPPR1AJMPPR2TAB3AHTAB+147HTAB+265HTAB+370H轉(zhuǎn)移指令表JPT鍵碼表TAB65HA2B2×AA=1A=2A=065H65H良合干霹陣子裴心州刮刀耍誼您沈隱額沖沛脾鎊雍代俏穿啦辭系榷扇肇滬第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計AJMPPR0的機器碼為2110H,PR1入口地址為02

ORG0000HMOVDPTR,#TAB;置鍵碼表首址MOVA,#0;表的起始位的偏移量為0NEXT:PUSHACCMOVCA,@A+DPTR;A=鍵碼表的編碼CJNEA,B,AGAN;將B中值和鍵碼表的值比較POPACCRLA;如相等,序號乘2得分支表內(nèi)偏移量MOVDPTR,#JPT;置分支表首址JMP@A+DPTRAGAN:POPACC;不相等比較下一個INCA;序號加1CJNEA,#5,NEXTSJMP$;鍵碼查完還沒有B中按鍵編碼程序結(jié)束JPT:AJMPPR0;分支轉(zhuǎn)移表AJMPPR1AJMPPR2AJMPPR3AJMPPR4TAB:DB3AH,47H,65H,70H,8BH;鍵碼表END啊褲顴訊炒么角增發(fā)顏吝隅癟醇船橙娠宮啟窯共初肇映煎滾玩嚷摧淑衷迭第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0000H啊褲顴訊炒么角當(dāng)程序中的某些指令需要反復(fù)執(zhí)行多次時,采用循環(huán)程序的方式,這樣會使程序縮短,節(jié)省存儲單元(并不節(jié)省執(zhí)行時間)。循環(huán)次數(shù)的控制,有兩種控制方式:第一種方法先判斷再處理即先判斷滿不滿足循環(huán)條件,如不滿足,就不循環(huán),多以循環(huán)條件控制。第二種方法先處理再判斷,即循環(huán)執(zhí)行一遍后,下一輪還需不需要進行,多以計循環(huán)次數(shù)控制。循環(huán)可以有單重循環(huán)和多重循環(huán),在多重循環(huán)中,內(nèi)外循環(huán)不能交叉,也不允許外循環(huán)跳入內(nèi)循環(huán)。下面通過幾個實例說明循環(huán)程序的設(shè)計方法。3.5循環(huán)程序設(shè)計處菩峨炯淀脊訖興左幟硬唆隔蚌脯翅鉑象懊耙菌硒諒檄械危晴廚酷換鮮常第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計當(dāng)程序中的某些指令需要反復(fù)執(zhí)行多次時,采用循環(huán)程序的例3-9設(shè)計一個延時10ms的延時子程序,已知單片機使用的晶振為6MHz。分析:延時時間與兩個因素有關(guān):晶振頻率和循環(huán)次數(shù)。由于晶振采用6MHz,一個機器周期是2μs,用單循環(huán)可以實現(xiàn)1ms延時,外循環(huán)10次即可達(dá)10ms延時。內(nèi)循環(huán)如何實現(xiàn)1ms延時呢,程序中可先以未知數(shù)MT代替,從附錄A查每條指令機器周期計算程序的執(zhí)行時間。

哇匪幅鄰允傍犁買打楚睛淳癟每蟲網(wǎng)益縫獨陣席喘童能谷扶鯨樞捏懶盧虐第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-9設(shè)計一個延時10ms的延時子程序,已知單片機使用ORG0020HMOVR0,#0AH;外循環(huán)10次DL2:MOVR1,#MT;內(nèi)循環(huán)MT次DL1:NOPNOP;空操作指令DJNZR1,DL1DJNZR0,DL2

RET內(nèi)循環(huán)DL1到指令DJNZR1,DL1的計算:(1+1+2)×2μS×MT=1000μSMT=125=7DH將7DH代入上面程序的MT,計算總的延時時間:{1+[1+(1+1+2)×125+2]*10}×2μS=10062μS=10.062mS若需要延時更長時間,可以采用多重循環(huán)。內(nèi)外栓冊妻涕沾賦拯啟津尺騎臍慚緩載吝甥吝愁倉糖莊彝馱家柏彬球幕趣舊伊第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計ORG0例3-10編寫多字節(jié)數(shù)×10程序。

內(nèi)部RAM以20H為首址的一片單元中存放著一個多字節(jié)符號數(shù),字節(jié)數(shù)存放在R7中,存放方式為低位字節(jié)在低地址,高位字節(jié)在高地址,要求乘10后的積仍存放在這一片單元中。

分析用R1作該多字節(jié)的

地址指針,部分積的低位仍

存放于本單元,部分積的高

位存放于R2,以便和下一

位的部分積的低位相加。

以R7作字節(jié)數(shù)計數(shù)。

編程如下:

345H0AH32H28H2BH1EH20BH險泣捧涎涎瞻儀載湘峙丘砷局俄袱富棲烤澡叭拖閑隕矮荊很綠矽噪塞妄肩第3章MCS51單片機匯編語音程序設(shè)計第3章MCS51單片機匯編語音程序設(shè)計例3-10編寫多字節(jié)數(shù)×10程序。

內(nèi)部RORG0000HCLRC;清進位位CMOVR1,#20H;R1指示地址MOVR2,#00H;存積的高八位寄存器R2清0S10:MOVA,@R1;取一字節(jié)送AMOVB,#0AH;10送BPUSHPSWMULAB;字節(jié)乘10POPPSWADDCA,R2;上次積高八位加本次積低八位MOV@R1,A;送原存儲單元MOVR2,B

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論