單片機(jī)培訓(xùn)四匯編語言程序設(shè)計(jì)_第1頁
單片機(jī)培訓(xùn)四匯編語言程序設(shè)計(jì)_第2頁
單片機(jī)培訓(xùn)四匯編語言程序設(shè)計(jì)_第3頁
單片機(jī)培訓(xùn)四匯編語言程序設(shè)計(jì)_第4頁
單片機(jī)培訓(xùn)四匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)培訓(xùn)四匯編語言程序設(shè)計(jì)匯編語言簡(jiǎn)介匯編語言格式 計(jì)算機(jī)所能執(zhí)行的每條指令都對(duì)應(yīng)一組二進(jìn)制代碼。 為了容易理解和記憶計(jì)算機(jī)的指令, 人們用一些英語的單詞和字符以及數(shù)字作為助記符來描述每一條指令的功能。 用助記符描述的指令系統(tǒng), 稱為機(jī)器的匯編語言系統(tǒng), 簡(jiǎn)稱匯編語言。 匯編語言也是面向機(jī)器的, 每種計(jì)算機(jī)系統(tǒng)也都有它自己的匯編語言, 用匯編語言編寫的程序, 稱為匯編語言源程序或匯編源程序。 由25個(gè)英文字母組成的助記符至少一個(gè)空格用“,”隔開,操作個(gè)數(shù)可為無,1,2,3 由操作助記符和操作數(shù)字段組成匯編指令指能匯編成機(jī)器語言代碼的指令。 格式:操作碼 操作數(shù)1, 操作數(shù)2 ,操作數(shù)32匯編

2、偽指令 偽指令:匯編時(shí)不產(chǎn)生機(jī)器語言代碼的指令,僅提供匯編控制信息。一、定位偽指令 ORG m m:一般為十六進(jìn)制數(shù)。 m指出在該偽指令后的指令的匯編地址,即生成的機(jī)器指令起始存貯器地址。顯然,當(dāng)使用多條ORG m偽指令時(shí),應(yīng)注意其后生成的機(jī)器指令存放地址不應(yīng)重疊。例如: ORG 0START: SJMP MAIN ORG 0BH LJMP PTFO ORG 40H MAIN:3二、定義字節(jié)偽指令 標(biāo)號(hào): DB X1、 X2 Xn例如: ORG 1000HDB 0AAH SR-DATA:DB25,25H DZX-DATA:DBMCS-51經(jīng)匯編后,從地址1000H處存貯器的內(nèi)容為:(1000H

3、)= AAH(1001H)= 19H(1002H)= 25H(1003H)= 4DH(1004H)= 43H(1005H)= 53H(1006H)= 2DH(1007H)= 35H(1008H)= 31H4三、字定義偽指令 標(biāo)號(hào): DW Y1、 Y2 Yn 通知匯編程序從當(dāng)前ROM地址開始,保留存貯單元,并存入DW后面的數(shù)據(jù)。存放時(shí)高8位在前,低8位在后。例如: ORG 1000H DW1234HSR_DATA:DW56H,2000經(jīng)匯編后,從地址1000H處存貯器的內(nèi)容為:(1000H)= 12H(1001H)= 34H(1002H)= 00H(1003H)= 56H(1004H)= 07H

4、(1005H)= D0H5四、EQU 賦值偽指令 字符名稱 EQU 項(xiàng)(數(shù)或匯編符號(hào)) EQU偽指令是把“項(xiàng)”賦給“字符名稱”,注意這里的“字符名稱”不同于標(biāo)號(hào)(其后沒有冒號(hào)),但它是必須的。用EQU賦過值的符號(hào)名可以用作數(shù)據(jù)地址、代碼地址、位地址或是一個(gè)立即數(shù)。 例如: AAEQUR1MOVA,AA D10EQU10ADD_YEQU07ABHMOVA,D10LCALLADD_Y6五、DS定義存貯空間偽指令 DS 表達(dá)式 在匯編時(shí),從指定地址開始保留DS之后“表達(dá)式”的值所規(guī)定的存貯單元。 例如:ORG1000HDS07HDB20H,20 DW12H 經(jīng)匯編后,從地址1000H開始保留7個(gè)單元

5、,然后從1007H處存貯器的內(nèi)容為:(1007H)= 20H(1008H)= 14H(1009H)= 00H(100AH)= 12H7六、DATA數(shù)據(jù)地址賦值偽指令 字符名稱 DATA 表達(dá)式 這里的“字符名稱”與標(biāo)號(hào)不同(其后沒有冒號(hào)),但它是必須的,其功能是把“表達(dá)式”的值賦給左邊的“字符名稱”。 DATA偽指令與EQU偽指令的主要區(qū)別是:EQU定義的“字符名稱”必須先定義后使用,而DATA定義的“字符名稱”沒有這種限制,故DATA偽指令通常用在源程序的開頭或末尾。 例如: ORG0100H AA DATA 35H DPTRA DATA0AA00H MOVA,AA ;(35H) A MOV

