程序設(shè)計(jì)單片機(jī)電子教案公開課一等獎?wù)n件省課獲獎?wù)n件_第1頁
程序設(shè)計(jì)單片機(jī)電子教案公開課一等獎?wù)n件省課獲獎?wù)n件_第2頁
程序設(shè)計(jì)單片機(jī)電子教案公開課一等獎?wù)n件省課獲獎?wù)n件_第3頁
程序設(shè)計(jì)單片機(jī)電子教案公開課一等獎?wù)n件省課獲獎?wù)n件_第4頁
程序設(shè)計(jì)單片機(jī)電子教案公開課一等獎?wù)n件省課獲獎?wù)n件_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

演示文稿標(biāo)題

演示文稿副標(biāo)題講師

課程第1頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

匯編語言和機(jī)器語言都是面向硬件語言,因此使用者需要對MCS-51單片機(jī)硬件構(gòu)造有深入理解,本章將在第3章對指令系統(tǒng)介紹基礎(chǔ)上,對匯編語言程序設(shè)計(jì)某些基本概念和基本程序設(shè)計(jì)辦法進(jìn)行說明。4.1匯編語言概述4.1.1匯編語言語句格式

典型匯編語言語句格式為[標(biāo)號:][操作碼][操作數(shù)];[注釋]

例:TAB: MOV A,#33H ;A←立即數(shù)33H第2頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)1.標(biāo)號

標(biāo)號代表是一種符號地址,它是可由顧客定義,它說明了該匯編語言指令地址,用于其他語句對它訪問。在標(biāo)號定義及使用中應(yīng)注意:

(1)標(biāo)號能夠由1~8個字符組成,且起始第一種字符必須是字母。假如其長度超出8個字符,則只有前8個字符有效,其他無效。我們在定義標(biāo)號時,最佳讓它含義與其后語句功能有關(guān)聯(lián),這樣能夠方便后來對程序閱讀和修改;

(2)在同一程序中,標(biāo)號不能反復(fù)定義;

(3)定義標(biāo)號時,應(yīng)注意不能與系統(tǒng)預(yù)留符號反復(fù),例如助記符、偽指令及寄存器符號名等。第3頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)2.操作碼

操作碼用來要求語句要執(zhí)行操作,它在一條匯編語言語句中是不可缺乏,它由指令系統(tǒng)中指令助記符組成。3.操作數(shù)

使用指令不一樣,所使用操作數(shù)個數(shù)也會不一樣,一般有單操作數(shù)、雙操作數(shù)和無操作數(shù)三種情況。雙操作數(shù)之間應(yīng)使用“,”分隔。

(1)常數(shù)

在匯編語言指令中,常數(shù)應(yīng)以一種表達(dá)數(shù)制后綴結(jié)束(二進(jìn)制“B”、十進(jìn)制“D”、十六進(jìn)制“H”);假如操作數(shù)以十六進(jìn)制表達(dá),且開頭為A~F中某個字母表達(dá),則應(yīng)在其前加入數(shù)字“0”。第4頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

(2)工作寄存器名

通過PCW中RS1、RS0所指定目前工作寄存器中8個工作寄存器名都能夠使用,R0~R7。

(3)特殊功能寄存器名MCS-51單片機(jī)所有特殊功能寄存器名都能夠作為操作數(shù)使用。

(4)標(biāo)號

使用標(biāo)號作為操作數(shù)時,應(yīng)注意只能引用在本條指令之前出現(xiàn)標(biāo)號。

(5)$

美元符號也能夠作為操作數(shù)使用,表達(dá)是目前PC值(即其所在指令操作碼所在地址),它經(jīng)常被用在轉(zhuǎn)移類指令中。第5頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例:JNBCY,$當(dāng)CY=0時,程序在這條指令處循環(huán)執(zhí)行,等價于STANDBY:JNB CY,STANDBY

(6)體現(xiàn)式

能夠使用體現(xiàn)式作為操作數(shù)。例如:MOV A,NUM+1

指令執(zhí)行時,先計(jì)算NUM+1值,然后將成果送入A中。4.注釋

注釋部分用“;”與功能語句分開,它是對程序說明,使程序具有良好可讀性。匯編語言與高級語言相比,可讀性較差,因此應(yīng)在編寫過程中合適加入注釋。第6頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.1.2匯編語言程序設(shè)計(jì)步驟

(1)分析設(shè)計(jì)任務(wù),確定算法

(2)繪制流程圖

(3)系統(tǒng)資源分派

(4)代碼編寫及優(yōu)化

(5)上機(jī)調(diào)試及修改

在程序設(shè)計(jì)中,要采取模塊化程序設(shè)計(jì)辦法,將復(fù)雜程序分解為若干個簡單、功能專一程序模塊,每個模塊只完成某一種詳細(xì)功能,這樣對于程序開發(fā)和調(diào)試及最后代碼優(yōu)化都有很大好處。第7頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.1.3匯編語言程序基本構(gòu)造

匯編語言程序設(shè)計(jì)一般采取構(gòu)造化設(shè)計(jì)辦法,主要有四種構(gòu)造形式:次序構(gòu)造、分支構(gòu)造、循環(huán)構(gòu)造和子程序。1.次序構(gòu)造

次序構(gòu)造是最基本一種程序構(gòu)造,程序中無分支、無循環(huán)、不調(diào)用子程序,程序運(yùn)行時按照語句次序一條一條執(zhí)行。例4-1:對工作寄存器、數(shù)據(jù)單元或某些端口設(shè)置初值,將R0、R1置“1”,R3、R4清“0”,P0口清“0”,3FH、42H單元清“0”。第8頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

MOV R0,#0FFHMOV R1,#0FFHMOV R3,#00HMOV R4,#00HMOV P0,#00HMOV 3FH,#00HMOV 42H,#00H例4-2:

