




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、3.1 概述概述一、二種程序語(yǔ)言一、二種程序語(yǔ)言 匯編語(yǔ)言匯編語(yǔ)言:短、快;充分發(fā)揮硬件功能。:短、快;充分發(fā)揮硬件功能。 執(zhí)行效率高執(zhí)行效率高 高級(jí)語(yǔ)言高級(jí)語(yǔ)言(c語(yǔ)言語(yǔ)言):長(zhǎng)、慢;硬件控制麻煩;長(zhǎng)、慢;硬件控制麻煩; 編程效率高編程效率高 單片機(jī)能執(zhí)行的程序是單片機(jī)能執(zhí)行的程序是機(jī)器語(yǔ)言機(jī)器語(yǔ)言(目標(biāo)程序目標(biāo)程序) 。二、目標(biāo)程序兩種文件格式二、目標(biāo)程序兩種文件格式 用于寫(xiě)入單片機(jī)或仿真調(diào)試。用于寫(xiě)入單片機(jī)或仿真調(diào)試。 bin文件:文件:二進(jìn)制文件,機(jī)器碼。二進(jìn)制文件,機(jī)器碼。 hex文件:文件:intel公司定義,公司定義, 地址、數(shù)據(jù)和校驗(yàn)碼地址、數(shù)據(jù)和校驗(yàn)碼 ascii碼存儲(chǔ),可顯
2、示、打印碼存儲(chǔ),可顯示、打印 需用符號(hào)轉(zhuǎn)換程序需用符號(hào)轉(zhuǎn)換程序ohs51轉(zhuǎn)換轉(zhuǎn)換三、兩種語(yǔ)言的操作過(guò)程:三、兩種語(yǔ)言的操作過(guò)程:圖圖3-1 連接連接/定位器定位器l51匯編語(yǔ)言匯編語(yǔ)言源程序源程序匯編器匯編器a51符號(hào)轉(zhuǎn)換程序符號(hào)轉(zhuǎn)換程序ohs51絕對(duì)地址絕對(duì)地址目標(biāo)程序目標(biāo)程序 .binc語(yǔ)言程序語(yǔ)言程序浮浮動(dòng)動(dòng)地地址址目目標(biāo)標(biāo)程程序序編譯器編譯器c51 hex圖圖 3-1 兩種語(yǔ)言源程序轉(zhuǎn)換成目標(biāo)程序兩種語(yǔ)言源程序轉(zhuǎn)換成目標(biāo)程序 編輯器、匯編器、編譯器、連接編輯器、匯編器、編譯器、連接/定位器、定位器、 符號(hào)轉(zhuǎn)換程序、符號(hào)轉(zhuǎn)換程序、. wave、keil uvision2 wave集成軟件
3、:集成軟件:p248五、匯編與匯編程序五、匯編與匯編程序 匯編語(yǔ)言匯編語(yǔ)言源程序源程序轉(zhuǎn)換成機(jī)器語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言目標(biāo)目標(biāo)程序。程序。四、集成開(kāi)發(fā)環(huán)境1 1、匯編的兩方法、匯編的兩方法手工匯編手工匯編 人工查指令表,得到程序中每條指令對(duì)應(yīng)人工查指令表,得到程序中每條指令對(duì)應(yīng)的機(jī)器代碼,的機(jī)器代碼,。早期使用。早期使用。機(jī)器匯編機(jī)器匯編 用匯編程序?qū)R編語(yǔ)言源程序進(jìn)行匯編。用匯編程序?qū)R編語(yǔ)言源程序進(jìn)行匯編。 源程序要提供給一些附加信息,遵循匯編源程序要提供給一些附加信息,遵循匯編程序的一些約定。用偽指令實(shí)現(xiàn)。程序的一些約定。用偽指令實(shí)現(xiàn)。1)確定程序中每條匯編語(yǔ)言指令的確定程序中每條匯編語(yǔ)言指
4、令的機(jī)器碼機(jī)器碼2)確定每條指令在存儲(chǔ)器中的存放確定每條指令在存儲(chǔ)器中的存放地址地址3)語(yǔ)法檢查語(yǔ)法檢查,提供錯(cuò)誤信息,提供錯(cuò)誤信息4)生成生成目標(biāo)執(zhí)行文件目標(biāo)執(zhí)行文件(*.obj/*.hex)、 列表文件列表文件(*.lst)、. 地址地址 機(jī)器碼機(jī)器碼源程序源程序 org 2000h 2000h 78 30 main: mov r0,#30h 2002h e6 mov a,r0 2、匯編的主要任務(wù)、匯編的主要任務(wù)六、匯編語(yǔ)言程序設(shè)計(jì)步驟六、匯編語(yǔ)言程序設(shè)計(jì)步驟 與書(shū)中不太一樣與書(shū)中不太一樣1 1、確定、確定方案方案和計(jì)算方法和計(jì)算方法2 2、了解應(yīng)用系統(tǒng)的、了解應(yīng)用系統(tǒng)的硬件配置硬件配置、
5、性能指標(biāo)性能指標(biāo)3 3、建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟、建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟4 4、合理分配合理分配存儲(chǔ)器單元存儲(chǔ)器單元和了解和了解i/o接口地址接口地址5、編制源程序、編制源程序 1)按按功能功能模塊模塊設(shè)計(jì)程序,明確各設(shè)計(jì)程序,明確各程序之間的相互關(guān)系程序之間的相互關(guān)系 2) 用用流程圖流程圖表示程序結(jié)構(gòu)和功能表示程序結(jié)構(gòu)和功能開(kāi)始開(kāi)始1 yn?3)程序中用程序中用注釋注釋說(shuō)明指令在程序中說(shuō)明指令在程序中的作用,方便閱讀、的作用,方便閱讀、調(diào)試調(diào)試和修改和修改1. 機(jī)器指令機(jī)器指令:指令系統(tǒng)中的全部指令。每條機(jī)器:指令系統(tǒng)中的全部指令。每條機(jī)器指令都有對(duì)應(yīng)的機(jī)
6、器代碼,可以被指令都有對(duì)應(yīng)的機(jī)器代碼,可以被cpu執(zhí)行。執(zhí)行。2. 偽指令偽指令: 匯編控制指令,沒(méi)有匯編控制指令,沒(méi)有機(jī)器機(jī)器代碼,只代碼,只用于匯編過(guò)程,為匯編程序提供匯編信息。用于匯編過(guò)程,為匯編程序提供匯編信息。3、宏指令、宏指令 定義、調(diào)用定義、調(diào)用一、一、 匯編語(yǔ)言指令類(lèi)型匯編語(yǔ)言指令類(lèi)型3.23.2 偽偽指令指令宏調(diào)用:宏調(diào)用: 宏指令名宏指令名 實(shí)際參數(shù)實(shí)際參數(shù) 宏指令名宏指令名 實(shí)際參數(shù)實(shí)際參數(shù)宏定義:宏定義:宏指令名宏指令名 macro 形式參數(shù)形式參數(shù) ;被定義的程序段;被定義的程序段 endm二、常用偽指令及功能二、常用偽指令及功能1.起始指令起始指令 org nn 定
7、義程序或數(shù)據(jù)塊的起始地址,定義程序或數(shù)據(jù)塊的起始地址,連續(xù)存放在程連續(xù)存放在程序存儲(chǔ)器中。序存儲(chǔ)器中。例:例: 指令地址指令地址 機(jī)器碼機(jī)器碼源程序源程序 org 2000h 2000h 78 30 main: mov r0,#30h 2002h e6 mov a,r0 org 3000h 3000h 23 tab: db 23h,100,a 3001h 64 3002h 412.字節(jié)定義字節(jié)定義 標(biāo)號(hào):標(biāo)號(hào): db 表達(dá)式,表達(dá)式, 在程序存儲(chǔ)器中以標(biāo)號(hào)為起始地址在程序存儲(chǔ)器中以標(biāo)號(hào)為起始地址存放字節(jié)數(shù)據(jù)。存放字節(jié)數(shù)據(jù)。例:例: ln:db 32,c,25h,-1地址地址 數(shù)據(jù)數(shù)據(jù)ln20l
8、n+143ln+225ln+3ff3. 字定義字定義 標(biāo)號(hào):標(biāo)號(hào):dw 表達(dá)式,表達(dá)式, 在程序存儲(chǔ)器中以標(biāo)號(hào)為起始地址在程序存儲(chǔ)器中以標(biāo)號(hào)為起始地址存放字?jǐn)?shù)據(jù)。存放字?jǐn)?shù)據(jù)。低地址高字節(jié)!低地址高字節(jié)!例:例:gh :dw 1234h,5678h,08gh1234gh+25678gh+400085. 等值指令等值指令 equ 表達(dá)式表達(dá)式 表示表示equ兩邊的量等值,用于為或標(biāo)識(shí)符賦值。兩邊的量等值,用于為或標(biāo)識(shí)符賦值。例:例: x1 equ 2000h x2 equ 0fh main:mov dptr,#x1 ; dptr=2000h add a,#x2 ; a=a+0fh4保留字節(jié)保留字節(jié)
9、 標(biāo)號(hào)標(biāo)號(hào):ds 數(shù)值表達(dá)式數(shù)值表達(dá)式 在程序存儲(chǔ)器中保留以標(biāo)號(hào)為起始地址的若干在程序存儲(chǔ)器中保留以標(biāo)號(hào)為起始地址的若干字節(jié)單元,單元數(shù)由數(shù)值表達(dá)式指定。字節(jié)單元,單元數(shù)由數(shù)值表達(dá)式指定。例:例:l1:ds 32 ; 從從l1地址開(kāi)始保留地址開(kāi)始保留32個(gè)存儲(chǔ)單元。個(gè)存儲(chǔ)單元。6. 位定義位定義 bit 位地址位地址 類(lèi)似類(lèi)似equ指令,定義的是位操作數(shù)地址。指令,定義的是位操作數(shù)地址。例:例:aic bit p1.1。7.匯編結(jié)束匯編結(jié)束 end 源程序段結(jié)束。源程序段結(jié)束。 匯編程序?qū)R編程序?qū)nd指令后的內(nèi)容不處理。指令后的內(nèi)容不處理。 a51匯編程序其它偽指令:匯編程序其它偽指令:3
10、.3順序程序順序程序順序程序順序程序(簡(jiǎn)單程序簡(jiǎn)單程序),程序走向只有一條路徑。,程序走向只有一條路徑。常用程序結(jié)構(gòu)常用程序結(jié)構(gòu) 順序程序順序程序 分支程序分支程序 循環(huán)程序循環(huán)程序 子程序子程序例例3-1 外部數(shù)據(jù)存儲(chǔ)器的外部數(shù)據(jù)存儲(chǔ)器的000eh和和000fh單元的內(nèi)容交換單元的內(nèi)容交換000eh000fh000eh000fh000eh000fh000eh000fh分析分析: 只能用只能用movx與與a間傳送;間傳送;必須用中間變量必須用中間變量(20h)暫存暫存;低八位地址用低八位地址用r0、r1指示指示; 高八位地址由高八位地址由p2指示。指示。程序如下頁(yè):程序如下頁(yè): 000eh00
11、0fh000eh000fh000eh000fh org 0000h mov p2, #0h ;送地址高八位至送地址高八位至p2口口 mov r0, #0eh ;r0= 0eh mov r1, #0fh ;r1=0fh movx a, r0 ;a=(000eh) mov 20h, a ;(20h)=(000eh) movx a, r1 ;a=(000fh) xch a, 20h ; a=(000eh),(20h)=(000fh) movx r1, a mov a, 20h movx r0, a ;交換后的數(shù)送各單元交換后的數(shù)送各單元 sjmp $ end例例3-2:將:將r4r5雙字節(jié)符號(hào)數(shù)求補(bǔ)
12、程序。雙字節(jié)符號(hào)數(shù)求補(bǔ)程序。org 0000h mov a,r5 ;取低字節(jié);取低字節(jié)cpl aadd a,#1 ;低字節(jié)變補(bǔ);低字節(jié)變補(bǔ)mov r5,amov a,r4 ;取高字節(jié);取高字節(jié)cpl aaddc a,#0 ;高字節(jié)變補(bǔ);高字節(jié)變補(bǔ)orl a, #80h; 恢復(fù)負(fù)號(hào)恢復(fù)負(fù)號(hào) mov r4,a end地址數(shù)據(jù)tab0tab+1 1tab+2 4tab+3 9tab+4 16h例例3-3 片內(nèi)片內(nèi)ram的的20h單元變量值為單元變量值為00h05h,用查用查表法表法 其平方值其平方值, 存入片內(nèi)存入片內(nèi)ram的的21h單元。單元。 org 0000h mov dptr,#tab mo
13、v a,20h movc a,a+dptr ;查表查表 mov 21h,a sjmp $tab2: db 00h,01h,04h,09h,16h,25h end分析分析 :在程序存儲(chǔ)器安排一張平方表,首地址為:在程序存儲(chǔ)器安排一張平方表,首地址為tab,以以dptr指向表首址,指向表首址,a存放變量值,利用查表指令存放變量值,利用查表指令movc a,a+dptr,即可求得。,即可求得。表中數(shù)據(jù)用表中數(shù)據(jù)用bcd碼存。碼存。 若平方值為兩字節(jié),程序應(yīng)如何改?若平方值為兩字節(jié),程序應(yīng)如何改?若用若用movc a,a+pc呢?呢?dptra例例(書(shū)無(wú)書(shū)無(wú)): 分解壓縮型分解壓縮型bcd碼為非壓縮型
14、式碼為非壓縮型式bcd碼。碼。org 0000hmov r0,#40h;設(shè)指針;設(shè)指針mov a,r0;取一個(gè)字節(jié);取一個(gè)字節(jié)mov r2,a;暫存;暫存anl a,#0fh ;清;清0高半字節(jié)高半字節(jié)inc r0 ;r0=41hmov r0,a ;保存數(shù)據(jù)個(gè)位;保存數(shù)據(jù)個(gè)位片內(nèi)片內(nèi)ram42h41h40h65mov a,r2swap a ;十位換到低半字節(jié);十位換到低半字節(jié)anl a,#0fhinc r0 ;r0=42hmov r0,a ;保存數(shù)據(jù)十位;保存數(shù)據(jù)十位end05050606 org 0000horg 0000h mov a,r2 jnb acc.7,n ;為正數(shù)?;為正數(shù)? c
15、pl a ;負(fù)數(shù)求補(bǔ);負(fù)數(shù)求補(bǔ) inc a mov r2,an: sjmp $ ;結(jié)束;結(jié)束3.4 3.4 分支程序分支程序由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成分支結(jié)構(gòu)形成分支結(jié)構(gòu)3.4.1 3.4.1 單分支程序單分支程序一個(gè)條件判斷,有兩種分支結(jié)構(gòu)。一個(gè)條件判斷,有兩種分支結(jié)構(gòu)。條件滿足條件滿足?n影響條件影響條件y處理段處理段條件滿足條件滿足?n影響條件影響條件y處理處理1處理處理2例例1 1 求求8 8位有符號(hào)數(shù)的絕對(duì)值。位有符號(hào)數(shù)的絕對(duì)值。方法:正數(shù)不變,負(fù)數(shù)求補(bǔ)。方法:正數(shù)不變,負(fù)數(shù)求補(bǔ)。 例例2 根據(jù)行李重量計(jì)算行李運(yùn)費(fèi),以根據(jù)行李重量計(jì)算行李運(yùn)
16、費(fèi),以10kg為為1個(gè)計(jì)價(jià)個(gè)計(jì)價(jià)單位單位g , g在在40h單元中。單元中。計(jì)價(jià)方法:計(jì)價(jià)方法:為為50kg以內(nèi)按以內(nèi)按3元;元; 50kg以上部分按以上部分按2元計(jì)價(jià)。元計(jì)價(jià)。 由此列出算式:由此列出算式: g3 + (g-5)2; 當(dāng)當(dāng)g5m=g3 ;當(dāng);當(dāng)g5 3g因重復(fù)使用,先暫存在因重復(fù)使用,先暫存在r2。流程見(jiàn)左流程見(jiàn)左, 程序如下頁(yè):程序如下頁(yè):(a-5)*2+r2 r2nyr2 (41h)(40h) a (a=g)3g r2a=5?開(kāi)始結(jié)束 org 0100hfrt: mov a,40h;取行李重量計(jì)價(jià)單位;取行李重量計(jì)價(jià)單位g mov r3,a mov b,#03h;運(yùn)費(fèi)運(yùn)費(fèi)
17、m=g3 mul ab mov r2,a;暫存;暫存3g mov a,r3;取回;取回g cjne a,#05h,l1;g 5 ? sjmp wetcl1: jc wetc;是,轉(zhuǎn)至;是,轉(zhuǎn)至wetc subb a,#05h;否則;否則 m=3g+2(g-5) rlc a add a,r2 mov r2 ,awetc:mov 41h,r2 ;存運(yùn)費(fèi);存運(yùn)費(fèi) m ret 3.4.2多分支散轉(zhuǎn)程序多分支散轉(zhuǎn)程序 根據(jù)根據(jù)多種多種輸入條件或輸入條件或多種多種運(yùn)算結(jié)果運(yùn)算結(jié)果,轉(zhuǎn)向不轉(zhuǎn)向不同的處理程序。同的處理程序。 通常用通常用jmp a+dptr間接轉(zhuǎn)移指令實(shí)現(xiàn)。間接轉(zhuǎn)移指令實(shí)現(xiàn)。 有兩種設(shè)計(jì)方法
18、:有兩種設(shè)計(jì)方法: 1. 查轉(zhuǎn)移地址表查轉(zhuǎn)移地址表: 將將轉(zhuǎn)移地址轉(zhuǎn)移地址列成表格,將表格的內(nèi)容作轉(zhuǎn)移列成表格,將表格的內(nèi)容作轉(zhuǎn)移的目標(biāo)地址。的目標(biāo)地址。 2. 查轉(zhuǎn)移指令表查轉(zhuǎn)移指令表: 將轉(zhuǎn)移到不同程序的將轉(zhuǎn)移到不同程序的轉(zhuǎn)移指令轉(zhuǎn)移指令列成表格,列成表格,判斷條件后查表,轉(zhuǎn)到表中指令執(zhí)行。判斷條件后查表,轉(zhuǎn)到表中指令執(zhí)行。程序例子見(jiàn)下頁(yè)。程序例子見(jiàn)下頁(yè)。1. 利用轉(zhuǎn)移地址表實(shí)現(xiàn)轉(zhuǎn)移利用轉(zhuǎn)移地址表實(shí)現(xiàn)轉(zhuǎn)移例例3-7 根據(jù)根據(jù)r3的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序,的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序,r3=0n, 處理程序入口符號(hào)地址為處理程序入口符號(hào)地址為pr0prn (n128)。分析:分析:pr0prn列成表格,
19、每一項(xiàng)占兩個(gè)單元;列成表格,每一項(xiàng)占兩個(gè)單元; prn在表中的偏移量為在表中的偏移量為2n,r3乘乘2得偏移地址;得偏移地址; (2n)、(2n+1)為高為高/低八位地址,送低八位地址,送dptr; 用用jmp a+dptr(a先清零先清零)即轉(zhuǎn)移到即轉(zhuǎn)移到prn入口。入口。 pr0 equ 0110h ;用偽指令定義用偽指令定義prn的具體地址的具體地址 pr1 equ 0220h pr2 equ 0330h mov a,r3 ;r3aadd a,acc ;a*2mov dptr,#tabpush accmovc a,a+dptr ;取地址表中高字節(jié)mov b,a ;暫存于binc dpl
20、pop accmovc a,a+dptr ;取地址表中低字節(jié)mov dpl,amov dph,b ;dptr為表中地址clr a ;a=0jmp a+dptr ;轉(zhuǎn)移tab:dw pr0,pr1,pr2,.,prn ;轉(zhuǎn)移地址表01100220.tabtab+2dph dpl例例 r3=1的操作的操作02202. 利用轉(zhuǎn)移指令表實(shí)現(xiàn)轉(zhuǎn)移利用轉(zhuǎn)移指令表實(shí)現(xiàn)轉(zhuǎn)移 例例3-8 設(shè)有五個(gè)按鍵編碼分別為設(shè)有五個(gè)按鍵編碼分別為3ah、47h、65h、70h、8bh,已存于,已存于b中,要據(jù)此鍵轉(zhuǎn)向不同的處理中,要據(jù)此鍵轉(zhuǎn)向不同的處理程序,分別為程序,分別為pr0 、pr1 、pr2、pr3、pr4。分析分
21、析: 鍵碼列表鍵碼列表(一字節(jié)一字節(jié)),ajmp指令列表指令列表(二字節(jié)二字節(jié)); b與鍵碼表逐項(xiàng)相比,得序號(hào),乘與鍵碼表逐項(xiàng)相比,得序號(hào),乘2得得ajmp表的偏移地址;表的偏移地址; 用用jmp a+dptr轉(zhuǎn)向轉(zhuǎn)向ajmp指令,從而實(shí)現(xiàn)多分支轉(zhuǎn)移。指令,從而實(shí)現(xiàn)多分支轉(zhuǎn)移。 設(shè)設(shè)jptjpt的地址為的地址為001ah001ah、pr0pr0入口地址為入口地址為0110h 0110h ,p39:2.4.2p39:2.4.2節(jié),節(jié),求求ajmp pr0ajmp pr0的機(jī)器碼:的機(jī)器碼:001a=0000 0001a=0000 0000 0001 1010000 0001 10100110=0
22、000 00110=0000 0001001 0001 00000001 0000 0010010 0001 0 0001 0001 00000001 0000 (2110h ) (2110h )a10a9a8a7a6a5a4a3a2a1a0 pr0入口地址為入口地址為0100h,ajmp pr0的機(jī)器碼為的機(jī)器碼為2110h, pr1 ,ajmp pr1 0220h,pr2入口地址為入口地址為0220h,ajmp pr2的機(jī)器碼為的機(jī)器碼為4120h。設(shè)設(shè)b=65h,鍵值為鍵值為2:2041jpt+42002jpt+21021jptajmp pr0ajmp pr1ajmp pr2tab3ah
23、tab+147htab+265htab+370h轉(zhuǎn)移指令表轉(zhuǎn)移指令表jpt鍵碼表鍵碼表tab65ha2b2aa=1a=2a=065h65h mov dptr,#tab ; mov dptr,#tab ;置鍵碼表首址置鍵碼表首址 mov a,#0 ;mov a,#0 ;表的起始字節(jié)的偏移量為表的起始字節(jié)的偏移量為0 0next:next:push accpush acc movc a,a+dptr ;a= movc a,a+dptr ;a=鍵碼表的編碼鍵碼表的編碼 cjne a,b,agan ;cjne a,b,agan ;將將b b中值和鍵碼表的值比較中值和鍵碼表的值比較 pop accpop
24、 acc rl a ; rl a ;如相等如相等, ,序號(hào)乘序號(hào)乘2 2得分支表內(nèi)偏移量得分支表內(nèi)偏移量 mov dptr,#jpt ;mov dptr,#jpt ;置分支表首址置分支表首址 jmp a+dptrjmp a+dptragan:agan:pop accpop acc ; ;不相等比較下一個(gè)不相等比較下一個(gè) inc a ;inc a ;序號(hào)加序號(hào)加1 1 cjne a,#5,next cjne a,#5,next sjmp $ ; sjmp $ ;鍵碼查完還沒(méi)有鍵碼查完還沒(méi)有b b中按鍵編碼程序結(jié)束中按鍵編碼程序結(jié)束jpt: ajmp pr0 ;jpt: ajmp pr0 ;分支轉(zhuǎn)
25、移表分支轉(zhuǎn)移表 ajmp pr1ajmp pr1 ajmp pr2 ajmp pr2 ajmp pr3 ajmp pr3 ajmp pr4 ajmp pr4tab: db 3ah,47h,65h,70h,8bh;鍵碼表鍵碼表end 循環(huán)程序可重復(fù)執(zhí)行指令段多次,使程序縮短,循環(huán)程序可重復(fù)執(zhí)行指令段多次,使程序縮短,節(jié)省存儲(chǔ)單元,但不節(jié)省執(zhí)行時(shí)間。節(jié)省存儲(chǔ)單元,但不節(jié)省執(zhí)行時(shí)間。 循環(huán)次數(shù)控制有兩種方式循環(huán)次數(shù)控制有兩種方式: 1、先判斷再處理、先判斷再處理:先判斷循環(huán)條件是否滿足,:先判斷循環(huán)條件是否滿足,如不滿足,就不循環(huán),如不滿足,就不循環(huán),多以循環(huán)條件控制多以循環(huán)條件控制。 2、先處理再
26、判斷、先處理再判斷:循環(huán)執(zhí)行一遍后,再判斷下:循環(huán)執(zhí)行一遍后,再判斷下一輪是否還循環(huán),一輪是否還循環(huán),多以計(jì)循環(huán)次數(shù)控制多以計(jì)循環(huán)次數(shù)控制。 。 單重循環(huán):?jiǎn)沃匮h(huán): 多重循環(huán):多重循環(huán):內(nèi)外循環(huán)不能交叉;內(nèi)外循環(huán)不能交叉; 不允許外循環(huán)跳入內(nèi)循環(huán)不允許外循環(huán)跳入內(nèi)循環(huán)。3.5 循循 環(huán)環(huán) 程程 序序 設(shè)設(shè) 計(jì)計(jì)例例 3-9 10ms延時(shí)子程序,單片機(jī)晶振為延時(shí)子程序,單片機(jī)晶振為6mhz。分析分析 : 兩個(gè)因素:兩個(gè)因素:晶振頻率晶振頻率和和循環(huán)次數(shù)循環(huán)次數(shù); 晶振晶振6mhz,一個(gè)機(jī)器周期是,一個(gè)機(jī)器周期是2s; 用內(nèi)循環(huán)實(shí)現(xiàn)用內(nèi)循環(huán)實(shí)現(xiàn)1ms延時(shí),外循環(huán)延時(shí),外循環(huán)10次。次。 由由1m
27、s計(jì)算內(nèi)循環(huán)次數(shù):計(jì)算內(nèi)循環(huán)次數(shù): 從從p295查每條指令機(jī)器周期;查每條指令機(jī)器周期; 內(nèi)循環(huán)次數(shù)設(shè)為未知數(shù)內(nèi)循環(huán)次數(shù)設(shè)為未知數(shù)mt; 列式計(jì)算內(nèi)循環(huán)次數(shù)。列式計(jì)算內(nèi)循環(huán)次數(shù)。 org 0020h org 0020h mov r0 mov r0,#0ah#0ah;外循環(huán);外循環(huán)1010次次dl2dl2:mov r1mov r1,#mt #mt ;內(nèi)循環(huán);內(nèi)循環(huán)mtmt次次dl1dl1:nop nop nop nop ;空操作指令空操作指令 djnz r1djnz r1,dl1dl1 djnz r0 djnz r0,dl2 dl2 ret ret1 11 11 11 12 22 2(1+1+2
28、)2smt=1000s mt=125=7dh實(shí)際延時(shí)時(shí)間:實(shí)際延時(shí)時(shí)間:1+1+(1+1+2)125+2102s=10062s=10.062ms若需要延時(shí)更長(zhǎng)時(shí)間,可以采用多重循環(huán)。若需要延時(shí)更長(zhǎng)時(shí)間,可以采用多重循環(huán)。機(jī)器周期數(shù)機(jī)器周期數(shù)內(nèi)內(nèi)外外例例3-10 編寫(xiě)多字節(jié)數(shù)編寫(xiě)多字節(jié)數(shù)10程序。程序。 首址首址20h多字節(jié)多字節(jié)無(wú)無(wú)符號(hào)數(shù),低地址低地址,符號(hào)數(shù),低地址低地址,r7字節(jié)數(shù),乘字節(jié)數(shù),乘10后的積仍存放在原地址中。后的積仍存放在原地址中。 345 h 0a h 32 h 28 h 2b h 1e h 20b h分析:分析: 用用r1為多字節(jié)數(shù)的地址指針,為多字節(jié)數(shù)的地址指針,部分積
29、的低字節(jié)仍存放于本單元,部分積的低字節(jié)仍存放于本單元,部分積的高字節(jié)存放于部分積的高字節(jié)存放于r2,以便和下一字節(jié)的部分積的低位相加。以便和下一字節(jié)的部分積的低位相加。以以r7作字節(jié)數(shù)計(jì)數(shù)。作字節(jié)數(shù)計(jì)數(shù)。 clr c clr c ;清進(jìn)位位;清進(jìn)位位c c mov r1 mov r1,#20h #20h ;r1r1指示地址指示地址 mov r2mov r2,#00h #00h ;存積的高八位寄存器;存積的高八位寄存器r2r2清清0 0s10s10:mov a, mov a, r1 r1 ;取一字節(jié)送;取一字節(jié)送a a mov b mov b,#0ah #0ah ;1010送送b b push
30、pswpush psw mul ab mul ab ;字節(jié)乘;字節(jié)乘1010 pop pswpop psw addc a addc a,r2 r2 ;上次積高八位加本次積低八位;上次積高八位加本次積低八位 mov r1mov r1,a a ;送原存儲(chǔ)單元;送原存儲(chǔ)單元 mov r2mov r2,b b ;積的高八位送;積的高八位送r2r2 inc r1 inc r1 ;指向下一字節(jié);指向下一字節(jié) djnz r7djnz r7,s10 s10 ;未乘完去;未乘完去sh10sh10,否則向下執(zhí)行,否則向下執(zhí)行 例例3-11 片內(nèi)片內(nèi)ram無(wú)符號(hào)數(shù)排序(無(wú)符號(hào)數(shù)排序(p57)結(jié)束清0 0 位作為標(biāo)記
31、取出下一單元數(shù)置位0 0 位兩數(shù)互換預(yù)置循環(huán)次數(shù)開(kāi)始已比較1 0 0 次?從3 0 h 單元取數(shù)取出大數(shù)該單元數(shù)大于下一單元?nnnyyy0 0 位為0 ? mcs-51單片機(jī)有著優(yōu)異的單片機(jī)有著優(yōu)異的位邏輯位邏輯功能功能,可以方便的實(shí)現(xiàn)各種復(fù)雜的可以方便的實(shí)現(xiàn)各種復(fù)雜的邏輯運(yùn)算邏輯運(yùn)算。這是這是軟件替代硬件軟件替代硬件的方法的方法,但要多費(fèi)運(yùn)算時(shí)間。但要多費(fèi)運(yùn)算時(shí)間。例例3-14 編程序編程序,以實(shí)現(xiàn)圖以實(shí)現(xiàn)圖3-7中的邏輯運(yùn)算電路中的邏輯運(yùn)算電路.3.6 位操作程序設(shè)計(jì)位操作程序設(shè)計(jì)p1.311&1p1.1p2.2tf0ie125h(位)26h(位) 其中其中p1.1和和p2.2分
32、別是端口線上的信息分別是端口線上的信息,tf0和和ie1分別是定時(shí)器定時(shí)溢出標(biāo)志和外部中請(qǐng)求分別是定時(shí)器定時(shí)溢出標(biāo)志和外部中請(qǐng)求標(biāo)志標(biāo)志, 25h和和26h分別是兩個(gè)位地址分別是兩個(gè)位地址, 運(yùn)算結(jié)果由運(yùn)算結(jié)果由端口線端口線p1.3輸出。程序見(jiàn)下頁(yè)。輸出。程序見(jiàn)下頁(yè)。圖圖3-7 硬件邏輯運(yùn)算電路硬件邏輯運(yùn)算電路start:mov c,p2.2start:mov c,p2.2 orl c,tf0 orl c,tf0 anl c,p1.1 anl c,p1.1 mov f0,cmov f0,c mov c,ie1 mov c,ie1 orl c,/25h orl c,/25h anl c,f0an
33、l c,f0 anl c,/26hanl c,/26h mov p1.3,c mov p1.3,c sjmp $ sjmp $例例3-15 設(shè)累加器a的各位acc.0acc.7分別記為x0x7,編制程序用軟件實(shí)現(xiàn)下式: y=x0x1x2+x0x1x2+x0x1x2x3+x4x5x6x7 x0 bit acc.0 x1 bit acc.1 x2 bit acc.2 x3 bit acc.3 x4 bit acc.4 x5 bit acc.5 x6 bit acc.6 x7 bit acc.7org 0000hmov c,x0anl c,x1anl c,x2mov 00h,c ;x0x1x2mov c,x0anl c,/x1mov 01h,c ;x0x1anl c,/x2orl c,00hmov 00h,c mov c,x2anl c,01h anl c,x3 ;x0x1x2x3orl c,/00hmov 00h,c mov c,x7anl c,/x6anl c,/x5anl c,/x4 ;x4 x5 x6 x7orl c,00h ;最終結(jié)果ycsjmp $ 子程序?qū)ψ映绦驅(qū)κ潜夭豢缮俚模潜夭豢缮俚?,用用acall或或lcall調(diào)用,用調(diào)用,用ret結(jié)尾。結(jié)尾。子程序節(jié)省存儲(chǔ)空間,使程序子程序節(jié)省
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度美容院轉(zhuǎn)讓合同附帶美容院供應(yīng)鏈優(yōu)化與成本控制
- 二零二五年度蔬菜配送中心與餐飲企業(yè)合作協(xié)議
- 2025年度橋梁施工環(huán)境保護(hù)與生態(tài)修復(fù)合同
- 二零二五年度鏈家房屋買(mǎi)賣(mài)定金協(xié)議模板及簽訂指南
- 二零二五年度銀行賬戶監(jiān)管協(xié)議:金融機(jī)構(gòu)賬戶監(jiān)管與反洗錢(qián)合作協(xié)議
- 二零二五年度家政服務(wù)用工協(xié)議書(shū)(家庭廚師及護(hù)理)
- 二零二五年度果園農(nóng)產(chǎn)品品牌授權(quán)轉(zhuǎn)讓協(xié)議
- 2025年度項(xiàng)目經(jīng)理內(nèi)部承包責(zé)任制與合同履行進(jìn)度合同
- 二零二五年度綠色建筑抵押貸款合作協(xié)議范本
- 2025年度新能源項(xiàng)目股權(quán)合作協(xié)議
- 民法典解讀之婚姻家庭編
- 2025年菏澤醫(yī)學(xué)專(zhuān)科學(xué)校高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年漯河職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- Unit 2 What time is it?-A Let's spell(課件)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)下冊(cè)
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)下冊(cè)第二單元百分?jǐn)?shù)(二)(含答案)
- 創(chuàng)新教案:《歌唱二小放牛郎》在2025年音樂(lè)教學(xué)中的應(yīng)用
- 祖沖之的平生與貢獻(xiàn)
- 2025年版護(hù)理法律法規(guī)
- DB3305T 261-2023 湖州湖羊種羊等級(jí)評(píng)定
- 房屋市政工程生產(chǎn)安全重大事故隱患排查表(2024版)
- 《心力衰竭護(hù)理》課件
評(píng)論
0/150
提交評(píng)論