6、DPTR,#DPTRA ;0AA00H DPTR8七、BIT定義位地址符號(hào)偽指令 字符名稱 BIT 位地址 這里的“字符名稱”與標(biāo)號(hào)不同(其后沒有冒號(hào)),但它是必須的,其功能是把BIT之后的“位地址”值賦給“字符名稱”。 例如:P11BITP1.1A2BIT02HMOVC,P11MOVA2,C八、匯編結(jié)束偽指令 END指出匯編結(jié)束,其后即使還有指令,匯編程序也不作處理。9匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)方法 程序設(shè)計(jì)步驟根據(jù)設(shè)計(jì)任務(wù)要求,采用匯編語言編制程序的過程。應(yīng)用程序設(shè)計(jì)步驟: 1. 擬定任務(wù)書 2. 建立數(shù)學(xué)模型 3. 建立算法 4. 繪制程序流程圖 5. 編制匯編語言源程序 6. 上

7、機(jī)調(diào)試 注意:匯編調(diào)試需要多次試驗(yàn),往往調(diào)試占整個(gè)任務(wù)的大部分時(shí)間10程序設(shè)計(jì)要求及基本方法可靠性高、可讀性好、效率高、占用存儲(chǔ)容量小和執(zhí)行速度快 匯編程序結(jié)構(gòu)設(shè)計(jì)的基本方法: 匯編程序結(jié)構(gòu)設(shè)計(jì)的基本要求: 1.順序程序的設(shè)計(jì) 2.分支程序設(shè)計(jì) 3.循環(huán)程序設(shè)計(jì) 4.子程序設(shè)計(jì)5.查表程序設(shè)計(jì)6.散轉(zhuǎn)程序設(shè)計(jì)11一、順序程序 順序程序是最簡(jiǎn)單的程序結(jié)構(gòu),在順序程序中沒有任何的轉(zhuǎn)移指令,以下是一個(gè)典型的例子。例1:字節(jié)(雙字)加法。將內(nèi)部RAM 30H開始的4個(gè)單元中存放的4字節(jié)十六進(jìn)制數(shù)和內(nèi)部RAM 40H單元開始的4個(gè)單元中存放的4字節(jié)十六進(jìn)制數(shù)相加,結(jié)果存放到40H開始的單元中。(如0a0

8、ab234fh存放在片內(nèi)RAM30h開始的4個(gè)單元如圖所示)30H31H33H32H加數(shù) 1 存放處4FH23HABHA0H12題意分析示意圖 (1) 題意分析。 題目的要求如圖所示。30H31H33H32H加數(shù) 1 存放處4FH23HABHA0H43H42H41H40H 7BH 56H 80H E8H加數(shù) 2 存放處43H42H41H40HCAH79H2BH89H相加結(jié)果存放處A0AB234FE880567B892B79CA113 ORG0200HMOVA,30HADD A,40HMOV40H,A;最低字節(jié)加法并送結(jié)果MOVA,31HADDC A,41HMOV41H,A;第二字節(jié)加法并送結(jié)果

9、(2) 匯編語言源程序。按照雙字節(jié)加法的思路,實(shí)現(xiàn)4字節(jié)加法的源程序如下: 14 MOVA,32HADDC A,42HMOV42H,A;第三字節(jié)加法并送結(jié)果MOVA,33HADDCA,43HMOV43H,A;第四字節(jié)加法并送結(jié)果,進(jìn)位 位在CY中 SJMP $END15分支程序分支程序可以分為:?jiǎn)畏种щp分支多分支16單分支單分支程序的基本結(jié)構(gòu):條件成立?程序段下條指令NY17雙分支雙分支程序的基本結(jié)構(gòu):程序段1條件成立?程序段2NY18多分支多分支程序的基本結(jié)構(gòu):程序段2條件N=?程序段N-10N程序段1程序段N1N-119例:如圖所示,設(shè)計(jì)一段程序?qū)崿F(xiàn)功能:如果(A)中1的個(gè)數(shù)為奇數(shù),所有的

10、二極管發(fā)光;如果全0,則只讓VD0-VD3發(fā)光;否則全滅。單分支程序舉例20開始位P=1?(A)=0?P2FFHP200HP20FH結(jié)束YYNN ORG 0200H JB P,JISHU JZ QUAN MOV P2,#00H SJMP TOendJISHU:MOV P2,#0FFH SJMP TOendQUAN:MOV P2,#0FHTOend: SJMP $ END流程圖:源程序:判斷奇偶標(biāo)志位的值判斷(A)的值是否為0(A)有偶數(shù)個(gè)1,二極管滅(A)有奇數(shù)個(gè)1,二極管全亮(A)為0,VD0-VD3亮注意:在MCS-51單片機(jī)中,實(shí)現(xiàn)單分支常用的指令有:JZ、JNZ、DJNZ、CJNE、J