已知外部RAM40H單元中寄存有8位二進(jìn)制數(shù)據(jù),要求將其拆分為兩個4位二進(jìn)制數(shù)據(jù),將高四位送入原單元低四位,原單元高四位清零;將拆分得到低四位數(shù)據(jù)送入50H單元第四位,同步將50H單元高四位也清零。第9頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)MOV R0,#40HSWAP AMOV R1,#50HMOVX @R0,AMOVX A,@R0ANL B,#0FHMOV B,AMOV A,BANL A,#0F0HMOVX @R1,A2.分支構(gòu)造

分支構(gòu)造式通過轉(zhuǎn)移類指令實(shí)現(xiàn),可通過某些標(biāo)志來對程序流向進(jìn)行控制。常見分支程序構(gòu)造有單分支構(gòu)造和多分支構(gòu)造兩種。

在多分支構(gòu)造下,先將各分之程序編號排列,然后按照編號進(jìn)行轉(zhuǎn)移。圖4-1為n分支構(gòu)造示意圖。多分支構(gòu)造有一般多分支及散轉(zhuǎn)多分支兩種常見形式。第10頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)(1)一般多分支構(gòu)造

例4-3:函數(shù)定義如下,其中x、y均為8位二進(jìn)制有符號數(shù),x寄存在R0中,y寄存在R1中。第11頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)START: MOV A,R0 ;將R0中內(nèi)容送入A中 CJNE A,#00H,TEST1 ;判斷A中數(shù)據(jù),不為零則轉(zhuǎn)移至TEST1 MOV R1,#00H ;R0中內(nèi)容為零則將0送入R1中 AJMP DONE ;轉(zhuǎn)入結(jié)束TEST1: JB ACC.7,NEG ;判斷A最高位狀態(tài),為1則轉(zhuǎn)入NEG MOV R1,#01H ;A最高位為0,將+1送入R1中 AJMP DONE ;轉(zhuǎn)入結(jié)束NEG: MOV R1,#0FFH ;A中數(shù)據(jù)位負(fù)數(shù),送-1入R1中DONE: END ;結(jié)束第12頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)圖4-2

一般多分支程序流程圖第13頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)(2)散轉(zhuǎn)多分支構(gòu)造例4-4:設(shè)計(jì)128路分支程序,根據(jù)R5中分支號,轉(zhuǎn)移到對應(yīng)分支程序。方案一: JMP: MOV DPTR,#TAB MOV A,R5 RL A JMP @A+DPTR TAB: AJMP OP0 AJMP OP1

…… AJMP OP126 AJMP OP127第14頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)方案二:JMP: MOV DPTR,#TAB MOVC A,@A+DPTR JMP @A+DPTR TAB: DB OP0 DB OP1

…… DB OP126 DB OP127 OP0: …… OP1: ……

…… OP126: …… OP127: ……第15頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)3.循環(huán)構(gòu)造

在程序中,假如需要對某段程序進(jìn)行連續(xù)反復(fù)執(zhí)行時,一般會采取循環(huán)構(gòu)造。使用循環(huán)構(gòu)造程序具有存放器空間占用少、構(gòu)造緊湊等特點(diǎn)。

循環(huán)程序構(gòu)造一般由下列幾部分組成。

(1)循環(huán)體。程序中被連續(xù)反復(fù)執(zhí)行程序部分稱為循環(huán)體;

(2)循環(huán)初值。對用于循環(huán)過程工作單元置初值,一般在循環(huán)開始時進(jìn)行,如循環(huán)次數(shù)、地址指針及有關(guān)寄存器或工作單元清零等;

(3)循環(huán)控制。要根據(jù)循環(huán)結(jié)束條件,判斷循環(huán)是否結(jié)束;

(4)循環(huán)控制變量修改。每循環(huán)一次,要對循環(huán)次數(shù)及對應(yīng)地址指針等進(jìn)行修改。第16頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

循環(huán)構(gòu)造下,對循環(huán)結(jié)束條件判斷能夠在循環(huán)體執(zhí)行之前也能夠在循環(huán)體執(zhí)行之后,這樣就有了所謂“先循環(huán)后判斷”及“先判斷后循環(huán)”兩種組織形式。第17頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例4-5:延時程序設(shè)計(jì)(單循環(huán)) MOV R2,#data DELAY: DJNZ R2,DELAY RET

上面程序可實(shí)現(xiàn)軟件延時功能,第一條指令為單周期指令,第二條為雙周期指令。根據(jù)R2中設(shè)置值不一樣,可實(shí)現(xiàn)3~512個機(jī)器周期時間延時功能。例4-6:延時程序設(shè)計(jì)(多循環(huán))

假設(shè)CPU采取12MHz晶體振蕩器,這時一種機(jī)器周期時間長度為1μs,這樣按照前面例子中辦法,由于工作寄存器長度為8位,可實(shí)現(xiàn)最大循環(huán)次數(shù)只能達(dá)成256次,可實(shí)現(xiàn)最大延時可為512μs,假如要求延時時間長度為10ms,只使用單循環(huán)辦法顯然不能滿足要求。第18頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)DJNZ指令為雙周期指令,在采取12MHz晶體振蕩器情況下,每執(zhí)行一次,可實(shí)現(xiàn)2延時,假如想實(shí)現(xiàn)10延時,需要執(zhí)行5000次,我們能夠采取雙重循環(huán)方式,循環(huán)次數(shù)能夠?yàn)?00×50,程序如下: MOV R0,#100 ;執(zhí)行時間1個機(jī)器周期1DELAY: MOV R1,#50 ;DELAY1: DJNZ R1,DELAY1 ;延時時間50×2=100 DJNZ R0,DELAY ;延時時間100×100=10 RET第19頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例4-7:已知某字符串寄存在MCS-51單片機(jī)內(nèi)部RAM中,該字符串是以“#”作為結(jié)尾,已知字符串寄存區(qū)起始地址,統(tǒng)計(jì)該字符串中字符個數(shù)。

