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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機接口技術ppt第1頁,課件共44頁,創(chuàng)作于2023年2月4.1偽指令

偽指令是對匯編過程起控制作用,但本身并沒有對應的機器代碼的指令。一、匯編起始指令ORG

指令格式為:ORGnn該指令的作用是指明后面的程序或數據塊的起始地址,它總是出現在每段源程序或數據塊的開始。式中,nn為16位地址,匯編時nn確定了此語句后面第一條指令或第一個數據的地址,此后的源程序或數據塊就依次連續(xù)存放在以后的地址內,直到遇到另一個ORG指令為止。第2頁,課件共44頁,創(chuàng)作于2023年2月

例:ORG2000HMOVSP,#60HMOVR0,#2FHMOVR2,#0FFHORG偽指令說明其后面程序的目標代碼在存儲器中存放的起始地址是2000H,即存儲器地址目標程序2000H7581602003H782F2005H7AFF第3頁,課件共44頁,創(chuàng)作于2023年2月二、等值指令EQU

指令格式:字符名稱EQU數字或匯編符號例:PA8155EQU8001H;即給標號PA8155賦值為8001H。功能:使指令中的字符名稱等價于給定的數字或匯編符號。使用等值指令可給程序的編制、調試、修改帶來方便,如果在程序中要多次使用到某一地址,由EQU指令將其賦值給一個字符名稱,一旦需要對其進行變動,只要改變EQU命令后面的數字即可,而不需要對程序中涉及到該地址的所有指令逐句進行修改。但要注意,由EQU等值的字符名稱必須先賦值后使用,且在同一個源程序中,同一個標號只能賦值一次。第4頁,課件共44頁,創(chuàng)作于2023年2月三、定義字節(jié)指令DB

指令格式: [標號:]DB8位二進制數表功能:把8位二進制數表依次存入從標號開始的連續(xù)的存儲單元中。格式中,標號區(qū)段可有可無,DB指令之后的8位二進制數表是字節(jié)常數或用逗號隔開的字節(jié)串,也可以是用引號括起來的ASCII碼字符串(一個ASCII字符相當于一個字節(jié))。例:第5頁,課件共44頁,創(chuàng)作于2023年2月ORG1000HBUF1:DB38H,7FH,80HBUF2:DB45H,66HORG偽指令指定了標號BUF1的地址為1000H,而DB偽指令是將其后的二進制數表38H,7FH,80H依次存放在1000H,1001H,1002H3個連續(xù)單元之中,BUF2也是一個標號,其地址與前一條偽指令連續(xù),即1003H,1004H地址單元中依次存放45H,66H。第6頁,課件共44頁,創(chuàng)作于2023年2月

四、定義字指令DW

指令格式:[標號:]DW16位數據表該指令的功能與DB相似,區(qū)別僅在于從指定地址開始存放的是指令中的16位數據,而不是字節(jié)串。每個16位數據要占兩個存儲單元,高8位先存,低8位后存,這和MCS-51指令中的16位數據存放順序是一致的。第7頁,課件共44頁,創(chuàng)作于2023年2月五、定義存儲區(qū)指令DS

表示在ROM中從標號地址開始,預留一定數量的字節(jié)單元供程序使用

[標號:]DS表達式表達式是由常數、操作符、運算符組合而成的算式第8頁,課件共44頁,創(chuàng)作于2023年2月六、數據地址賦值指令DATA

將表達式的值賦予所定義的字符名,表達式通常為數據地址或代碼地址字符名DATA表達式七、定義地址符號指令BIT

將指定的位地址賦予所定義的字符名字符名BIT位地址第9頁,課件共44頁,創(chuàng)作于2023年2月

八、匯編結束指令END

指令格式:[標號:]END地址或標號格式中標號以及END后面的地址或標號可有可無。功能:提供匯編結束標志。匯編程序遇到END后就停止匯編,對END以后的語句不予處理,故END應放在程序的結束處。第10頁,課件共44頁,創(chuàng)作于2023年2月4.2匯編語言程序設計4.2.1簡單程序設計例1兩個無符號雙字節(jié)數相加。設被加數存放于內部RAM的40H(高位字節(jié)),41H(低位字節(jié)),加數存放于50H(高位字節(jié)),51H(低位字節(jié)),和數存入40H和41H單元中。第11頁,課件共44頁,創(chuàng)作于2023年2月程序如下:

START:CLRC;將Cy清零MOVR0,#41H;將被加數地址送數據指針R0MOVR1,#51H;將加數地址送數據指針R1AD1:MOVA,@R0;被加數低字節(jié)的內容送入AADDA,@R1;兩個低字節(jié)相加MOV@R0,A;低字節(jié)的和存入被加數低字節(jié)中DECR0;指向被加數高位字節(jié)DECR1;指向加數高位字節(jié)MOVA,@R0;被加數高位字節(jié)送入AADDCA,@R1;兩個高位字節(jié)帶Cy相加MOV@R0,A;高位字節(jié)的和送被加數高位字節(jié)RET第12頁,課件共44頁,創(chuàng)作于2023年2月例2將外部RAM中的1000H單元的高4位內容屏蔽掉,結果送外部RAM中的1010H單元

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