11、C、JNC、JB、JNB、JBC等。虛線框代表一個(gè)單分支21雙分支程序設(shè)計(jì)例:內(nèi)部RAM的40H單元和50H單元各存放了一個(gè)8位無符號(hào)數(shù),請(qǐng)比較這兩個(gè)數(shù)的大小,比較結(jié)果用發(fā)光二極管顯示(LED為低有效): 若(40H)(50H),則P1.0管腳連接的LED1發(fā)光; 若(40H)(50H),則P1.1管腳連接的LED2發(fā)光。22 題意分析: 本例是典型的分支程序,根據(jù)兩個(gè)無符號(hào)數(shù)的比較結(jié)果(判斷條件),分別點(diǎn)亮相應(yīng)的發(fā)光二極管。比較兩個(gè)無符號(hào)數(shù)常用的方法是將兩個(gè)數(shù)相減,然后判斷有否借位CY。若CY=0,無借位,則XY;若CY=1,有借位,則XY。程序的流程圖如下圖所示。 23兩數(shù)比較流程圖XYX

12、Y,LED1點(diǎn)亮CY1? XY, YNLED2點(diǎn)亮開始結(jié)束24 源程序如下: X DATA 40H ;數(shù)據(jù)地址賦值偽指令DATA Y DATA 50H ORG1000H MOV A, X ;(X) A CLRC ;CY=0 SUBBA,Y ;帶借位減法,A- (Y)-CYA25 JC L1 ;CY=1,轉(zhuǎn)移到L1 CLRP1.0 ;CY=0,(40H)(50H),點(diǎn)亮P1.0 連 接的LED1 SJMP FIN ;直接跳轉(zhuǎn)到結(jié)束等待 L1:CLR P1.1 ;(40H)(A),則(A)(41H),然后和下一個(gè)字節(jié)進(jìn)行比較,依次類推,最后(A)必定是最大值。40H41H42H43H44H45H4

13、6H47H48H62開始R040H(數(shù)據(jù)區(qū)首地址)R207H(循環(huán)次數(shù))A(R0)(取第一個(gè)數(shù))R0(R0)+1(指向下一個(gè)數(shù))B (R0)結(jié)束AB?NYA (B)(R2)-1=0?48H(A)NY ORG1000H MOVR2,#07H MOVR0,#40H MOVA,R0LOOP:INCR0 MOVB,R0 CJNE A,B,NEXNEX: JNCNET MOVA,BNET: DJNZR2,LOOP MOV 48H,A SJMP$ END設(shè)定循環(huán)次數(shù)R1,R0作為數(shù)據(jù)指針,指向數(shù)據(jù)區(qū)第一個(gè)字節(jié)取出下一個(gè)字節(jié),存入B如果(A)(B),則(A)(B)次數(shù)到否,到則取出(A)48H63例:將片內(nèi)

14、RAM中20H-27H中的數(shù)據(jù)按照從小到大的順序重新排列。解題思路:見下圖RAM地址20H21H22H23H24H25H26H27H原始數(shù)據(jù)66H11H10H34H67H01H89HA0H101H11H10H34H67H66H89HA0H201H10H11H34H67H66H89HA0H301H10H11H34H67H66H89HA0H401H10H11H34H66H67H89HA0H501H10H11H34H66H67H89HA0H601H10H11H34H66H67H89HA0H701H10H11H34H66H67H89HA0H數(shù)據(jù)排序程序64R120H , R0 (R1)+1R3 08H

15、B(R1) ,R2 (R3)-1查找最小值并和(R1)單元互換R3-1=0?ENDR1 (R1)+1NY程序流程:65程序清單:ORG 1000HMAIN: MOV R1, #20H MOV R3, #08HLOOP1: MOV A, R1 ;R0(R1)+1 INC A MOV R0, A MOV A, R3 ; R2(R3)-1 DEC A MOV R2, A MOV B, R1 LOOP: MOV A, R0 CJNE A, B, MM MM: JNC SS ;如果AB跳轉(zhuǎn) MOV B, A MOV 28H, R0 ;28h紀(jì)錄最小值所在單元的編號(hào) SS: INC R0 DJNZ R2,

16、 LOOP MOV R0, 28H ;最小值單元和20H單元內(nèi)容互換 MOV A, R1 ;數(shù)據(jù) MOV R0, A MOV R1, B INC R1 DJNZ R3, LOOP1 END663.定時(shí)程序單重循環(huán)延時(shí)例1:假設(shè)單片機(jī)的fosc=12MHz,計(jì)算單片機(jī)執(zhí)行下面程序消耗的時(shí)間。DELAY: MOV R5,#TIME ; 1機(jī)器周期 MM: NOP ; 1機(jī)器周期 DJNZ R5,MM ; 2機(jī)器周期 RET ; 2機(jī)器周期執(zhí)行完以上4條語句,所花時(shí)間:T=(1+(1+2)TIME)+2 1s推廣計(jì)算式:T(機(jī)器周期數(shù))=(循環(huán)體機(jī)器周期數(shù)) 循環(huán)次數(shù)+初始化機(jī)器周期數(shù)67多重循環(huán)延時(shí)例1:假設(shè)單片機(jī)的fosc=12MHz,計(jì)算單片機(jī)執(zhí)行下面程序消耗的時(shí)間。DELAY2: MOV R3,#TIME1 ;1機(jī)器周期 LOOP1: MOV R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論