字符串在存放器中存放是以其所對應(yīng)ASCII碼形式寄存,因此從存放器內(nèi)部存放單元內(nèi)容角度看,即是在存放器某一區(qū)域連續(xù)存放了若干個單字節(jié)十六進(jìn)制數(shù)。本例中字符串結(jié)束是以“#”為標(biāo)志,根據(jù)查詢器對應(yīng)ASCII碼為23H。為了實(shí)現(xiàn)查詢功能只需要依次將字符串個字符所對應(yīng)ASCII碼值與23H相比較即可。

下面程序中,xxH為字符串存放首地址,yyH中為字符個數(shù)START: MOV R0,#xxH ;地址指向字符串首地址 XOR A,A ;清除A第20頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)L_CMP: CJNE @R0,#23H,FIND ;將字符與“#”比較,不相同轉(zhuǎn)移FIND SJMP DONE ;相同,轉(zhuǎn)移至DONEFIND: INC A ;字符個數(shù) INC R0 ;地址指向下一字符 SJMP L_CMP ;繼續(xù)與“#”比較DONE: INC A ;字符個數(shù)加1,由于“#”也似字符 MOV yyH,A ;將字符個數(shù)送入yyH中 END第21頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.子程序

子程序就是具有一定功能獨(dú)立程序段。在程序執(zhí)行過程中,根據(jù)需要執(zhí)行某些特性功能時,會對子程序進(jìn)行調(diào)用,這樣能夠避免對具有同樣功能程序反復(fù)編寫,對程序整體效率提升、體積減小及可讀性提升具有良好效果。一般,在匯編語言程序中都會包括若干段子程序。

(1)子程序調(diào)用與返回

程序執(zhí)行過程中,調(diào)用子程序程序稱為主程序。子程序調(diào)用過程是通過長調(diào)用指令LCALLaddr16和絕對調(diào)用指令A(yù)CALLaddr11實(shí)現(xiàn)。長調(diào)用指令中直接給出了被調(diào)用子程序16位入口地址;而絕對調(diào)用指令中值給出了11位地址,需要將它與程序計(jì)數(shù)器PC中高5位內(nèi)容合并,形成16位子程序調(diào)用入口地址。第22頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

發(fā)生子程序調(diào)用時,主程序執(zhí)行次序發(fā)生變化,PC中值不再按照地址由低至高增加次序執(zhí)行,而要轉(zhuǎn)向子程序入口地址處繼續(xù)執(zhí)行程序。因此,需要對程序斷點(diǎn)進(jìn)行保護(hù),這一保護(hù)過程是通過將PC中內(nèi)容壓入堆棧,然后再將PC中內(nèi)容修改為子程序入口地址來實(shí)現(xiàn)。

在調(diào)用執(zhí)行子程序過程中,也許會使用某些工作寄存器或累加器,其中也許寄存了之前主程序運(yùn)行過程中中間成果數(shù)據(jù),這些數(shù)據(jù)在調(diào)用執(zhí)行完成之后仍然要在主程序運(yùn)行中使用,為了使主程序在調(diào)用完成之后運(yùn)行不發(fā)生異常,一般要根據(jù)需要將這些數(shù)據(jù)也做保護(hù),這一過程成為保護(hù)現(xiàn)場。

調(diào)用過程結(jié)束后返回是通過RET指令來實(shí)現(xiàn),它能夠?qū)⒍褩V斜4鏀帱c(diǎn)(主程序返回地址)送回PC程序計(jì)數(shù)器中,這一過程成為恢復(fù)斷點(diǎn)。第23頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

(2)子程序構(gòu)造

子程序構(gòu)造與一般匯編語言程序沒有本質(zhì)區(qū)分,只是由于子程序在被調(diào)用之后要能返回主程序執(zhí)行斷點(diǎn)處繼續(xù)執(zhí)行主程序,因此在子程序最后結(jié)尾處加入RET指令,其構(gòu)造如下。 ORG 0300HMAIN: …… MOV a,b;將子程序需要參數(shù)b送入指定位置a中,滿足子程序

入口條件 LCALL SQR ;調(diào)用計(jì)算平方程序第24頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

……

…… MOV a,c ;將子程序需要參數(shù)c送入指定位置a中,滿足子

程序入口條件 LCALL SQR ;調(diào)用計(jì)算平方程序

……

…… ORG 0500HSQR: ……

…… ;計(jì)算平方 MOV e,d ;將子程序運(yùn)行成果d送入指定位置e中,滿足出

口條件 RET ;返回第25頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例4-8:將兩位壓縮BCD碼數(shù)拆開,轉(zhuǎn)換為ASCII碼,并將轉(zhuǎn)換成果高位和低位分別送入其他單元保存。BCD碼數(shù)表達(dá)范圍為0~9,與表達(dá)它ASCII碼之間差30H,因此只要將這兩位BCD碼數(shù)分別提取,轉(zhuǎn)換后送入指定地址單元即可。能夠設(shè)計(jì)一對應(yīng)功能子程序方便其他程序調(diào)用。 ORG 1000HMAIN: …… MOV R0,#XXH ;將需要轉(zhuǎn)換數(shù)據(jù)所在單元地址送入R0 MOV R1,#YYH ;將轉(zhuǎn)換成果低四位寄存單元地址送入R1 MOV R2,#ZZH ;將轉(zhuǎn)換成果低四位寄存單元地址送入R2 LCALL BCD_S ;調(diào)用轉(zhuǎn)換子函數(shù)

……第26頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) ORG 2023HBCD_S: MOV A,@R0 ;提取待轉(zhuǎn)換數(shù)據(jù) ANL A,#0FH ;高四位數(shù)據(jù)清零 ADD A,#30H ;轉(zhuǎn)換為ASCII碼 MOV @R1,A ;低四位轉(zhuǎn)換成果送入R1 MOV A,@R0 ;提取待轉(zhuǎn)換數(shù)據(jù) SWAP A ;半字節(jié)交換 ANL A,#0FH ;高四位數(shù)據(jù)清零 ADD A,#30H ;轉(zhuǎn)換為ASCII碼 MOV @R2,A ;高四位轉(zhuǎn)換成果送入R1 RET第27頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.2匯編語言源程序匯編

