單片機(jī)原理及應(yīng)用電子教案 - 重慶廣播電視大學(xué)_第1頁
單片機(jī)原理及應(yīng)用電子教案 - 重慶廣播電視大學(xué)_第2頁
單片機(jī)原理及應(yīng)用電子教案 - 重慶廣播電視大學(xué)_第3頁
單片機(jī)原理及應(yīng)用電子教案 - 重慶廣播電視大學(xué)_第4頁
單片機(jī)原理及應(yīng)用電子教案 - 重慶廣播電視大學(xué)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《單片機(jī)原理與接口技術(shù)》

電子教案

重慶工商職業(yè)學(xué)院第四章

MCS-51匯編語言程序設(shè)計

[內(nèi)容提要]

本章主要講述MCS-51的程序設(shè)計方法和程序設(shè)計舉例。單片機(jī)的學(xué)習(xí)不外乎就是兩項內(nèi)容,一項是學(xué)會構(gòu)建硬件系統(tǒng),另一項就是學(xué)會應(yīng)用程序設(shè)計。本章講述的程序設(shè)計只是最簡單的基本程序設(shè)計。[學(xué)習(xí)要求]

掌握單片機(jī)匯編語言程序的基本結(jié)構(gòu)以及加減乘除和數(shù)制轉(zhuǎn)換等簡單程序設(shè)計的方法,理解常用查表等典型程序設(shè)計方法。4.1匯編語言程序設(shè)計概述1.機(jī)器語言:機(jī)器語言是用二進(jìn)制代碼0和1表示指令和數(shù)據(jù)的最原始的程序設(shè)計語言。2.匯編語言:在匯編語言中,指令用助記符表示,地址、操作數(shù)可用標(biāo)號、符號地址及字符等形式來描述。3.高級語言:高級語言是接近于人的自然語言,面向過程而獨(dú)立于機(jī)器的通用語言。一、語言的分類4.1匯編語言程序設(shè)計概述

MCS-51單片機(jī)匯編語言,包含兩類不同性質(zhì)的指令。(1)基本指令:即指令系統(tǒng)中的指令。它們都是機(jī)器能夠執(zhí)行的指令,每一條指令都有對應(yīng)的機(jī)器碼。(2)偽指令:匯編時用于控制匯編的指令。它們都是機(jī)器不執(zhí)行的指令,無機(jī)器碼。二、匯編語言的指令類型4.1匯編語言程序設(shè)計概述匯編語言源程序是由匯編語句(即指令)組成的。其典型的匯編語句格式如下:[<標(biāo)號>]: <操作碼> [<操作數(shù)>] ;[<注釋>]