第13頁,課件共44頁,創(chuàng)作于2023年2月例3將兩個半字節(jié)數合并成一個一字節(jié)數。設內部RAM40H#,41H單元中分別存放著8位二進制數,要求取出兩個單元中的低半字節(jié),并成一個字節(jié)后,存入50H單元中。程序如下:START:MOVR1,#40H;設置R1為數據指針MOVA,@R1;取出第一個單元中的內容ANLA,#0FH;取第一個數的低半字節(jié)SWAPA ;移至高半字節(jié)INCR1 ;修改數據指針XCHA,@R1 ;取第二個單元中的內容ANLA,#0FH;取第二個數的低半字節(jié)ORLA,@R1 ;拼字MOV50H,A ;存放結果RET第14頁,課件共44頁,創(chuàng)作于2023年2月4.2.2分支程序設計圖4.1分支結構框圖(a)單分支流程;(b)多分支流程第15頁,課件共44頁,創(chuàng)作于2023年2月

例3比較兩個無符號數的大小。設外部RAM的存儲單元ST1和ST2中存放兩個不帶符號的二進制數,找出其中的大數存入外部RAM中的ST3單元中。圖4.2第16頁,課件共44頁,創(chuàng)作于2023年2月程序如下: ORG1000HST1 EQU2000HST2EQU2100HST3EQU2200HSTART:CLRC ;清零Cy MOVDPTR,#ST1;第一個數的指針MOVXA,@DPTR;取第一個數MOVR2,A;保存MOVDPTR,#ST2;第二個數的指針MOVXA,@DPTR;取第二個數CLRC第17頁,課件共44頁,創(chuàng)作于2023年2月SUBBA,R2;兩數比較JNCBIG2;若第二個數大,則轉XCHA,R2;第一個數大,大數送ABIG1:MOVDPTR,#ST3MOVX@DPTR,A;存大數RETBIG2:MOVXA,@DPTR;第二個數大SJMPBIG1RET第18頁,課件共44頁,創(chuàng)作于2023年2月例4兩個帶符號數分別存放在ONE和TWO兩單元中,試比較大小,大的存入MAX單元

CLRCMOVA,ONESUBBA,TWOJZXMAXJBACC.7,NEGJBOV,YMAXSJMPXMAXNEG:JBOV,XMAX第19頁,課件共44頁,創(chuàng)作于2023年2月YMAX:MOVA,TWOSJMPRMAXXMAX:MOVA,ONERMAX:MOVMAX,ARETONEDATA30HTWODATA31HMAXDATA32HEND第20頁,課件共44頁,創(chuàng)作于2023年2月4.2.3循環(huán)程序設計一、循環(huán)程序圖4.4第21頁,課件共44頁,創(chuàng)作于2023年2月

循環(huán)程序一般由四個主要部分組成:(1)初始化部分:為循環(huán)程序做準備,如規(guī)定循環(huán)次數、給各變量和地址指針預置初值。(2)處理部分:為反復執(zhí)行的程序段,是循環(huán)程序的實體,也是循環(huán)程序的主體。(3)循環(huán)控制部分:這部分的作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結束,直到符合結束條件時,跳出循環(huán)為止。(4)結束部分:這部分主要是對循環(huán)程序的結果進行分析、處理和存放。第22頁,課件共44頁,創(chuàng)作于2023年2月

例5工作單元清零。在應用系統程序設計時,有時經常需要將存儲器中各部分地址單元作為工作單元,存放程序執(zhí)行的中間值或執(zhí)行結果,工作單元清零工作常常放在程序的初始化部分中。將外部存儲器1000H—10FFH單元清零程序如下:第23頁,課件共44頁,創(chuàng)作于2023年2月方法1CLEAR:MOVR0,#00HMOVDPTR,#1000H;工作單元首址送指針CLEAR1:CLRAMOVX@DPTR,AINCDPTR;修改指針I(yè)NCR0CJNER0,#00H,CLEAR1;控制循環(huán)RET第24頁,課件共44頁,創(chuàng)作于2023年2月方法2CLEAR:CLRAMOVDPTR,#1000H;工作單元首址送指針MOVR2,256;置循環(huán)次數CLEAR1:MOVX@DPTR,AINCDPTR;修改指針DJNZR2,CLEAR1;控制循環(huán)RET第25頁,課件共44頁,創(chuàng)作于2023年2月例6設在內部RAM的BLOCK單元開始處有長度為LEN個的無符號數據塊,試編一個求和程序,并將和存入內部RAM的SUM單元(設和不超過8位)。

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

上例程序中采用了多重循環(huán)程序,即在一個循環(huán)體中又包含了其它的循環(huán)程序,這種方式是實現延時程序的常用方法。使用多重循環(huán)時,必須注意:(1)循環(huán)嵌套,必須層次分明,不允許產生內外層循環(huán)交叉。(2)外循環(huán)可以一層層向內循環(huán)進入,結束時由里往外一層層退出。(3)內循環(huán)可以直接轉入外循環(huán),實現一個循環(huán)由多個條件控制的循環(huán)結構方式。第28頁,課件共44頁,創(chuàng)作于2023年2月

