單片機(jī)原理及應(yīng)用-匯編語言程序設(shè)計(jì)課件_第1頁
單片機(jī)原理及應(yīng)用-匯編語言程序設(shè)計(jì)課件_第2頁
單片機(jī)原理及應(yīng)用-匯編語言程序設(shè)計(jì)課件_第3頁
單片機(jī)原理及應(yīng)用-匯編語言程序設(shè)計(jì)課件_第4頁
單片機(jī)原理及應(yīng)用-匯編語言程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計(jì)-程序設(shè)計(jì)概述一、匯編語言的特點(diǎn)(1)助記符指令和機(jī)器指令一一對(duì)應(yīng),所以用匯編語言編寫的程序效率高,占用存儲(chǔ)空間小,運(yùn)行速度快,因此匯編語言能編寫出最優(yōu)化的程序。(2)使用匯編語言編程比使用高級(jí)語言困難,因?yàn)閰R編語言是面向計(jì)算機(jī)的,匯編語言的程序設(shè)計(jì)人員必須對(duì)計(jì)算機(jī)硬件有相當(dāng)深入的了解。(3)匯編語言能直接訪問存儲(chǔ)器及接口電路,也能處理中斷,因此匯編語言程序能夠直接管理和控制硬件設(shè)備。(4)匯編語言缺乏通用性,程序不易移植,各種計(jì)算機(jī)都有自己的匯編語言,不同計(jì)算機(jī)的匯編語言之間不能通用。

二、匯編語言程序設(shè)計(jì)的步驟與特點(diǎn)(1)分析任務(wù)(2)建立數(shù)學(xué)模型,確定算法(3)制定程序流程圖(4)編寫源程序(5)源程序的匯編與調(diào)試(6)編寫程序說明文件匯編語言程序設(shè)計(jì)-程序設(shè)計(jì)概述

匯編程序控制譯碼指令1.ORG(ORiGin)匯編起始地址命令

[<標(biāo)號(hào):>]ORG<地址>例:ORG

0000H

ORG

0023H2.END(ENDofassembly)匯編終止命令

[<標(biāo)號(hào):>]END[<表達(dá)式>]3.EQU(EQUate)賦值命令

<字符名稱>EQU<賦值項(xiàng)>例:TTY:EQU

1080H

LOOP1:EQU

TTY匯編語言程序設(shè)計(jì)-常用偽指令

匯編語言源程序由以下兩種指令構(gòu)成匯編語句(指令語句)偽指令(指示性語句)匯編語句的格式:標(biāo)號(hào): 操作碼 操作數(shù) ;注釋數(shù)據(jù)表示形式:二進(jìn)制(B)、十六進(jìn)制(H)、十進(jìn)制(D或省略)、ASCII碼(以單引號(hào)標(biāo)識(shí))3.偽指令:控制匯編用的特殊指令,這些指令不屬于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。匯編語言程序設(shè)計(jì)-匯編語言的規(guī)范

[例]三字節(jié)無符號(hào)數(shù)相加,其中被加數(shù)在內(nèi)部RAM的50H、51H和52H單元中;加數(shù)在內(nèi)部RAM的53H、54H和55H單元中;要求把相加之和存放在50H、51H和52H單元中,進(jìn)位存放在位尋址區(qū)的00H位中。MOV R0, #52H ;被加數(shù)的低字節(jié)地址MOV R1, #55H ;加數(shù)的低字節(jié)地址MOV A, @R0 ADD A, @R1 ;低字節(jié)相加MOV @R0,A ;存低字節(jié)相加結(jié)果DEC R0 DEC R1 MOV A, @R0 ADDC A, @R1 ;中間字節(jié)帶進(jìn)位相加MOV @R0,A ;存中間字節(jié)相加結(jié)果匯編語言程序設(shè)計(jì)-順序結(jié)構(gòu)程序DEC R0 DEC R1 MOV A, @R0 ADDC A, @R1 ;高字節(jié)帶進(jìn)位相加MOV @R0,A ;存高字節(jié)相加結(jié)果MOV 00H,C ;進(jìn)位送00H位保存匯編語言程序設(shè)計(jì)-順序結(jié)構(gòu)程序匯編語言程序設(shè)計(jì)-分支結(jié)構(gòu)程序參考程序:

ORG 0000H VAR DATA 30H FUNC DATA 31H MOV A, VAR ;A←X JZ DONE ;若X=0,則轉(zhuǎn)DONE JNB ACC.7,POSI ;若X>0,則轉(zhuǎn)POSI MOV A, #0FFH ;若X<0,則Y=-1 LJMP DONE POSI:MOV A, #01H ;若X>0,則Y=1DONE:MOV FUNC,A ;存函數(shù)值

SJMP $ END匯編語言程序設(shè)計(jì)-分支結(jié)構(gòu)程序參考程序:

ORG 0000H VAR: DATA 30H FUNC: DATA 31H MOV A, VAR ;A←X JZ DONE ;若X=0,則轉(zhuǎn)DONE MOV R0, #0FFH ;先設(shè)X<0,R0=FFH JNB ACC.7, NEG ;若X<0,則轉(zhuǎn)NEG

MOV R0, #01H ;若X>0,R0=1NEG: MOV A, #01H ;若X>0,則Y=1DONE:MOV FUNC,A ;存函數(shù)值

SJMP $ END 匯編語言程序設(shè)計(jì)-分支結(jié)構(gòu)程序循環(huán)程序一般由:初始化部分循環(huán)體部分--處理部分、修改部分、控制部分結(jié)束部分其結(jié)構(gòu)一般有兩種:先進(jìn)入處理部分,再控制循環(huán)至少執(zhí)行一次循環(huán)體先控制循環(huán),再進(jìn)入處理部分循環(huán)體是否執(zhí)行,取決于判斷結(jié)果。循環(huán)控制的一般方法:循環(huán)次數(shù)已知:利用循環(huán)次數(shù)控制循環(huán)次數(shù)未知:利用關(guān)鍵字控制利用“邏輯尺”:根據(jù)“邏輯尺”的內(nèi)容,進(jìn)行控制匯編語言程序設(shè)計(jì)-循環(huán)程序開始設(shè)置循環(huán)初值循環(huán)處理循環(huán)修改結(jié)束處理結(jié)束循環(huán)結(jié)束?開始設(shè)置循環(huán)初值循環(huán)處理循環(huán)修改結(jié)束處理結(jié)束循環(huán)結(jié)束?YN匯編語言程序設(shè)計(jì)-循環(huán)程序例:統(tǒng)計(jì)數(shù)據(jù)塊的長度入口條件:內(nèi)部RAM30H開始的存儲(chǔ)區(qū)有若干個(gè)數(shù)據(jù),最后一個(gè)數(shù)據(jù)為字符FFH,結(jié)果存入40H單元。

ORG0100HMAIN:MOVR1,#30H ;R1作為地址指針

CLR A ;累加器A作為計(jì)數(shù)器LOOP:CJNE @R1,#0FFH,NEXT ;與數(shù)據(jù)FF比較,不等轉(zhuǎn)移

LJMP JSH1 ;找到結(jié)束符號(hào),結(jié)束循環(huán)NEXT:INC A ;計(jì)數(shù)器加1

INC R1 ;指針加l

LJMPL00P ;循環(huán)匯編語言程序設(shè)計(jì)-循環(huán)程序例.延時(shí)程序(晶振為12M),由于采用12M晶振,機(jī)器周期為1μs,DJNZ的指令周期為2,整個(gè)程序的執(zhí)行時(shí)間為250×200×2×1μs=100000μs=0.1s

ORG 0100H;0.1s延時(shí)程序(晶振為12M) MOV R2,#200LOOP: MOV R3,#250 DJNZ R3,$ DJNZ R2,LOOP匯編語言程序設(shè)計(jì)-循環(huán)程序 ORG 0100H;1s延時(shí)程序(晶振為12M)

MOV R1,#10LOOP1: MOV R2,#200LOOP: MOV R3,#250 DJNZ R3,$ DJNZ R2,LOOP DJNZ R1,LOOP1匯編語言程序設(shè)計(jì)-循環(huán)程序

帶通用性問題,可以把它設(shè)計(jì)成通用子程序以供調(diào)用。這樣使程序緊湊,縮短程序長度,調(diào)式方便。

1子程序結(jié)構(gòu)應(yīng)具備

1)必須標(biāo)明子程序入口地址,即名稱

2)必須以返回指令RET結(jié)束子程序

2子程序設(shè)計(jì)時(shí)注意事項(xiàng):

