單片機(jī)接口技術(shù)ppt_第1頁(yè)
單片機(jī)接口技術(shù)ppt_第2頁(yè)
單片機(jī)接口技術(shù)ppt_第3頁(yè)
單片機(jī)接口技術(shù)ppt_第4頁(yè)
單片機(jī)接口技術(shù)ppt_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)接口技術(shù)ppt第一頁(yè),共四十四頁(yè),2022年,8月28日4.1偽指令

偽指令是對(duì)匯編過(guò)程起控制作用,但本身并沒(méi)有對(duì)應(yīng)的機(jī)器代碼的指令。一、匯編起始指令ORG

指令格式為:ORGnn該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址,它總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開(kāi)始。式中,nn為16位地址,匯編時(shí)nn確定了此語(yǔ)句后面第一條指令或第一個(gè)數(shù)據(jù)的地址,此后的源程序或數(shù)據(jù)塊就依次連續(xù)存放在以后的地址內(nèi),直到遇到另一個(gè)ORG指令為止。第二頁(yè),共四十四頁(yè),2022年,8月28日

例:ORG2000HMOVSP,#60HMOVR0,#2FHMOVR2,#0FFHORG偽指令說(shuō)明其后面程序的目標(biāo)代碼在存儲(chǔ)器中存放的起始地址是2000H,即存儲(chǔ)器地址目標(biāo)程序2000H7581602003H782F2005H7AFF第三頁(yè),共四十四頁(yè),2022年,8月28日二、等值指令EQU

指令格式:字符名稱(chēng)EQU數(shù)字或匯編符號(hào)例:PA8155EQU8001H;即給標(biāo)號(hào)PA8155賦值為8001H。功能:使指令中的字符名稱(chēng)等價(jià)于給定的數(shù)字或匯編符號(hào)。使用等值指令可給程序的編制、調(diào)試、修改帶來(lái)方便,如果在程序中要多次使用到某一地址,由EQU指令將其賦值給一個(gè)字符名稱(chēng),一旦需要對(duì)其進(jìn)行變動(dòng),只要改變EQU命令后面的數(shù)字即可,而不需要對(duì)程序中涉及到該地址的所有指令逐句進(jìn)行修改。但要注意,由EQU等值的字符名稱(chēng)必須先賦值后使用,且在同一個(gè)源程序中,同一個(gè)標(biāo)號(hào)只能賦值一次。第四頁(yè),共四十四頁(yè),2022年,8月28日三、定義字節(jié)指令DB

指令格式: [標(biāo)號(hào):]DB8位二進(jìn)制數(shù)表功能:把8位二進(jìn)制數(shù)表依次存入從標(biāo)號(hào)開(kāi)始的連續(xù)的存儲(chǔ)單元中。格式中,標(biāo)號(hào)區(qū)段可有可無(wú),DB指令之后的8位二進(jìn)制數(shù)表是字節(jié)常數(shù)或用逗號(hào)隔開(kāi)的字節(jié)串,也可以是用引號(hào)括起來(lái)的ASCII碼字符串(一個(gè)ASCII字符相當(dāng)于一個(gè)字節(jié))。例:第五頁(yè),共四十四頁(yè),2022年,8月28日ORG1000HBUF1:DB38H,7FH,80HBUF2:DB45H,66HORG偽指令指定了標(biāo)號(hào)BUF1的地址為1000H,而DB偽指令是將其后的二進(jìn)制數(shù)表38H,7FH,80H依次存放在1000H,1001H,1002H3個(gè)連續(xù)單元之中,BUF2也是一個(gè)標(biāo)號(hào),其地址與前一條偽指令連續(xù),即1003H,1004H地址單元中依次存放45H,66H。第六頁(yè),共四十四頁(yè),2022年,8月28日

四、定義字指令DW

指令格式:[標(biāo)號(hào):]DW16位數(shù)據(jù)表該指令的功能與DB相似,區(qū)別僅在于從指定地址開(kāi)始存放的是指令中的16位數(shù)據(jù),而不是字節(jié)串。每個(gè)16位數(shù)據(jù)要占兩個(gè)存儲(chǔ)單元,高8位先存,低8位后存,這和MCS-51指令中的16位數(shù)據(jù)存放順序是一致的。第七頁(yè),共四十四頁(yè),2022年,8月28日五、定義存儲(chǔ)區(qū)指令DS