例8在內部RAM中從50H單元開始的連續(xù)單元依次存放了一串字符,該字符串以回車符為結束標志,要求測試該字符串的長度。程序如下:START:MOVR2,#0FFHMOVR0,#4FH;數據指針R0置初值LOOP:INCR0INCR2CJNE@R0,#0DH,LOOPRET第29頁,課件共44頁,創(chuàng)作于2023年2月4.2.4散轉程序設計

散轉程序是分支程序的一種,它可根據運算結果或輸入數據將程序轉入不同的分支。MCS-51指令系統中有一條跳轉指令JMP@A+DPTR,用它可以很容易地實現散轉功能。此指令的特點在于,轉移的目標地址不是在編程或匯編時預先確定的,而是在程序運行過程中動態(tài)地確定的。目標地址是以數據指針DPTR的內容為起始的256字節(jié)范圍內的指定地址,即由DPTR的內容決定分支轉移程序的首地址,由累加器A的內容來動態(tài)選擇其中的某一個分支轉移程序。第30頁,課件共44頁,創(chuàng)作于2023年2月例9根據工作寄存器R0內容的不同,使程序轉入相應的分支。(R0)=0對應的分支程序標號為PR0;(R0)=1對應的分支程序標號為PR1;(R0)=N對應的分支程序標號為PRN?!?1頁,課件共44頁,創(chuàng)作于2023年2月程序如下:LP0:MOVDPTR,#TAB;取表頭地址MOVA,R0CLRCRLCA;R0內容乘以2JNCLP1;無進位轉移INCDPH;加進位位LP1:JMP@A+DPTR;跳至散轉表中相應位置TAB:AJMPPR0AJMPPR1………..AJMPPRN……第32頁,課件共44頁,創(chuàng)作于2023年2月

本例程序僅適用于散轉表首地址TAB和處理程序入口地址PR0,PR1,…,PRN在同一個2KB范圍的存儲區(qū)內的情形。若超出2KB范圍可在分支程序入口處安排一條長跳轉指令,可采用如下程序:MOVDPTR,#TABMOVA,R0MOVB,#03H;長跳轉指令占3個字節(jié)MULABXCHA,B第33頁,課件共44頁,創(chuàng)作于2023年2月

ADDA,DPHMOVDPH,AXCHA,BJMP@A+DPTR;跳至散轉表中相應的位置TAB:LJMPPR0;跳至不同的分支LJMPPR1LJMPPRN……第34頁,課件共44頁,創(chuàng)作于2023年2月4.2.5查表程序設計

查表程序是一種常用程序,它廣泛使用于LED顯示控制、打印機打印控制、數據補償、數值計算、轉換等功能程序中,這類程序具有簡單、執(zhí)行速度快等特點。所謂查表法,就是預先將滿足一定精度要求的表示變量與函數值之間關系的一張表求出,然后把這張表存于單片機的程序存儲器中,這時自變量值為單元地址,相應的函數值為該地址單元中的內容。查表,就是根據變量X在表格中查找對應的函數值Y,使Y=f(X)。第35頁,課件共44頁,創(chuàng)作于2023年2月MCS-51指令系統中,有兩條查表指令:MOVCA,@A+PCMOVCA,@A+DPTR查表步驟見書P50注意:以DPTR和PC作為基地址寄存器的區(qū)別第36頁,課件共44頁,創(chuàng)作于2023年2月例10

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

ORG1000HHEXASC:MOVDPTR#ASCTABMOVA,R0 ANLA,#0FH MOVCA,@A+DPTRMOVR0,A RET第37頁,課件共44頁,創(chuàng)作于2023年2月ASCTAB:DB30H,31H,32H,33H,34H DB35H,36H,37H,38H,39H DB41H,42H,43H,44H,45HDB46H在這個程序中,若查表指令用MOVCA,@A+PC到表格首地址有兩條指令,占用2個字節(jié)地址空間,故修改指針應加2。第38頁,課件共44頁,創(chuàng)作于2023年2月4.2.5子程序和參數傳遞

一、子程序的概念通常把一些基本操作功能編制為程序段作為獨立的子程序,以供不同程序或同一程序反復調用。在程序中需要執(zhí)行這種操作的地方放置一條調用指令,當程序執(zhí)行到調用指令,就轉到子程序中完成規(guī)定的操作,并返回到原來的程序繼續(xù)執(zhí)行下去。第39頁,課件共44頁,創(chuàng)作于2023年2月二、子程序的調用調用子程序的指令有“ACALL”和“LCALL”,執(zhí)行調用指令時,先將程序地址指針PC改變(“ACALL”加2,“LCALL”加3),然后將PC值壓入堆棧,用新的地址值代替。執(zhí)行返回指令時,再將PC值彈出。子程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論