1)要能正確傳遞參數(shù): 入口條件:子程序中要處理的數(shù)據(jù)如何給予。 出口條件:子程序處理結(jié)果如何存放。(寄存器、存儲(chǔ)器、堆棧方式)匯編語言程序設(shè)計(jì)-子程序結(jié)構(gòu)程序例.單字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換成雙字節(jié)ASCII碼入口條件:待轉(zhuǎn)換的單字節(jié)十六進(jìn)制數(shù)在寄存器R2中。出口:高四位的ASCII碼在A中,低四位的ASCII碼在B中。ORG 0100HMOV A,R2MOV B,A ;暫存待轉(zhuǎn)換的單字節(jié)十六進(jìn)制數(shù)

LCALL MS1 ;轉(zhuǎn)換低四位

匯編語言程序設(shè)計(jì)-子程序結(jié)構(gòu)程序XCH A,B ;存放低四位的ASCII碼

SWAP A ;準(zhǔn)備轉(zhuǎn)換高四位

LCALL MS1 ;轉(zhuǎn)換高四位

LJMP $MS1:ANL A,#0FH ;將累加器的低四位轉(zhuǎn)換成ASCII碼

ADD A,#90HDA AADDC A,#40HDA ARET

匯編語言程序設(shè)計(jì)-子程序結(jié)構(gòu)程序例5:將多位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,設(shè)R0指向十六進(jìn)制數(shù)低位,R2存放字節(jié)數(shù),轉(zhuǎn)換后R1指向ASCII碼高位。HTASC:MOVA,@R0;取十六進(jìn)制數(shù)

ANLA,#0FH;取低四位

ADDA,#15;偏移修正

MOVCA,@A+PC;查表得ASCII碼

MOV@R1,A;保存

INCR1MOVA,@R0;取十六進(jìn)制數(shù)高四位

SWAPA;ANLA,#0F0HADDA,#06H;偏移修正匯編語言程序設(shè)計(jì)-查表結(jié)構(gòu)程序[例]內(nèi)部RAM20H單元開始存8個(gè)無符號(hào)8位二進(jìn)制數(shù),找出其中的最大數(shù)。極值查找操作的主要內(nèi)容是進(jìn)行數(shù)值大小的比較。假定在比較過程中,以A存放大數(shù),與之逐個(gè)比較的另一個(gè)數(shù)放在2AH單元中。比較結(jié)束后,把查找到的最大數(shù)送2BH單元中。程序流程如圖所示。匯編語言程序設(shè)計(jì)-設(shè)計(jì)與技巧舉例參考程序如下:

MOV R0, #20H ;數(shù)據(jù)區(qū)首地址

MOV R7, #08H ;數(shù)據(jù)區(qū)長度

MOV A, @R0 ;讀第一個(gè)數(shù)

DEC R7 LOOP:INC R0 MOV 2AH, @R0 ;讀下一個(gè)數(shù)

CJNE A,2AH, CHK ;數(shù)值比較CHK: JNC LOOP1 ;A值大轉(zhuǎn)移

MOV A, @R0 ;大數(shù)送ALOOP1:DJNZ R7, LOOP ;繼續(xù)

MOV 2BH, A ;極值送2BH單元HERE:LJMP HERE ;停止匯編語言程序設(shè)計(jì)-設(shè)計(jì)與技巧舉例例編出能根據(jù)R6的內(nèi)容轉(zhuǎn)向各個(gè)操作程序的程序。設(shè)該操作程序的轉(zhuǎn)向地址分別為OPRD0,OPRDl,…OPRDn。程序如下:MOVDPTR,#TAB3;指向轉(zhuǎn)移地址表MOVA,R6ADDA,R6JNCNANDINCDPHNAND:MOVR7,AMOVCA,@A+DPTR;取轉(zhuǎn)向地址高8位XCHA,R7INCAMOVCA,@A+DPTR;取轉(zhuǎn)向地址低8位PUSHA;轉(zhuǎn)向地址入棧

匯編語言程序設(shè)計(jì)-設(shè)計(jì)與技巧舉例例試編出能模擬圖4-9中電路的程序。匯編語言程序設(shè)計(jì)-設(shè)計(jì)與技巧舉例

ORG0000H

DBIT00H

EBIT01H

GBIT02HLOOP1:ORLP1,#08H;準(zhǔn)備P1.3輸入LOOP2:MOVC,P1.3;檢測(cè)K3狀態(tài)

JCLOOP2;若未準(zhǔn)備好(K3斷),則LOOP2

溫馨提示

  • 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)論