計(jì)算機(jī)只能執(zhí)行用機(jī)器碼表達(dá)目標(biāo)程序,因此使用匯編語言編寫程序不能直接由計(jì)算機(jī)執(zhí)行。為了使匯編語言程序能在計(jì)算機(jī)中順利執(zhí)行,必須先將它轉(zhuǎn)化成機(jī)器碼表達(dá)形式才行。這樣一種將匯編語言程序轉(zhuǎn)化為機(jī)器碼過程成為“匯編”。對MCS-51單片機(jī)來說,主要有手工匯編和機(jī)器匯編兩種匯編辦法。4.2.1手工匯編

手工匯編是先將程序用助記符形式寫出,然后手工查詢指令編碼表,將助記符指令翻譯成機(jī)器碼形式,最會將翻譯出來機(jī)器碼輸入單片機(jī)中進(jìn)行調(diào)試和運(yùn)行。手工匯編過程中是按照絕對地址對指令進(jìn)行定位,這會給匯編工作帶來很多不便,主要體目前下列兩個方面。

(1)計(jì)算偏移量

(2)程序修改第28頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.2.2機(jī)器匯編

機(jī)器匯編是使用計(jì)算機(jī)中匯編程序?qū)υ闯绦蜻M(jìn)行匯編,并最后得到機(jī)器碼形式目標(biāo)程序過程。這一過程一般是在PC機(jī)上完成,生成機(jī)器碼形式目標(biāo)程序會通過串行口或者其他接口加載在顧客樣機(jī)(單片機(jī))上進(jìn)行運(yùn)行和調(diào)試。下面是一段匯編語言程序匯編過程。地址源程序機(jī)器碼(十六進(jìn)制)1000HMOVA,#30H74301002HMOVB,#20H75201005HADDA,B25F0第29頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.2.3MCS-51單片機(jī)常用偽指令

匯編語言程序必須通過匯編程序翻譯成機(jī)器碼形式,才能由顧客樣機(jī)調(diào)試和運(yùn)行。匯編語言源程序中應(yīng)向匯編程序提供控制信息,告訴編譯程序應(yīng)當(dāng)如何進(jìn)行匯編,這些控制信息傳遞時通過偽指令實(shí)現(xiàn)。

偽指令不是真正指令,匯編過后它不會生成機(jī)器碼,它只用來對匯編過程進(jìn)行控制。不一樣計(jì)算機(jī)系統(tǒng)有不一樣匯編程序,使用偽指令也不相同。1.ORG匯編起始地址

指令格式:ORG 16位地址

這條指令功能是為偽指令背面程序指定匯編地址,即指出匯編后得到目標(biāo)程序起始地址。第30頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

一般,在匯編語言源程序開始位置,會使用ORG偽指令來對程序起始地址進(jìn)行要求,假如不使用ORG偽指令,匯編后得到目標(biāo)程序地址從0000H處開始。如:ORG 3000HSTART: MOV A,35H

這條偽指令意義是將標(biāo)號START地址指定在3000H處。ORG偽指令能夠在程序中任何位置使用,且能夠在一段程序內(nèi)數(shù)次使用。使用后,它背面指令地址就被指定了。需要注意是,數(shù)次使用ORG指令時,指定地址應(yīng)當(dāng)按照從小到大次序排列,且不要出現(xiàn)地址重合和交叉。例如:第31頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) ORG 1000H ORG 1000H

……

…… ORG 2023H ORG 3000H

……

…… ORG 3000H ORG2023H

這兩段程序中,左側(cè)程序能夠正常匯編,而右側(cè)不能。2.END匯編結(jié)束

這條指令功能是通知匯編程序結(jié)束匯編。END指令出現(xiàn)后匯編結(jié)束,匯編程序?qū)ζ浜笾噶畈挥枥頃?。因此,一段匯編語言源程序中只能有一條END指令,并且一般會出目前源程序最后。第32頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)3.EQU賦值指令格式:字符名 EQU 符號/數(shù)EQU指令用于給字符名進(jìn)行賦值,賦值后字符名能夠是地址,也能夠是一種立即數(shù),位數(shù)能夠是8位或16位。例如: NUM EQU R3 MOV A,NUM

這里將R3賦給NUM,后來對NUM操作相稱于對R3操作。 ADD1 EQU 30 ADD2 EQU 2345H MOV A,ADD1 ACALL ADD2

這里將片內(nèi)RAM直接地址賦給了ADD1,將一種16位地址賦給了ADD2。第33頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.DB字節(jié)數(shù)據(jù)定義

指令格式:DB 8位數(shù)據(jù)或數(shù)據(jù)表

指令功能為通知匯編程序,從目前地址開始,保存一種或多種字節(jié)存放單元,并將DB背面所跟隨數(shù)據(jù)存入。例如: ORG 1000H DB 22H DB 33H,44H DB ‘A’ DB ‘BCD’第34頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

匯編過后有:

(1000H)=22H

(1001H)=33H

(1002H)=44H

(1003H)=41H

(1004H)=42H

(1005H)=43H

(1006H)=44H第35頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)5.DW字?jǐn)?shù)據(jù)定義

指令格式:DW 16位數(shù)據(jù)或數(shù)據(jù)表

與DB指令類似,不一樣在于保存是16位(字)單元,存入單元中數(shù)據(jù)高8位在前(地地址),低8位在后(高地址)。例如: ORG 1000H DW 2233H DW 3A1BH DW 3CH

匯編后有:

(1000H)=22H,(1001H)=33H

(1002H)=3AH,(1003H)=1BH

(1004H)=00H,(1005H)=3CH第36頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)6.DS存放器空間定義

指令格式:DS 體現(xiàn)式

這條偽指令功能是從指定地址開始保存若干個存放單元,保存單元個數(shù)由體現(xiàn)式值決定。例如: ORG 1000H DS 09H DB 22H,33H

匯編后有:

(1009H)=22H

(100AH)=33H 1000H~1008H四個存放單元被保存,以備他用。第37頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)7.BIT位地址符號

指令格式:字符名 BIT 位地址

指令功能是將位地址賦給字符名。例如: IO1 BIT P3.1 IO2 BIT 03H

上面兩條指令分別將P3口第1位地址和03H位地址賦給IO1和IO28.DATA數(shù)據(jù)地址賦值

指令格式:字符名 DATA 數(shù)/體現(xiàn)式

指令功能是將數(shù)或體現(xiàn)式值賦給字符名。第38頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

此偽指令與EQU類似,區(qū)分在于使用DATA指令時能夠先使用后定義,而使用EQU指令時必須先定義后使用;EQU能夠?qū)⒁环N匯編符號賦給字符名,但DATA只能將數(shù)賦給字符名;DATA指令能夠講一種體現(xiàn)式賦給字符名,前提是體現(xiàn)式值是可求。4.3匯編語言實(shí)用程序設(shè)計(jì)4.3.1數(shù)學(xué)運(yùn)算程序設(shè)計(jì)1.雙字節(jié)加法例4-9:設(shè)兩個16位加數(shù)寄存于片內(nèi)RAM中,加數(shù)高8位寄存于add1,低8為寄存于add2;被加數(shù)高8位寄存于add3,低8位寄存于add4。運(yùn)算和寄存于add1、add2中。第39頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV R0,#add2 ;加數(shù)低8位所在單元地址送R0 MOV R1,#add4 ;被加數(shù)低8位所在單元地址送R1 MOV A,@R0 ;加數(shù)低8位內(nèi)容送A ADD A,@R1 ;低字節(jié)數(shù)據(jù)相加,成果返回A MOV @R0,A ;將低位和送至add2中 INC R0 ;R0指向add1 INC R1 ;R1指向add3 MOV A,@R0 ;加數(shù)高8為內(nèi)容送A ADDC A,@R1 ;高字節(jié)數(shù)據(jù)相加,成果返回A,考慮低位和進(jìn)位 MOV @R0,A ;高字節(jié)和送add1中第40頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)2.多字節(jié)無符號數(shù)加法例4-10:片內(nèi)RAM40H、50H單元中寄存了兩個32位數(shù)(4字節(jié)),將這兩個數(shù)相加,加和返回到40H單元開始位置。 MOV R0,#40H;將加數(shù)最低字節(jié)所在單元地址送R0 MOV R1,#50H;將被加數(shù)最低字節(jié)所在單元地址送R1 MOV R2,#4 ;兩個加數(shù)字節(jié)數(shù)LOOP: MOV A,@R0 ;加數(shù)一種字節(jié)數(shù)據(jù)送A ADDC A,@R1 ;加數(shù)與被加數(shù)一種字節(jié)數(shù)據(jù)相加,考慮前一字節(jié)加和進(jìn)位 MOV @R0,A ;相加和送加數(shù)對應(yīng)字節(jié)數(shù)據(jù)存放單元

第41頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) INC R0 ;R0指向下一字節(jié) INC R1 ;R1指向下一字節(jié) DJNZ R2,LOOP;判斷是否所有4個字節(jié)數(shù)據(jù)加完 END3.多字節(jié)無符號數(shù)減法例4-11:片內(nèi)RAM40H、50H單元中寄存了兩個32位數(shù)(4字節(jié)),將這兩個數(shù)相減,差返回到40H單元開始位置。 MOV R0,#40H ;將被減數(shù)最低字節(jié)所在單元地址送R0 MOV R1,#50H ;將減數(shù)最低字節(jié)所在單元地址送R1 MOV R2,#4 ;兩個數(shù)字節(jié)數(shù)第42頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) CLR C ;清標(biāo)志位LOOP: MOV A,@R0 ;被減數(shù)一種字節(jié)數(shù)據(jù)送A SUBB A,@R1 ;被減數(shù)與減數(shù)一種字節(jié)數(shù)據(jù)相減,考慮前一字節(jié)運(yùn)算借位 MOV @R0,A ;相加和送加數(shù)對應(yīng)字節(jié)數(shù)據(jù)存放單元 INC R0 ;R0指向下一字節(jié) INC R1 ;R1指向下一字節(jié) DJNZ R2,LOOP;判斷是否所有4個字節(jié)數(shù)據(jù)減完 END第43頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.雙字節(jié)無符號數(shù)乘法

例4-12:被乘數(shù)高字節(jié)(a)寄存在R7中,低字節(jié)(b)寄存于R6中;乘數(shù)高字節(jié)寄存于R5(c)中,低字節(jié)(d)寄存于R4中;乘積起始地址寄存于R0中。

在計(jì)算過程中,使用R2、R3暫存部分積,高字節(jié)放于R2中,R3中寄存低字節(jié);R1用于暫存中間成果進(jìn)位。

計(jì)算過程如下第44頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)通過度析可以看出,兩個16位無符號數(shù)乘法運(yùn)算可以轉(zhuǎn)化為加法運(yùn)算,先編制程序如下:WORDMUL: MOV A,R6 ;被乘數(shù)低8位進(jìn)A MOV B,R4 ;乘數(shù)低8位進(jìn)B MUL AB ;乘數(shù)、被乘數(shù)低8位相乘 MOV @R0,A ;低8位積保存bdL MOV R3,B ;高8位積bdH存入R3 MOV A,R7 ;被乘數(shù)高8位進(jìn)A MOV B,R4 ;乘數(shù)低8為進(jìn)B MUL AB ;相乘第45頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) ADD A,R3 ;bdH+adL MOV R3,A ; MOV A,B ; ADDC A,#00H ;adH+CY MOV R2,A ; MOV A,R6 ; MOV B,R5 ; MUL AB ;相乘 ADD A,R3 ;bdH+adL+bcL第46頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) INC R0 ;積指針加1,指向下一單元 MOV @R0,A ;積8-15位保存 MOV R1,#0 ;R1清0 MOV A,R2 ; ADDC A,B ;adH+bcL+CY MOV R2,A ;暫存 JNC NEXT ;無進(jìn)位則轉(zhuǎn)移 INC R1 ;有進(jìn)位R1加1NEXT: MOV A,R7 ;第47頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV B,R5 ; MUL AB ;相乘 ADD A,R2 ;adH+bcH+acL INC R0 ;指針加1 MOV @R0,A ;積16-23位保存 MOV A,B ; ADDC A,R1 ; INC R0 ; MOV @R0,A ;積24-31位保存 RET第48頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)5.多字節(jié)數(shù)除法MCS-51單片機(jī)指令系統(tǒng)中沒有提供多字節(jié)數(shù)除法指令,因此在需要進(jìn)行多字節(jié)數(shù)據(jù)除法時,需要使用一定算法來實(shí)現(xiàn),最常用辦法是移位相減法。