表示在ROM中從標(biāo)號(hào)地址開(kāi)始,預(yù)留一定數(shù)量的字節(jié)單元供程序使用

[標(biāo)號(hào):]DS表達(dá)式表達(dá)式是由常數(shù)、操作符、運(yùn)算符組合而成的算式第八頁(yè),共四十四頁(yè),2022年,8月28日六、數(shù)據(jù)地址賦值指令DATA

將表達(dá)式的值賦予所定義的字符名,表達(dá)式通常為數(shù)據(jù)地址或代碼地址字符名DATA表達(dá)式七、定義地址符號(hào)指令BIT

將指定的位地址賦予所定義的字符名字符名BIT位地址第九頁(yè),共四十四頁(yè),2022年,8月28日

八、匯編結(jié)束指令END

指令格式:[標(biāo)號(hào):]END地址或標(biāo)號(hào)格式中標(biāo)號(hào)以及END后面的地址或標(biāo)號(hào)可有可無(wú)。功能:提供匯編結(jié)束標(biāo)志。匯編程序遇到END后就停止匯編,對(duì)END以后的語(yǔ)句不予處理,故END應(yīng)放在程序的結(jié)束處。第十頁(yè),共四十四頁(yè),2022年,8月28日4.2匯編語(yǔ)言程序設(shè)計(jì)4.2.1簡(jiǎn)單程序設(shè)計(jì)例1兩個(gè)無(wú)符號(hào)雙字節(jié)數(shù)相加。設(shè)被加數(shù)存放于內(nèi)部RAM的40H(高位字節(jié)),41H(低位字節(jié)),加數(shù)存放于50H(高位字節(jié)),51H(低位字節(jié)),和數(shù)存入40H和41H單元中。第十一頁(yè),共四十四頁(yè),2022年,8月28日程序如下:

START:CLRC;將Cy清零MOVR0,#41H;將被加數(shù)地址送數(shù)據(jù)指針R0MOVR1,#51H;將加數(shù)地址送數(shù)據(jù)指針R1AD1:MOVA,@R0;被加數(shù)低字節(jié)的內(nèi)容送入AADDA,@R1;兩個(gè)低字節(jié)相加MOV@R0,A;低字節(jié)的和存入被加數(shù)低字節(jié)中DECR0;指向被加數(shù)高位字節(jié)DECR1;指向加數(shù)高位字節(jié)MOVA,@R0;被加數(shù)高位字節(jié)送入AADDCA,@R1;兩個(gè)高位字節(jié)帶Cy相加MOV@R0,A;高位字節(jié)的和送被加數(shù)高位字節(jié)RET第十二頁(yè),共四十四頁(yè),2022年,8月28日例2將外部RAM中的1000H單元的高4位內(nèi)容屏蔽掉,結(jié)果送外部RAM中的1010H單元

ORG0000HAJMPMAINORG0030HMAIN:MOVDPTR,#1000HMOVXA,@DPTRANLA,#0FHMOVDPTR,#1010HMOVX@DPTR,ASJMP$

第十三頁(yè),共四十四頁(yè),2022年,8月28日例3將兩個(gè)半字節(jié)數(shù)合并成一個(gè)一字節(jié)數(shù)。設(shè)內(nèi)部RAM40H#,41H單元中分別存放著8位二進(jìn)制數(shù),要求取出兩個(gè)單元中的低半字節(jié),并成一個(gè)字節(jié)后,存入50H單元中。程序如下:START:MOVR1,#40H;設(shè)置R1為數(shù)據(jù)指針MOVA,@R1;取出第一個(gè)單元中的內(nèi)容ANLA,#0FH;取第一個(gè)數(shù)的低半字節(jié)SWAPA ;移至高半字節(jié)INCR1 ;修改數(shù)據(jù)指針XCHA,@R1 ;取第二個(gè)單元中的內(nèi)容ANLA,#0FH;取第二個(gè)數(shù)的低半字節(jié)ORLA,@R1 ;拼字MOV50H,A ;存放結(jié)果RET第十四頁(yè),共四十四頁(yè),2022年,8月28日4.2.2分支程序設(shè)計(jì)圖4.1分支結(jié)構(gòu)框圖(a)單分支流程;(b)多分支流程第十五頁(yè),共四十四頁(yè),2022年,8月28日