如:START: MOV A,30H ;A←(30H)三、匯編語言的語句格式4.1匯編語言程序設(shè)計概述1.ORG:匯編起始地址其含義是指定下面目標(biāo)程序的起始地址為表達(dá)式值。表達(dá)式常為一個雙字節(jié)地址數(shù)。例如:ORG0100HSTART:MOVA,#00H匯編號,從START開始的目標(biāo)程序,其起始地址從0100H開始。由于表達(dá)式0100H是立即型地址碼所以隱含地指明該程序段屬絕對地址段。一個源程序中,可能有多處設(shè)置程序段起始地址,因此定義地址空間應(yīng)從低地址端向高地址設(shè)置,不能重疊,否則將出錯。若程序段前無ORG偽指令,則匯編后的目標(biāo)程序?qū)?000H地址開始或緊接前段程序后。若表達(dá)式為浮動程序段中定義過的標(biāo)號,則由該標(biāo)號定義的目標(biāo)程序段首地址也將之浮動。四、MCS-51匯編語言的偽指令隨著單片機(jī)的廣泛應(yīng)用和開發(fā)以裝置功能的不斷完善與發(fā)展,匯編語言源程序都借助系統(tǒng)機(jī)(PC等)進(jìn)行編輯、匯編和調(diào)試。因此,在編制匯編語言源程序時,常需應(yīng)用偽指令。偽指令又稱匯編程序控制譯碼指令,屬說明性匯編指令。“偽”字體現(xiàn)在匯編時不產(chǎn)生機(jī)器指令代碼,不影響程序的執(zhí)行,僅產(chǎn)生供匯編時用的某些命令,在匯編時執(zhí)行某些特殊操作。4.1匯編語言程序設(shè)計概述四、MCS-51匯編語言的偽指令2.匯編結(jié)束偽指令——ENDEND偽指令是匯編語言源程序結(jié)束為標(biāo)志。源程序在匯編過程中執(zhí)行完END偽指令,即結(jié)束偽指令,為調(diào)試方便,可根據(jù)調(diào)試需要而設(shè)置。它有兩種格式:格式1:〈標(biāo)號:〉END〈表達(dá)式〉格式2:〈標(biāo)號:〉END或者END其中標(biāo)號不是必需的,有無表達(dá)式的區(qū)別在于前者在匯編結(jié)束后立即轉(zhuǎn)向由表達(dá)式指定的起始地址開始執(zhí)行程序。因此,只需在程序運(yùn)行的入口處和END后的表達(dá)式以同一個標(biāo)號設(shè)置,當(dāng)匯編完源程序后就自動轉(zhuǎn)向由標(biāo)號指定的入口處開始執(zhí)行。表達(dá)式也可以入口入的絕對地址,后者則匯編結(jié)束后立即停機(jī)。4.1匯編語言程序設(shè)計概述四、MCS-51匯編語言的偽指令3.標(biāo)號賦值偽指令格式:〈標(biāo)號:〉EQU〈表達(dá)式〉指令的含義為本語句的標(biāo)號等值于表達(dá)式,亦即將表達(dá)式值賦予標(biāo)號。這里的標(biāo)號和表達(dá)式是必不可少的。例如:TTY:EQU1080H本語句向匯編程序指明,標(biāo)號TTY已于前句賦值為1080H,則相當(dāng)于LOOP1=TTY=10802H,在程序中LOOP1和TTY兩個標(biāo)號可以互相使用。用EOU語句給一個標(biāo)號賦值以后,在整個源程序中該標(biāo)號的值是固定而不能更改的。4.1匯編語言程序設(shè)計概述四、MCS-51匯編語言的偽指令4.定義字節(jié)數(shù)據(jù)偽指令——DB或DEGB格式:〈標(biāo)號:〉DB〈表達(dá)式或表達(dá)式串〉式中表達(dá)式或表達(dá)式串是指一個字節(jié)或用逗號隔開的一個字節(jié)數(shù)據(jù)。其含義是將表達(dá)式或表達(dá)式串所指定的字節(jié)數(shù)據(jù)存入從標(biāo)號開始的連續(xù)存儲單元中。標(biāo)號為可選項,它表示數(shù)據(jù)存入程序存儲器的起始地址。例如:SECON:DB02H,36H,74H,0B4H,OFFH,…上述語句表示將字節(jié)數(shù)據(jù)串按順序存篇幅標(biāo)號SECON所指示的地址為起始順序存儲單元中。作為本語句操作數(shù)控部分的表達(dá)式或表達(dá)式串,可以是數(shù)據(jù)表達(dá)式、ASCII碼字符串、字節(jié)數(shù)據(jù),字節(jié)數(shù)據(jù)串(其字節(jié)串長度限制在80B的數(shù)據(jù)內(nèi))。4.1匯編語言程序設(shè)計概述四、MCS-51匯編語言的偽指令5.定義字?jǐn)?shù)據(jù)偽指令——DW或DEFW格式:〈標(biāo)號:〉DW〈表達(dá)式或表達(dá)式串〉本語句的含義是將作為操作部分的字?jǐn)?shù)據(jù)(2B)或字?jǐn)?shù)據(jù)串存入由標(biāo)號指定的首地址按順序連續(xù)單元中,定義字為為雙字節(jié)的數(shù)據(jù)。在執(zhí)行匯編時,計算機(jī)會自動按高位字節(jié)在前、低位字節(jié)在后的順序格式存入程序存儲器單元中例如:ABC:DW1234H,4567H,0A5C4H,…匯編執(zhí)行時第一個字節(jié)的12H存入標(biāo)號ABC所指示的存儲單元,34H存入(ABC)+1單元中,其余按此順序?qū)⒑罄m(xù)字節(jié)數(shù)據(jù)存入對應(yīng)的存儲單元中,如標(biāo)號ABC定義為1000H,則上例匯編后:(1000H)=12H,(1001H)=34H,(1002H)=45H,…。4.1匯編語言程序設(shè)計概述四、MCS-51匯編語言的偽指令6.存儲區(qū)說明偽指令——DS格式:〈標(biāo)號:〉DS〈表達(dá)式〉其含義是以標(biāo)號的值為首地址保留表達(dá)式所指定的若干存儲單元空間作為備用。例如:BASE:DS0100H匯編后,程序存儲器從標(biāo)號BASE為首地址開始,空出256個存儲單元,以備另用。7.定義標(biāo)號值偽指令——DL格式:〈標(biāo)號:〉DL〈表達(dá)式〉其含義是定義該標(biāo)號的值為表達(dá)式值,同樣,標(biāo)號和表達(dá)式是不可缺少的。例如:COUNT1:DL2300H;定義COUNT1=2300HCOUNT2:DLCOUNT1+1;定義COUNT2=2300H+1由上可見,DL和EQU的功能都是將表達(dá)成值賦給標(biāo)叼,但兩者有區(qū)別,用DL語句可在同一源程序中對同一標(biāo)號多次賦值,即可更改已定義的標(biāo)號值;而用EQU語句則只能給標(biāo)號一次賦值,而后在整個源程序中再不能更改4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式一、程序結(jié)構(gòu)的三種形式