使用移位相減法時,要先設(shè)定一種與被除數(shù)長度相同寄存余數(shù)單元(使用前要先清0),同步設(shè)定一種寄存被除數(shù)長度位計(jì)數(shù)器。詳細(xì)實(shí)現(xiàn)過程如下:

(1)被除數(shù)單元與余數(shù)單元中內(nèi)容左移一位,然后用余數(shù)單元中內(nèi)容減清除數(shù);

(2)假如夠減,商取“1”;假如不夠減,商取“0”。得到商寄存在被除數(shù)左移一位后空出最低位;

(3)反復(fù)第1、2步驟,直到被除數(shù)中內(nèi)容所有移入余數(shù)單元;

(4)最后計(jì)算成果商寄存于被除數(shù)單元中,余數(shù)寄存在余數(shù)單元中。第49頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例4-13試編制雙字節(jié)除法程序。

假設(shè)被除數(shù)寄存于R7、R6單元中,R6寄存低字節(jié),R7寄存高字節(jié);R5、R4中寄存除數(shù),高字節(jié)在R5中,低字節(jié)在R4中;R3、R2作為余數(shù)寄存器;R1作為位計(jì)數(shù)器;R0作為差值暫存寄存器;當(dāng)除數(shù)為0時,通過置位F0顧客標(biāo)志位通知。MDIV: MOV A,R5 ; JNZ START ;除數(shù)不為“0”轉(zhuǎn)移 MOV A,R4 ; JZ OVER ;除數(shù)為“0”轉(zhuǎn)移START: MOV A,R7 ;JNZ STARTN ;被除數(shù)為“0”轉(zhuǎn)移第50頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV A,R6 ; JNZ STARTN ;被除數(shù)為“0”,結(jié)束 RET ;STARTN: CLR A ; MOV R2,A ;余數(shù)單元清“0” MOV R3,A ; MOV R1,#16 ;位計(jì)數(shù)器設(shè)置初值,即移位操作次數(shù)DIVN: CLR C ;CY清“0”,準(zhǔn)備左移 MOV A,R6 ;被除數(shù)低字節(jié)準(zhǔn)備移位,送入A中

第51頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) RLC A ;帶進(jìn)位循環(huán)左移 MOV R6,A ;移位成果送回低字節(jié)單元 MOV A,R7 ;被除數(shù)高字節(jié)準(zhǔn)備移位,送入A中 RLC A ; MOV R7,A ; MOV A,R2 ;余數(shù)低字節(jié)準(zhǔn)備移位 RLC A ; MOV R2,A ; MOV A,R3 ;余數(shù)高字節(jié)準(zhǔn)備移位

第52頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) RLC A ; MOV R3,A ; MOV A,R2 ;準(zhǔn)備進(jìn)行余數(shù)和減數(shù)減法 SUBB A,R4 ;低字節(jié)先減 MOV R0,A ;暫存減成果 MOV A,R3 ;高字節(jié)相減 SUBB A,R5 ; JC CON ;不夠減,轉(zhuǎn)移 INC R6 ;夠減商加1

第53頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV R3,A ;差送入余數(shù)單元 MOV A,R0 ; MOV R2,A ;CON: DJNZ R1,DIVN ;判斷16次左移是否結(jié)束,未完繼續(xù)DONE: CLR F0 ;置除數(shù)不為“0”標(biāo)志 RET ;OVER: SETB F0 ;置除數(shù)為“0”標(biāo)志 RET ;

第54頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)6.平均值計(jì)算例4-14編制程序,實(shí)現(xiàn)對雙字節(jié)數(shù)據(jù)塊平均值計(jì)算。

數(shù)據(jù)塊長度保存在R0中,計(jì)算平均值過程中累加和中間成果保存在R4、R3和R2中。由于所求平均值數(shù)據(jù)位16位數(shù)據(jù),因此需要使用3個寄存器來保存其累加和成果,R4保存高8位,R2保存低8位,R3保存中間8位。數(shù)據(jù)塊首地址在DPTR中保存。MAIN: MOV A,R0 ;數(shù)據(jù)塊長度送入A中 MOV R1,A ;數(shù)據(jù)塊長度送入R1中 CLR A ;清除A中內(nèi)容,方便之后計(jì)算使用 MOV R2,A ;將寄存累加和R2、R3和R4內(nèi)容清零第55頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV R3,A ; MOV R4,A ;SUMA: MOVX A,@DPTR ;讀數(shù)據(jù)高字節(jié)內(nèi)容 MOV B,A ;高字節(jié)內(nèi)容暫存于B中 INC DPTR ;數(shù)據(jù)指針指向數(shù)據(jù)低字節(jié)地址 MOVX A,@DPTR ;讀數(shù)據(jù)低字節(jié)內(nèi)容 INC DPTR ;數(shù)據(jù)指針指向下一種數(shù)據(jù)高字節(jié) ADD A,R2 ;計(jì)算數(shù)據(jù)累加和 MOV R2,A ;低字節(jié)相加成果送入R2