例3比較兩個(gè)無(wú)符號(hào)數(shù)的大小。設(shè)外部RAM的存儲(chǔ)單元ST1和ST2中存放兩個(gè)不帶符號(hào)的二進(jìn)制數(shù),找出其中的大數(shù)存入外部RAM中的ST3單元中。圖4.2第十六頁(yè),共四十四頁(yè),2022年,8月28日程序如下: ORG1000HST1 EQU2000HST2EQU2100HST3EQU2200HSTART:CLRC ;清零Cy MOVDPTR,#ST1;第一個(gè)數(shù)的指針MOVXA,@DPTR;取第一個(gè)數(shù)MOVR2,A;保存MOVDPTR,#ST2;第二個(gè)數(shù)的指針MOVXA,@DPTR;取第二個(gè)數(shù)CLRC第十七頁(yè),共四十四頁(yè),2022年,8月28日SUBBA,R2;兩數(shù)比較JNCBIG2;若第二個(gè)數(shù)大,則轉(zhuǎn)XCHA,R2;第一個(gè)數(shù)大,大數(shù)送ABIG1:MOVDPTR,#ST3MOVX@DPTR,A;存大數(shù)RETBIG2:MOVXA,@DPTR;第二個(gè)數(shù)大SJMPBIG1RET第十八頁(yè),共四十四頁(yè),2022年,8月28日例4兩個(gè)帶符號(hào)數(shù)分別存放在ONE和TWO兩單元中,試比較大小,大的存入MAX單元

CLRCMOVA,ONESUBBA,TWOJZXMAXJBACC.7,NEGJBOV,YMAXSJMPXMAXNEG:JBOV,XMAX第十九頁(yè),共四十四頁(yè),2022年,8月28日YMAX:MOVA,TWOSJMPRMAXXMAX:MOVA,ONERMAX:MOVMAX,ARETONEDATA30HTWODATA31HMAXDATA32HEND第二十頁(yè),共四十四頁(yè),2022年,8月28日4.2.3循環(huán)程序設(shè)計(jì)一、循環(huán)程序圖4.4第二十一頁(yè),共四十四頁(yè),2022年,8月28日

循環(huán)程序一般由四個(gè)主要部分組成:(1)初始化部分:為循環(huán)程序做準(zhǔn)備,如規(guī)定循環(huán)次數(shù)、給各變量和地址指針預(yù)置初值。(2)處理部分:為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實(shí)體,也是循環(huán)程序的主體。(3)循環(huán)控制部分:這部分的作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結(jié)束,直到符合結(jié)束條件時(shí),跳出循環(huán)為止。(4)結(jié)束部分:這部分主要是對(duì)循環(huán)程序的結(jié)果進(jìn)行分析、處理和存放。第二十二頁(yè),共四十四頁(yè),2022年,8月28日

例5工作單元清零。在應(yīng)用系統(tǒng)程序設(shè)計(jì)時(shí),有時(shí)經(jīng)常需要將存儲(chǔ)器中各部分地址單元作為工作單元,存放程序執(zhí)行的中間值或執(zhí)行結(jié)果,工作單元清零工作常常放在程序的初始化部分中。將外部存儲(chǔ)器1000H—10FFH單元清零程序如下:第二十三頁(yè),共四十四頁(yè),2022年,8月28日方法1CLEAR:MOVR0,#00HMOVDPTR,#1000H;工作單元首址送指針CLEAR1:CLRAMOVX@DPTR,AINCDPTR;修改指針I(yè)NCR0CJNER0,#00H,CLEAR1;控制循環(huán)RET第二十四頁(yè),共四十四頁(yè),2022年,8月28日方法2CLEAR:CLRAMOVDPTR,#1000H;工作單元首址送指針MOVR2,256;置循環(huán)次數(shù)CLEAR1:MOVX@DPTR,AINCDPTR;修改指針DJNZR2,CLEAR1;控制循環(huán)RET第二十五頁(yè),共四十四頁(yè),2022年,8月28日例6設(shè)在內(nèi)部RAM的BLOCK單元開(kāi)始處有長(zhǎng)度為L(zhǎng)EN個(gè)的無(wú)符號(hào)數(shù)據(jù)塊,試編一個(gè)求和程序,并將和存入內(nèi)部RAM的SUM單元(設(shè)和不超過(guò)8位)。