1.三種形式順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)2.匯編語言程序設(shè)計步驟:

◆分析問題

◆確定算法

◆設(shè)計程序流程圖

◆分配內(nèi)存單元

◆編寫匯編語言源程序

◆調(diào)試程序4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式二、順序程序簡單結(jié)構(gòu)程序又稱順序結(jié)構(gòu)程序,是匯編語言程序設(shè)計中最基本、最單純的程序,在整個程序設(shè)計所占比例最大,是程序設(shè)計的基礎(chǔ)。這里所說的簡單結(jié)構(gòu)程序是指一種無分支的直接程序,是按照邏輯操作順序,從第一條指令開始逐步條順序執(zhí)行,直到最后一條指令為止。特點(diǎn):程序按編寫的順序依次往下執(zhí)行每一條指令,直到最后一條。4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式二、順序程序【例4.1】將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入RAM兩個單元中。程序流程如圖4-1所示。參考程序如下:

ORG 2000HMOV A,30H ;取值A(chǔ)NL A,#0FH ;取低4位ADD A,#30H ;轉(zhuǎn)換成ASCII碼MOV 32H,A ;保存結(jié)果MOV A,30H ;取值SWAP A ;高4位與低4位互換ANL A,#0FH ;取低4位(原來的高4位)ADD A,#30H ;轉(zhuǎn)換成ASCII碼MOV 31H,A ;保存結(jié)果SJMP $END結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位轉(zhuǎn)換成ASCII碼存ASCII碼開始圖4-14.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式三、分支程序1.分支程序有三種基本形式,即單分支、雙分支、多分支。流程圖如圖4-2所示。2.分支程序的設(shè)計要點(diǎn)如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號。條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1AnK=0K=1…K=nK=?……圖4-2分支程序結(jié)構(gòu)流程圖(a)單分支(b)雙分支(c)多分支4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式三、分支程序3.分支程序設(shè)計舉例【例4.2】設(shè)X存在30H單元中,根據(jù)下式

X+2 X>0Y= 100 X=0求出Y值,將Y值存入31H單元。

∣X∣ X<0分析:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)是否為0。程序流程如圖4-3所示。參考程序如下:

ORG 1000HMOV A,30H ;取數(shù)JB ACC7,NEG;負(fù)數(shù),轉(zhuǎn)NEGJZ ZER0 ;為零,轉(zhuǎn)ZER0ADD A,#02H ;為正數(shù),求X+2AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0:MOV A,#64H ;數(shù)據(jù)為零,Y=100AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)

4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式三、分支程序NEG:DECA ; CPL A ;求∣X∣SAVE:MOV31H,A ;保存數(shù)據(jù)SJMP $ ;暫停ENDA為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←|X|A←64HA←X+2存數(shù),(31H)←A(30H)圖4-34.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式三、分支程序【例4.3】設(shè)有兩個16位無符號數(shù)NA,NB分別存放在8031單片機(jī)內(nèi)部RAM的40H、41H及50H、51H單元中,當(dāng)NA>NB時,將內(nèi)部RAM的42H單元清0;否則,將該單元置成全1,試編程。分析:因為無16位數(shù)的比較指令,所以,只能用8位數(shù)的比較指令。參考程序如下:

ORG2000HCMP:MOVA,50HCJNEA,40H,CMP1MOVA,51HCJNEA,41H,CMP1SJMPNHIGHECMP1:JCHIGHENHIGHE:MOV42H,#0FFHSJMPDONEHIGHE:MOV42H,#00HDONE:SJMP$

END4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式四、循環(huán)程序順序程序、分支程序的共同點(diǎn)是每條指令至多執(zhí)行一次,而實際中有時要求某程序段多次重復(fù)執(zhí)行,就需要采用循環(huán)結(jié)構(gòu)。1.循環(huán)程序的結(jié)構(gòu)循環(huán)程序一般由四個主要部分組成:初始化部分:為循環(huán)程序做準(zhǔn)備,如規(guī)定循環(huán)次數(shù)、給各變量和地址指針預(yù)置初值。處理部分:為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實體,也是循環(huán)程序的主體。循環(huán)控制部分:這部分的作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結(jié)束,直到符合結(jié)束條件時,跳出循環(huán)為止。結(jié)束部分:這部分主要是對循環(huán)程序的結(jié)果進(jìn)行分析、處理和存放。4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式四、循環(huán)程序(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束圖4-4循環(huán)結(jié)構(gòu)程序流程圖1.循環(huán)程序的結(jié)構(gòu)4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式四、循環(huán)程序2.循環(huán)程序設(shè)計舉例【例4.4】已知片外RAM的10H單元存放8位二進(jìn)制數(shù),要求將其轉(zhuǎn)移成相應(yīng)的ASCII碼,并以高位在前,低位在后的順序,依次存放到片外RAM以11H為首地址的連續(xù)單元中,試編程。分析:先將中間單元置成30H,然后判欲轉(zhuǎn)換位是否為1,若是,則將中間單元內(nèi)容加1;否則,中間單元內(nèi)容保持不變。通過左移指令實現(xiàn)由高到低的順序進(jìn)行轉(zhuǎn)換。參考程序如下:ORG1000HSTART:MOVR2,#08H;循環(huán)計數(shù)初值(循環(huán)次數(shù)已知)

MOVR0,#10H;地址指針初值

MOVXA,@R0;取數(shù)

MOVB,A;暫存B中

LOOP:MOVA,#30H;將中間單元(A)置成30H4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式四、循環(huán)程序JNBB.7,NA;判斷轉(zhuǎn)換的二進(jìn)制位為0否?若是轉(zhuǎn)NAINCA;若為1,則(A)內(nèi)容加1,成為;1的ASCII碼“31H”NA:INCR0;修改地址指針

MOVX@R0,A;存放轉(zhuǎn)換的結(jié)果

MOVA,BRLA,B;作好準(zhǔn)備,判斷下一位

MOVB,A;暫存

DJNZR2,LOOP;判斷轉(zhuǎn)換結(jié)束否?未完繼續(xù)

SJMP$

END2.循環(huán)程序設(shè)計舉例4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式四、循環(huán)程序【例4.5】設(shè)用戶用鍵盤輸入長度不超過100字節(jié)的字符串放在8031單片機(jī)外部RAM以20H為首地址的連續(xù)單元,該字符串用回車符CR(‘CR’=0DH)作為結(jié)束標(biāo)志,要求統(tǒng)計此字符串的長度并存入內(nèi)部RAM的1FH單元中。分析:從首單元開始取數(shù),每取一數(shù)判斷其是否為‘CR’,是則結(jié)束。參考程序如下:ORG1000HSTADADATA20HSLANGDATA1FHCMCR2:MOVR0,#STADA-1MOVB,#0FFHCRLOP:INCR0INCBMOVXA,@R0CJNEA,#0DH,CRLOPMOVSLANG,BSJMP$

END2.循環(huán)程序設(shè)計舉例4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式3.多重循環(huán)結(jié)構(gòu)程序某些復(fù)雜問題或者循環(huán)數(shù)超過256,則需采用多重循環(huán)的程序結(jié)構(gòu),即循環(huán)程序中包含循環(huán)程序或一個大循環(huán)中包含多個小循環(huán)程序,稱多重循環(huán)程序結(jié)構(gòu),又稱循環(huán)嵌套。循環(huán)的重數(shù)不限,但必須每循環(huán)的層次分明,不能有相互交叉!外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正確(b)嵌套正確(c)交叉不正確圖4-5多重循環(huán)示意圖四、循環(huán)程序4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式【例4.6】設(shè)在8031內(nèi)部RAM中存一無符號數(shù)的數(shù)組,其長度為100,起始地址是30H,要求將它們從大到小排序,排序后仍存放在原區(qū)域中,試編程。分析:內(nèi)RAM第一次循環(huán)第二次循環(huán)······30H00030631H030603大

32H060280數(shù)

33H028004向

····上100個··········冒

····90H35762491H76246092H24600193H600000

最多99次循環(huán)這就是所謂的“冒泡法”。實際上大多情況,用不到99次循環(huán),排序就結(jié)束。為了提高排序速度,程序中可設(shè)一交換標(biāo)志位,如10H位,每次循環(huán)中:若有交換則SETB10H;若無交換則CLR10H。每次循環(huán)結(jié)束時,測10H位,判斷排序是否結(jié)束。參考程序如下:四、循環(huán)程序4.2單片機(jī)匯編語言程序的結(jié)構(gòu)形式ORG1000HBUBBLE:MOVR0,#30HMOVB,#64HCLR10HDECB;長度計數(shù)

LOOP:MOVA,@R0MOV20H,A;暫存,為交換作準(zhǔn)備

INCR0MOV21H,@R0CJNEA,21H,BUEU;若(20H)≠(21H)轉(zhuǎn)移

BUEU:JNCBUNEXT;(20H)≥(21H)轉(zhuǎn)移

MOVA,@R0;若(20H)<(21H)則交換

MOV@R0,20HDECR0;使R0退格指向小地址

MOV@R0,AINCR0;恢復(fù)R0指向大地址

SETB10H;置交換標(biāo)志BUNEXT:DJNZB,LOOPJB10H,BUBBLE;判斷標(biāo)志位為1否?若為1,則繼續(xù)

END四、循環(huán)程序一、多字節(jié)數(shù)加法1.多字節(jié)無符號數(shù)加法CLRCMOVR0,#40H;指向加數(shù)最低位MOVR1,#5OH;指向另一加數(shù)最低位MOVR2,#04H;字節(jié)數(shù)作計數(shù)初值LOOP1:MOVA,@R0;取被加數(shù)ADDCA,@R1;兩數(shù)相加,帶進(jìn)位MOV@R0,AINCR0;修改地址INCR1DJNZR2,LOOPl;未加完轉(zhuǎn)LOOP1JNCLOOP2;無進(jìn)位轉(zhuǎn)LOOP2MOV@R0,#01HLOOP2:DECR0RET4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例2.多字節(jié)有符號數(shù)加法SDADD:CLR07H;標(biāo)志位清零MOVA,R0;復(fù)制保存地址指針MOVR2,AMOVA,R3MOVR7,ACLRCLOOP1:MOVA,@R0ADDCA,@R1;相加MOV@R0,AINCR0INCR1;地址指針加1DJNZR7,LOOP1圖4-6多字節(jié)有符號數(shù)加法程序流程圖一、多字節(jié)數(shù)加法4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例2.多字節(jié)有符號數(shù)加法JBOV,ERR;若溢出,轉(zhuǎn)溢出處理DECR0MOVA,@R0JNBE7H,LOOP2SETB07H;和值為負(fù),置位標(biāo)志LOOP2:MOVA,R2;恢復(fù)地址指針MOVR0,ARET┇ERR:┇;溢出處理RET一、多字節(jié)數(shù)加法4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例二、多字節(jié)數(shù)減法MOVR0,#40H;指向被減數(shù)最低位MOVR1,#5OH;指向減數(shù)最低位MOVR2,#04H;字節(jié)數(shù)CLRCLOOP1:MOVA,@R0SUBBA,@R1;完成一個字節(jié)的減法運(yùn)算MOV@R0,AINCR0INCR1DJNZR2,LOOP1RET4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例三、多字節(jié)十進(jìn)制數(shù)(BCD碼)加法圖4-7BCD碼多字節(jié)加法程序流程圖BCDADD:MOV20H,R0MOV23H,R3CLRCLOOP0:MOVA,@R0;取被加數(shù)ADDCA,@R1;兩數(shù)相加DAA;十進(jìn)制調(diào)整MOV@R0,AINCR0;指針加1INCR1

DJNZR3,LOOP0;作完加法否MOVR2.#23HJNCRETURN;有無進(jìn)位MOV@R0,#01HINCR3RETURN:MOVR0,#20HRET4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例四、多字節(jié)數(shù)乘法ZHENFA:MOVA,R0MOVB,R1MULAB;(R1)*(R0)MOVR3,A;積的低位送到R3MOVR4,B;積的高位送到R4MOVA,R0MOVB,R2MULAB;(R2)*(R0)ADDA,R4;(R1)*(R0)的高位加(R2)*(R0)的低位MOVR4,A;結(jié)果送R4,進(jìn)位在CY中MOVA,BADDCA,#OOH;(R2)*(R0)的高位加低位來的進(jìn)位MOVR5,A;結(jié)果送R5RET4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例五、多字節(jié)數(shù)除法DV:MOVR7,#08H;設(shè)計數(shù)初值DVl:CLRCMOVA,R5RLCAMOVR5,AMOVA,R6RLCA;將(R6)、(R5)左移一位MOV07H,C;將移出的一位送07H位保存CLRCSUBBA,R2;余數(shù)(高位)減除數(shù)JBO7H,GOU;若標(biāo)志位為1,說明夠減JNCGOU;無借位也說明夠減ADDA,R2;否則,恢復(fù)余數(shù)AJMPDV2GOU:INCR5;商上1DV2:MOVR6,A;保存余數(shù)(高位)DJNZR7,DVlRET圖4-8除法程序流程圖4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例六、數(shù)據(jù)的拼拆【例4.7】設(shè)在30H和31H單元中各有一個8位數(shù)據(jù):(30H)=x7x6x5x4x3x2x1x0,(31H)=y7y6y5y4y3y2y1y0現(xiàn)在要從30H單元中取出低5位,并從31H單元中取出低3位完成拼裝,拼裝結(jié)果送40H單元保存,并且規(guī)定:(40H)=y2y1y0x4x3x2x1x0分析:利用邏輯指令A(yù)NL、ORL來完成數(shù)據(jù)的拼拆,參考程序如下:4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例MOV40H,30H;將x7~x0傳送到40H單元ANL40H,#000111llB;將高3位屏蔽掉MOVA,31H;將y7~y0傳送到累加器中SWAPA;將A的內(nèi)容左移4次RLA;y2~y0移到高3位ANLA,#111000OOB;將低5位屏蔽掉ORL40H,A;完成拼裝任務(wù)七、數(shù)據(jù)的轉(zhuǎn)換1.ASCII碼與二進(jìn)制數(shù)的互相轉(zhuǎn)換【例4.8】編程實現(xiàn)十六進(jìn)制數(shù)表示的ASC1I代碼轉(zhuǎn)換成4位二進(jìn)制數(shù)(1位十六進(jìn)制數(shù))。分析:對于這種轉(zhuǎn)換,只要注意到下述關(guān)系便不難編寫出轉(zhuǎn)換程序:“字符0”~“字符9”的ASCII碼值為“30H”~“39H”,它們與30H之差恰好為“00H”~“09H”,結(jié)果均<0AH。“字符A”~“字符F”的ASCII碼值為“41H”~“46H”,它們各自減去37H后恰好為“0AH”~“0FH”,結(jié)果均>0AH。根據(jù)這個關(guān)系可以編出轉(zhuǎn)換程序如下,程序以R1作為入口和出口。ASCHIN:MOVA,R1;取操作數(shù)CLRC;清進(jìn)位標(biāo)志位CSUBBA,#30H;ASCII碼減去30H,實現(xiàn)0-9的轉(zhuǎn)換MOVR1,A;暫存結(jié)果SUBBA,#0AH;結(jié)果是否>9?JCLOOP;若≤9則轉(zhuǎn)換正確XCHA,R1SUBBA,#07H;若>9則減37HMOVR1,ALOOP:RET4.3MCS-51單片機(jī)匯編語言程序設(shè)計舉例2.BCD碼與二進(jìn)制數(shù)的轉(zhuǎn)換【例4.9】4位BCD碼整數(shù)轉(zhuǎn)換

溫馨提示

  • 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

提交評論