第56頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV A,B ;暫存高字節(jié)內(nèi)容送回A中 ADDC A,R3 ; MOV R3,A ;高字節(jié)相加成果送入R3中 JNC AVR ;判斷有沒有向前僅為,假如沒有,轉(zhuǎn)向平均計(jì)算程序 INC R4; ;發(fā)生進(jìn)位,R4中保存累加和高8位內(nèi)容加1AVR: DJNZ R1,SUMA;判斷是否所有數(shù)據(jù)相加結(jié)束,未加完繼續(xù)計(jì)算累加和 LJMP MDIV ;計(jì)算R4R3R2除以R1,平均值送入R6R5 DONEMDIV: …… ;計(jì)算平均值,成果送入R6、R5中,R6中保存高8位第57頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)7.雙字節(jié)BCD數(shù)據(jù)加法

以BCD碼形式體現(xiàn)數(shù)據(jù)相加也是MCS-51單片機(jī)匯編語言程序設(shè)計(jì)中經(jīng)常會用到一種運(yùn)算。在進(jìn)行運(yùn)算時主要需要注意計(jì)算過程中低字節(jié)相加向前進(jìn)位及對每次加和成果十進(jìn)制調(diào)整。例4-15:在40H、41H和42H、43H中寄存有兩個雙字節(jié)BCD碼形式數(shù)據(jù),計(jì)算器加和。 MOV A,40H ;第一種加數(shù)低字節(jié)內(nèi)容送入A ADD A,42H ;兩個加數(shù)低字節(jié)內(nèi)容相加,和送入A中 DA A ;對加和進(jìn)行十進(jìn)制調(diào)整 MOV R0,A ;調(diào)整過低位加和送入R0中

第58頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV A,41H ;第一種加數(shù)高字節(jié)內(nèi)容送入A ADDC A,43H ;兩個加數(shù)高字節(jié)內(nèi)容相加,和送入A中,考慮低位進(jìn)位 DA A ;對加和進(jìn)行十進(jìn)制調(diào)整 MOV R1,A ;高位加和送入A中 XOR A,A ;A內(nèi)容清零 RLC A ;將高位相加后進(jìn)位標(biāo)志送入A中 MOV R3,A ;進(jìn)位狀態(tài)送入R3中第59頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)4.3.2排序和數(shù)據(jù)極值查找程序設(shè)計(jì)1.數(shù)據(jù)極值查找程序

這一類程序功能是在指定數(shù)據(jù)內(nèi)找出最大值或最小值。能實(shí)現(xiàn)這一功能辦法有很多,其中最基本是比較替代法。這種辦法是以任意一種數(shù)據(jù)作為基準(zhǔn)數(shù)據(jù),將其他數(shù)據(jù)與基準(zhǔn)數(shù)據(jù)進(jìn)行比較。在進(jìn)行最大值查找時,當(dāng)基準(zhǔn)數(shù)據(jù)較大,則保存原基準(zhǔn)數(shù)據(jù);假如基準(zhǔn)數(shù)據(jù)較小,則用與之比較數(shù)據(jù)替代本來基準(zhǔn)數(shù)據(jù);直到指定數(shù)據(jù)內(nèi)所有數(shù)據(jù)都比較完成,基準(zhǔn)數(shù)據(jù)就為需要查找最大值。例4-16:在片內(nèi)RAM區(qū)中寄存了一組數(shù)據(jù),數(shù)據(jù)寄存首地址寄存在R0中,數(shù)據(jù)塊長度寄存在R2中,使查找出這組數(shù)據(jù)最大值,并將最大值保存在R3中。 MOV R2,n ;數(shù)據(jù)塊長度第60頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV A,R0 ;數(shù)據(jù)塊首地址 MOV R1,A ; DEC R2 ; MOV A,@R1 ;LOOP: MOV R3,A ; DEC R1 ; CLR C ; SUBB A,@R1 ;進(jìn)行比較 JNC LOOP0 ;無借位,A中數(shù)據(jù)較大第61頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV A,@R1 ;有借位,A中數(shù)據(jù)較小,交換 SJMP LOOP1 ;LOOP0: MOV A,R3 ;LOOP1: DJNZ R2,LOOP ;比較是否結(jié)束 MOV @R0,A ;存最大值 RET ;2.數(shù)據(jù)排序程序數(shù)據(jù)排序是指將一組數(shù)據(jù)按照某種大小次序進(jìn)行排列過程。下面就最為常用排序辦法—冒泡法進(jìn)行介紹。第62頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)冒泡法實(shí)現(xiàn)過程為:

(1)依次將相鄰兩個單元中內(nèi)容進(jìn)行比較,假如兩個數(shù)據(jù)符合排序所要求大小關(guān)系,則不變化他們在內(nèi)存中位置;假如不符合,交換他們位置。反復(fù)進(jìn)行這一過程,直到排序完成;

(2)從理論上講,要對一組長度為N數(shù)據(jù)進(jìn)行排序,需要進(jìn)行N-1輪步驟1過程;

(3)實(shí)際排序過程也許比N-1輪要少,例如當(dāng)隊(duì)列中某些數(shù)據(jù)自然排列與排序要求相同步。這樣,為了減少排序時間,我們能夠人為設(shè)置一種標(biāo)志位,只要在比較過程中兩數(shù)之間沒有交換發(fā)生,則說明排序結(jié)束。例4-17:試對一組數(shù)據(jù)按從小到大次序進(jìn)行排列,數(shù)據(jù)首地址為30H,共8個數(shù)據(jù)。第63頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV R6,#8 ;數(shù)據(jù)個數(shù) CLR F0 ;交換標(biāo)志SORT: DEC R6 ;比較次數(shù) MOV R0,#30H ;R0指向數(shù)據(jù)首地址 MOV R1,#30H ;R1指向數(shù)據(jù)首地址 MOV A,R6 ;外循環(huán)計(jì)數(shù) MOV R7,A ;內(nèi)循環(huán)計(jì)數(shù)LOOP: MOV B,@R0 ;取數(shù)據(jù) INC R0 ;第64頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV A,@R0 ; CJNE A,B,N1 ;比較N1: JNC LESS ;符合排序要求大小關(guān)系,不交換 MOV @R0,B ;不符合排序要求,交換 MOV @R1,A ; INC R0 ; INC R1 ; SETB F0 ;置標(biāo)志位LESS: DJNZ R7,LOOP ;內(nèi)循環(huán)計(jì)數(shù)值減1,進(jìn)行下一次比較 JBC F0,SORT ;外循環(huán)計(jì)數(shù)值減1,進(jìn)行下一次冒泡第65頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)3.字符查找程序