BLOCKEQU20HLENEQU30HSUMEQU40HSTART:CLRA;清累加器AMOVR2,#LEN;數(shù)據(jù)塊長(zhǎng)度送R2MOVR1,#BLOCK;數(shù)據(jù)塊首址送R1LOOP:ADDA,@R1;循環(huán)加法INCR1;修改地址指針DJNZR2,LOOP;修改計(jì)數(shù)器并判斷MOVSUM,A;存和RET第二十六頁(yè),共四十四頁(yè),2022年,8月28日二、多重循環(huán)例750ms延時(shí)程序。延時(shí)程序與MCS-51執(zhí)行指令的時(shí)間有關(guān),如果12MHz晶振,一個(gè)機(jī)器周期為1μs,計(jì)算出一條指令以至一個(gè)循環(huán)所需要的執(zhí)行時(shí)間,給出相應(yīng)的循環(huán)次數(shù),便能達(dá)到延時(shí)的目的。50ms延時(shí)程序需連續(xù)運(yùn)行25000次DJNZ指令:DEL:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RET第二十七頁(yè),共四十四頁(yè),2022年,8月28日

上例程序中采用了多重循環(huán)程序,即在一個(gè)循環(huán)體中又包含了其它的循環(huán)程序,這種方式是實(shí)現(xiàn)延時(shí)程序的常用方法。使用多重循環(huán)時(shí),必須注意:(1)循環(huán)嵌套,必須層次分明,不允許產(chǎn)生內(nèi)外層循環(huán)交叉。(2)外循環(huán)可以一層層向內(nèi)循環(huán)進(jìn)入,結(jié)束時(shí)由里往外一層層退出。(3)內(nèi)循環(huán)可以直接轉(zhuǎn)入外循環(huán),實(shí)現(xiàn)一個(gè)循環(huán)由多個(gè)條件控制的循環(huán)結(jié)構(gòu)方式。第二十八頁(yè),共四十四頁(yè),2022年,8月28日

例8在內(nèi)部RAM中從50H單元開(kāi)始的連續(xù)單元依次存放了一串字符,該字符串以回車(chē)符為結(jié)束標(biāo)志,要求測(cè)試該字符串的長(zhǎng)度。程序如下:START:MOVR2,#0FFHMOVR0,#4FH;數(shù)據(jù)指針R0置初值LOOP:INCR0INCR2CJNE@R0,#0DH,LOOPRET第二十九頁(yè),共四十四頁(yè),2022年,8月28日4.2.4散轉(zhuǎn)程序設(shè)計(jì)

散轉(zhuǎn)程序是分支程序的一種,它可根據(jù)運(yùn)算結(jié)果或輸入數(shù)據(jù)將程序轉(zhuǎn)入不同的分支。MCS-51指令系統(tǒng)中有一條跳轉(zhuǎn)指令JMP@A+DPTR,用它可以很容易地實(shí)現(xiàn)散轉(zhuǎn)功能。此指令的特點(diǎn)在于,轉(zhuǎn)移的目標(biāo)地址不是在編程或匯編時(shí)預(yù)先確定的,而是在程序運(yùn)行過(guò)程中動(dòng)態(tài)地確定的。目標(biāo)地址是以數(shù)據(jù)指針DPTR的內(nèi)容為起始的256字節(jié)范圍內(nèi)的指定地址,即由DPTR的內(nèi)容決定分支轉(zhuǎn)移程序的首地址,由累加器A的內(nèi)容來(lái)動(dòng)態(tài)選擇其中的某一個(gè)分支轉(zhuǎn)移程序。第三十頁(yè),共四十四頁(yè),2022年,8月28日例9根據(jù)工作寄存器R0內(nèi)容的不同,使程序轉(zhuǎn)入相應(yīng)的分支。(R0)=0對(duì)應(yīng)的分支程序標(biāo)號(hào)為PR0;(R0)=1對(duì)應(yīng)的分支程序標(biāo)號(hào)為PR1;(R0)=N對(duì)應(yīng)的分支程序標(biāo)號(hào)為PRN?!谌豁?yè),共四十四頁(yè),2022年,8月28日程序如下:LP0:MOVDPTR,#TAB;取表頭地址MOVA,R0CLRCRLCA;R0內(nèi)容乘以2JNCLP1;無(wú)進(jìn)位轉(zhuǎn)移INCDPH;加進(jìn)位位LP1:JMP@A+DPTR;跳至散轉(zhuǎn)表中相應(yīng)位置TAB:AJMPPR0AJMPPR1………..AJMPPRN……第三十二頁(yè),共四十四頁(yè),2022年,8月28日