字符存放是以字符所對應(yīng)ASCII編碼形式實(shí)現(xiàn),因此查找字符過程是在字符編碼寄存區(qū)搜索是否存在與目標(biāo)編碼相同數(shù)據(jù)。例4-18:已知由40H地址處開始,寄存有64個字符所對應(yīng)ASCII編碼數(shù)據(jù),試查找其中是否有“&”字符,假如有這個字符將其序號送入20H單元中,不然將20H單元清零。 ORG 0200H MOV R0,#40H ;數(shù)據(jù)區(qū)首地址送入R0 MOV R5,#40H ;數(shù)據(jù)長度送入R5 MOV 20H,#00H ;保存成果單元內(nèi)容清零第66頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)CMP1: MOV A,@R0 ;取數(shù)據(jù) CJNE A,#26H LOOP ;將取到數(shù)據(jù)與“&”字符所對應(yīng)ASCII碼26H

比較,假如不相同則轉(zhuǎn)移 SJMP DONE ;找到相同數(shù)據(jù),轉(zhuǎn)至結(jié)束部分,此時20H中已經(jīng)保

存了查找到字符所在單元序號LOOP: INC R0 ;將數(shù)據(jù)區(qū)地址指向下一種數(shù)據(jù) INC 20H ;修改序號 DJNZ R5,CMP1 ;判斷是否完成對64個數(shù)據(jù)比較 MOV 20H,#00 ;所有數(shù)據(jù)比較完,未找到相同數(shù)據(jù),20H內(nèi)容清零第67頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)DONE: AJMP $ ;查找結(jié)束 END

字符查找程序多用于關(guān)鍵字查找,可按照上例中給出辦法進(jìn)行擴(kuò)展應(yīng)用,同樣能夠?qū)崿F(xiàn)對字符串查找。4.3.3查表程序設(shè)計(jì)MCS-51單片機(jī)應(yīng)用程序設(shè)計(jì)中,查表也是經(jīng)常會用到一種程序。查表對于縮短代碼長度、提升程序效率具有很大幫助。MCS-51單片機(jī)指令系統(tǒng)中為我們提供了兩條查表指令。 MOVC A,@A+DPTR MOVC A,@A+PC第68頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)

(1)MOVC A,@A+DPTR

數(shù)據(jù)表格一般寄存在程序存放器中。首先,使用MOV指令將需要查詢表首地址送入DPTR中;然后,將需要查詢表項(xiàng)數(shù)通過MOV指令送入累加器A中;最后使用MOVCA,@A+DPTR指令,將被查詢表中對應(yīng)項(xiàng)內(nèi)容送入累加器A中。

(2)MOVC A,@A+PC

對數(shù)據(jù)表格查詢也能夠通過PC來進(jìn)行。這時,表格首地址為目前PC值,需要查詢項(xiàng)數(shù)仍通過MOV指令送入A中。

使用這條指令進(jìn)行查表時,表格地址范圍受到限制。由于PC與DPTR不一樣,不能通過指令進(jìn)行直接修改,因此這條指令查詢范圍只能在該指令后00H~0FFH內(nèi);并且表格大小也比較小。第69頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例4-19試使用查表指令,實(shí)現(xiàn)數(shù)字0-9平方值計(jì)算。

將數(shù)字0-9寄存在累加器A中 ADD A,#01H ;加入偏移量,由程序看出PC值未指向表格首地

址處而是指向RET指令地址。 MOVC A,@A+PC ; RET ; DB 00H,01H,04H,09H,10H ; DB 19H,24H,31H,40H,51H ;第70頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì)例4-20:試編寫對11×21矩陣查表程序。11×21矩陣共有231個元素,因此查表程序關(guān)鍵在于確定被查詢元素在表格中所在位置。能夠通過下式對偏移量進(jìn)行計(jì)算BASEADDR=(21×INDEX_I)+INDEX_J

式中INDEX_I為元素所在矩陣行,INDEX_J為其所在列 INDEX_I EQU R6 ;元素所在行0-10 INDEX_J DATA 23H ;元素所在列0-20MATRIX:MOV A,INDEX_I ; MOV B,#21 ;第71頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MUL AB ;21×INDEX_I ADD A,INDEX_J ;計(jì)算偏移量 INC A ;偏移量加1,由于PC值未指向表格首地址 MOVC A,@A+PC ; RET ;BASE: DB 1 ;元素(0,0) DB 2 ;元素(0,1)

…… ; DB 21 ;元素(0,20)第72頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) DB 22 ;元素(1,0)

…… ; DB 42 ;元素(1,20)

…… ; DB 231 ;元素(10,20)例4-21:在ROM中特定區(qū)域數(shù)據(jù)表格查找指定目標(biāo)數(shù)據(jù)

需要查找指定數(shù)據(jù)保存在A中,表格首地址保存在DPTR中,表格長度保存在R0中。假如找到指定數(shù)據(jù),則將其序號送入A中;假如沒有找到指定數(shù)據(jù),則置進(jìn)位標(biāo)志位為1。待START: CLR C ;清進(jìn)位標(biāo)志位

第73頁第4章MCS-51單片機(jī)匯編語言程序設(shè)計(jì) MOV B,A ;待查找目標(biāo)數(shù)據(jù)送入B中暫存 MOV R1,#0 ;R1中

溫馨提示

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

最新文檔

評論

0/150

提交評論