本例程序僅適用于散轉(zhuǎn)表首地址TAB和處理程序入口地址PR0,PR1,…,PRN在同一個(gè)2KB范圍的存儲(chǔ)區(qū)內(nèi)的情形。若超出2KB范圍可在分支程序入口處安排一條長(zhǎng)跳轉(zhuǎn)指令,可采用如下程序:MOVDPTR,#TABMOVA,R0MOVB,#03H;長(zhǎng)跳轉(zhuǎn)指令占3個(gè)字節(jié)MULABXCHA,B第三十三頁(yè),共四十四頁(yè),2022年,8月28日

ADDA,DPHMOVDPH,AXCHA,BJMP@A+DPTR;跳至散轉(zhuǎn)表中相應(yīng)的位置TAB:LJMPPR0;跳至不同的分支LJMPPR1LJMPPRN……第三十四頁(yè),共四十四頁(yè),2022年,8月28日4.2.5查表程序設(shè)計(jì)

查表程序是一種常用程序,它廣泛使用于LED顯示控制、打印機(jī)打印控制、數(shù)據(jù)補(bǔ)償、數(shù)值計(jì)算、轉(zhuǎn)換等功能程序中,這類(lèi)程序具有簡(jiǎn)單、執(zhí)行速度快等特點(diǎn)。所謂查表法,就是預(yù)先將滿(mǎn)足一定精度要求的表示變量與函數(shù)值之間關(guān)系的一張表求出,然后把這張表存于單片機(jī)的程序存儲(chǔ)器中,這時(shí)自變量值為單元地址,相應(yīng)的函數(shù)值為該地址單元中的內(nèi)容。查表,就是根據(jù)變量X在表格中查找對(duì)應(yīng)的函數(shù)值Y,使Y=f(X)。第三十五頁(yè),共四十四頁(yè),2022年,8月28日MCS-51指令系統(tǒng)中,有兩條查表指令:MOVCA,@A+PCMOVCA,@A+DPTR查表步驟見(jiàn)書(shū)P50注意:以DPTR和PC作為基地址寄存器的區(qū)別第三十六頁(yè),共四十四頁(yè),2022年,8月28日例10

一個(gè)十六進(jìn)制數(shù)存放在R0寄存器低4位中,將其轉(zhuǎn)換成ASCII碼并送回R0。十六進(jìn)制0~9的ASCII碼為30H~39H,A~F的ASCII碼為41H~46H,ASCII碼表格的首地址為ASCTAB。編程如下:

ORG1000HHEXASC:MOVDPTR#ASCTABMOVA,R0 ANLA,#0FH MOVCA,@A+DPTRMOVR0,A RET第三十七頁(yè),共四十四頁(yè),2022年,8月28日ASCTAB:DB30H,31H,32H,33H,34H DB35H,36H,37H,38H,39H DB41H,42H,43H,44H,45HDB46H在這個(gè)程序中,若查表指令用MOVCA,@A+PC到表格首地址有兩條指令,占用2個(gè)字節(jié)地址空間,故修改指針應(yīng)加2。第三十八頁(yè),共四十四頁(yè),2022年,8月28日4.2.5子程序和參數(shù)傳遞

一、子程序的概念通常把一些基本操作功能編制為程序段作為獨(dú)立的子程序,以供不同程序或同一程序反復(fù)調(diào)用。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令,當(dāng)程序執(zhí)行到調(diào)用指令,就轉(zhuǎn)到子程序中完成規(guī)定的操作,并返回到原來(lái)的程序繼續(xù)執(zhí)行下去。第三十九頁(yè),共四十四頁(yè),2022年,8月28日二、子程序的調(diào)用調(diào)用子程序的指令有“ACALL”和“LCALL”,執(zhí)行調(diào)用指令時(shí),先將程序地址指針PC改變(“ACALL”加2,“LCALL”加3),然后將PC值壓入堆棧,用新的地址值代替。執(zhí)行返回指令時(shí),再將PC值彈出。子程序調(diào)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論