單片微型計(jì)算機(jī)第講機(jī)械_第1頁(yè)
單片微型計(jì)算機(jī)第講機(jī)械_第2頁(yè)
單片微型計(jì)算機(jī)第講機(jī)械_第3頁(yè)
單片微型計(jì)算機(jī)第講機(jī)械_第4頁(yè)
單片微型計(jì)算機(jī)第講機(jī)械_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片微型計(jì)算機(jī)第講機(jī)械第1頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月練習(xí)已知累加器A當(dāng)前的內(nèi)容為23H,進(jìn)位位C為1,執(zhí)行下列指令后,累加器A和進(jìn)位位C各為多少?ANLA,#7FHORLA,#35XRLA,#FFHRLCACJNEA,#40H,AAINCASJMPBBAA:ADDA,#23HBB:SJMP$第2頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月第8-9講教學(xué)目的和要求【教學(xué)目標(biāo)】通過(guò)講述MCS-51單片機(jī)的匯編語(yǔ)言程序設(shè)計(jì)的基本步驟、基本方法,使學(xué)生對(duì)指令系統(tǒng)有進(jìn)一步的認(rèn)識(shí)和理解,同時(shí)使得學(xué)生掌握使用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)的方法,通過(guò)實(shí)例加以鞏固。【教學(xué)重點(diǎn)】①單片機(jī)程序設(shè)計(jì)的基本方法;②查表、差值運(yùn)算、譯碼等簡(jiǎn)單程序設(shè)計(jì)方法;【教學(xué)難點(diǎn)】如何將實(shí)際問(wèn)題轉(zhuǎn)換成單片機(jī)能識(shí)別和解決的問(wèn)題第3頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月第五章MCS-51的匯編語(yǔ)言程序設(shè)計(jì)第4頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1

匯編語(yǔ)言程序設(shè)計(jì)概述語(yǔ)言的發(fā)展機(jī)器語(yǔ)言(MachineLanguage):二進(jìn)制表示指令和數(shù)據(jù),能被機(jī)器直接識(shí)別的計(jì)算機(jī)語(yǔ)言。速度快、占用內(nèi)存少。匯編語(yǔ)言(AssemblyLanguage):采用助記符表示的程序設(shè)計(jì)語(yǔ)言。內(nèi)存空間少,而且執(zhí)行速度快,但移植性差。高級(jí)語(yǔ)言(HighLevelLanguage):高級(jí)語(yǔ)言則是面向用戶的語(yǔ)言,移植性較好。MCS51單片機(jī)支持用匯編語(yǔ)言和C高級(jí)語(yǔ)言進(jìn)行編程,在單片機(jī)內(nèi)部最終轉(zhuǎn)換成機(jī)器語(yǔ)言存儲(chǔ)和運(yùn)行。第5頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月源程序的編輯與匯編解決實(shí)際問(wèn)題時(shí),往往需要根據(jù)業(yè)務(wù)邏輯和支持的指令,完成程序的編寫(xiě)、調(diào)試、編譯、燒制等過(guò)程。第6頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月匯編語(yǔ)言程序的結(jié)構(gòu)匯編語(yǔ)言程序的四分段書(shū)寫(xiě)格式標(biāo)號(hào)字段操作碼字段操作數(shù)字段注釋字段START:MOVA,#00H;0→AMOVR1,#10;10→R1MOVR2,#00000011B;3→R2LOOP:ADDA,R2;(A)+(R2)→ADJNZR1,LOOP;R1減1,若不為0則循環(huán)NOP;延遲1個(gè)機(jī)器周期HERE:SJMPHERE;原地跳轉(zhuǎn)END;程序結(jié)束第7頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.1

指令的格式注意:標(biāo)號(hào):表示該指令所在的符號(hào)地址,一般由字母和數(shù)字組成,第一位為字母,其余位為字母、數(shù)字任選。操作助記符不能缺少;操作數(shù)個(gè)數(shù)可為:1、2、3個(gè),根據(jù)指令本身而定;2個(gè)操作數(shù)的指令,目的操作數(shù)在左邊;一般格式[標(biāo)號(hào):]操作助記符[目的操作數(shù)][,源操作數(shù)][;注釋]匯編程序設(shè)計(jì)中,每一行書(shū)寫(xiě)一條指令。第8頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月指令的補(bǔ)充說(shuō)明所有的符號(hào)均為英文符號(hào),尤其注意常用的”,”、”;”。若書(shū)寫(xiě)錯(cuò)誤,編譯程序?qū)⑻崾尽安荒茏R(shí)別的符號(hào)”。標(biāo)號(hào)的書(shū)寫(xiě)標(biāo)號(hào)后必須跟冒號(hào)。標(biāo)號(hào)最大支持18個(gè)字符,且必須以字母開(kāi)頭同一標(biāo)號(hào)在一個(gè)程序中只能定義一次不允許用系統(tǒng)保留字作為標(biāo)號(hào)一般只有別的指令需要訪問(wèn)的語(yǔ)句才有標(biāo)號(hào)匯編時(shí),匯編程序自動(dòng)將標(biāo)號(hào)轉(zhuǎn)換成地址。第9頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月指令的補(bǔ)充說(shuō)明立即數(shù)和直接地址的書(shū)寫(xiě)若是十進(jìn)制數(shù),后綴可無(wú),也可以寫(xiě)D;其他進(jìn)制必須帶后綴。二進(jìn)制B、八進(jìn)制O、十六進(jìn)制H??梢允亲址?,如’A’、’YU’,編譯時(shí)自動(dòng)轉(zhuǎn)換成其ASCII可以是指令的標(biāo)號(hào)美元符號(hào)$的使用。$符號(hào)表示當(dāng)前地址,一般在程序結(jié)束或原地跳轉(zhuǎn)時(shí)使用,以下兩條指令等價(jià):HERE:SJMPHERESJMP

$第10頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2偽指令偽指令,也稱匯編命令。僅對(duì)匯編過(guò)程進(jìn)行指示,方便匯編程序?qū)⒋a轉(zhuǎn)換成機(jī)器代碼。偽指令無(wú)對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼偽指令具有控制匯編程序的輸入輸出、定義數(shù)據(jù)和符號(hào)、條件匯編,分配存儲(chǔ)空間等功能。快速理解偽指令:如分配存儲(chǔ)空間偽指令,匯編程序在編譯時(shí),根據(jù)偽指令的指示,完成存儲(chǔ)空間的劃分、初值的置入等工作。無(wú)需單片機(jī)去執(zhí)行。第11頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2.1ORG偽指令起始地址設(shè)定偽指令用于指定接下來(lái)指令在ROM中的存放位置使用格式:ORG

16位地址(以四位十六進(jìn)制方式書(shū)寫(xiě))舉例:有如下指令段

ORG2000HSTART:MOVA,#00H注意ORG可以多次使用使用順序必須由小到大ROMMOVA,#00H74H2000H00H第12頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月ORG

偽指令…ORG2500H……ORG2000H……ORG3000H…ORG2000H……ORG2500H……ORG3000H×錯(cuò)誤的書(shū)寫(xiě)方式√正確的書(shū)寫(xiě)方式第13頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2.2END偽指令匯編終止偽指令用于告訴匯編程序,將某一段源程序翻譯成機(jī)器指令的工作到此為止。后面的指令將忽略。在整個(gè)源程序的最后添加END語(yǔ)句。舉例MOVA,#12HMOVA,#23HENDMOVA,#45HROMMOVA,#12H74H12H74H23HMOVA,#23H第14頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2.3DB

偽指令定義字節(jié)數(shù)據(jù)表偽指令用于從指定地址開(kāi)始,在ROM的連續(xù)單元中定義字節(jié)數(shù)據(jù)格式:[標(biāo)號(hào):]DB

字節(jié)數(shù)據(jù)表。用”,”分割表中的多個(gè)數(shù)舉例:ORG1000HTABLE:DB20H,32,’A’,’8’編譯時(shí):十進(jìn)制等自動(dòng)轉(zhuǎn)換成十六進(jìn)制字符轉(zhuǎn)換成ASCII碼ROM1000H20H20H41H38H1001H1002H1003H第15頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月ASCII碼表‘0’~’9’:30H~39H‘A’~’Z’:41H~5AH‘a(chǎn)’~’z’:61H~7AH第16頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2.4DW

偽指令定義字?jǐn)?shù)據(jù)表偽指令從指定地址開(kāi)始,在ROM的連續(xù)單元中定義16位的數(shù)據(jù)字格式:[標(biāo)號(hào):]DW

字?jǐn)?shù)據(jù)表。用”,”分割表中的多個(gè)字舉例:ORG2000HTABLE:DW1246H,10ROM2000H12H46H00H0AH2001H2002H2003H第17頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2.5EQU偽指令用于給標(biāo)號(hào)賦值賦值后,后續(xù)程序中可用此標(biāo)號(hào)表示對(duì)應(yīng)的數(shù)據(jù)格式:標(biāo)號(hào)

EQU數(shù)據(jù)或匯編表達(dá)式。舉例:LENEQU10*3SUMEQU21HMOVR7,#LENMOVSUM,A對(duì)于常用的常量,采用此種方式后,當(dāng)該常量發(fā)生變化時(shí),無(wú)需頻繁更改主程序內(nèi)容,只需修改之前的賦值語(yǔ)句即可。第18頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.1.2.6BIT偽指令將位地址定義成為符號(hào)名指令賦值后,后續(xù)程序中位地址可直接用符號(hào)名表示,增加程序的可讀性。格式:符號(hào)名BIT

位地址表達(dá)式。舉例:STBITP1.0;將P1.0的位地址賦給符號(hào)名STCFBIT0D7H;將位地址為D7H的位定義為符號(hào)名注意:用BIT定義的“符號(hào)名”一經(jīng)定義便不能重新定義和改變第19頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.2匯編語(yǔ)言程序設(shè)計(jì)步驟分析問(wèn)題根據(jù)任務(wù)的要求,確定程序的功能要求、輸入輸出、解決步驟等問(wèn)題。算法設(shè)計(jì)將實(shí)際問(wèn)題轉(zhuǎn)化為計(jì)算機(jī)處理的程序算法算法比較與優(yōu)化(內(nèi)存需求與運(yùn)行速度)第20頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月匯編語(yǔ)言程序設(shè)計(jì)步驟流程描述將算法的內(nèi)容用流程圖的形式表示,更加直觀。典型外設(shè)查詢程序流程第21頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月匯編語(yǔ)言程序設(shè)計(jì)步驟分配內(nèi)存等資源將片內(nèi)RAM資源合理分配,把內(nèi)存區(qū)、堆棧區(qū)、各種緩沖區(qū)進(jìn)行合理分配。確定每個(gè)區(qū)域的首地址,便于編程使用。程序的編寫(xiě)與調(diào)試根據(jù)以上工作,結(jié)合MCS51單片機(jī)的指令系統(tǒng),完成源代碼的編寫(xiě),并上機(jī)調(diào)試,考查各種邊界情況。第22頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月源程序的編輯依據(jù)匯編語(yǔ)言規(guī)則用好偽指令符號(hào)不用中文SJMP$

用于調(diào)試以.ASM存盤(pán)ORG0000HLJMPMAINORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$END……ROMLJMP0040H02H0000H00H40H7FH0040H10HMOVR7,#1680H004BHFEHSJMP$第23頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月程序匯編及連接源程序的匯編匯編源程序轉(zhuǎn)為目標(biāo)程序的過(guò)程叫匯編匯編通常在Windows下的集成開(kāi)發(fā)環(huán)境完成用A51.EXE匯編生成.OBJ、.LIB及.LST目標(biāo)程序的連接.OBJ、.LIB經(jīng)BL51.EXE生成無(wú)擴(kuò)展名的絕對(duì)地址目標(biāo)文件絕對(duì)地址目標(biāo)文件可以用于仿真器調(diào)試調(diào)試無(wú)誤的目標(biāo)文件用OH51.EXE轉(zhuǎn)換為.HEX文件.HEX文件經(jīng)編程器寫(xiě)入單片機(jī)存儲(chǔ)器第24頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月注意事項(xiàng)強(qiáng)化模塊觀念程序模塊(主程序模塊、各種子程序模塊)模塊化優(yōu)點(diǎn):分塊設(shè)計(jì)、便于閱讀、調(diào)試方便采用循環(huán)和子程序使程序占用空間減少、結(jié)構(gòu)清晰循環(huán)初值和結(jié)束條件,避免“死機(jī)”現(xiàn)象子程序的現(xiàn)場(chǎng)保護(hù)(注意棧平衡、寄存器內(nèi)容)第25頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.3匯編語(yǔ)言程序基本結(jié)構(gòu)匯編語(yǔ)言程序主要包含四種結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)第26頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.3.1

順序結(jié)構(gòu)指令執(zhí)行時(shí),其執(zhí)行順序按照指令在存儲(chǔ)器中的存放順序進(jìn)行的。開(kāi)始語(yǔ)句1語(yǔ)句n結(jié)束……【特點(diǎn)】順序執(zhí)行,程序通常簡(jiǎn)單;無(wú)分支、無(wú)循環(huán)、無(wú)轉(zhuǎn)移圖中無(wú)判斷框;第27頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月順序結(jié)構(gòu)舉例1數(shù)據(jù)傳送:內(nèi)部RAM的2AH~2EH單元中存儲(chǔ)的數(shù)據(jù)如圖所示。試編寫(xiě)程序?qū)崿F(xiàn)圖示的數(shù)據(jù)傳送結(jié)果。2EH78H56H34H12H2DH2CH2BH00H2AHACC2EH56H34H12H00H2DH2CH2BH00H2AHACC78H第28頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月方法1內(nèi)部RAM的2AH~2EH單元內(nèi)容傳遞至2BF~2EF、A中。MOVA,2EH;2字節(jié),1個(gè)機(jī)器周期MOV2EH,2DH;3字節(jié),2個(gè)機(jī)器周期MOV2DH,2CH;3字節(jié),2個(gè)機(jī)器周期MOV2CH,2BH;3字節(jié),2個(gè)機(jī)器周期MOV2BH,#00H;3字節(jié),2個(gè)機(jī)器周期使用14個(gè)字節(jié)的指令代碼,執(zhí)行時(shí)間為9個(gè)機(jī)器周期2EH78H56H34H12H2DH2CH2BH00H2AHACC78H56H34H12H00H2EH56H34H12H00H2DH2CH2BH00H2AHACC78H第29頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月方法2內(nèi)部RAM的2AH~2EH單元內(nèi)容傳遞至2BF~2EF、A中。CLRA

;1字節(jié),1個(gè)機(jī)器周期XCHA,2BH;2字節(jié),1個(gè)機(jī)器周期XCHA,2CH;2字節(jié),1個(gè)機(jī)器周期XCHA,2DH;2字節(jié),1個(gè)機(jī)器周期XCHA,2EH;2字節(jié),1個(gè)機(jī)器周期使用9個(gè)字節(jié)的指令代碼,執(zhí)行時(shí)間為5個(gè)機(jī)器周期2EH78H56H34H12H2DH2CH2BH00H2AHACC00H12H00H34H12H56H34H78H56H2EH56H34H12H00H2DH2CH2BH00H2AHACC78H第30頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月順序結(jié)構(gòu)舉例2碼制轉(zhuǎn)換:片內(nèi)RAM的21H單元存放一個(gè)十進(jìn)制數(shù)據(jù)十位的ASCII碼,22H單元存放該數(shù)據(jù)個(gè)位的ASCII碼。編寫(xiě)程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓縮BCD碼存放在20H單元。20H36H34H21H22H數(shù)字字符的ASCII碼為30H+數(shù)如字符3的ASCII碼為33H。右側(cè)表示存放的為數(shù)據(jù)64。64H程序第31頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月ASCII到壓縮BCD碼的轉(zhuǎn)換分析取21H單元低位數(shù)據(jù),移至高位取22H單元內(nèi)容,去掉高位上述結(jié)果組合,傳送至20H單元20H36H34H21H22H64H程序第32頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月ASCII到壓縮BCD碼的轉(zhuǎn)換程序ORG0040HSTART:MOVA,21H;取十位ASCII碼ANLA,#0FH;保留低半字節(jié)SWAPA;移至高半字節(jié)MOV20H,A;存入20H單元MOVA,22H;取個(gè)位ASCII碼ANLA,#0FH;保留低半字節(jié)ORL20H,A;合并到結(jié)果單元SJMP$END20H36H34H21H22HACC36H06H60H60H34H04H64H第33頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月20HX21H程序平方表區(qū)順序結(jié)構(gòu)舉例3查表程序:有一變量存放在片內(nèi)RAM的20H單元,其取值范圍為:00H~05H。要求編制一段程序,使用查表指令,根據(jù)變量值求其平方值,并存入片內(nèi)RAM的21H單元。X2開(kāi)始A→(21H)(20H)→A表格首地址→DPTRMOVCA,@A+DPTR結(jié)束第34頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月查表操作程序

ORG1000HSTART:MOVDPTR,#TABLEMOVA,20HMOVCA,@A+DPTRMOV21H,ASJMP$ORG2000HTABLE:DB00,01,04,09,16,25END開(kāi)始A→(21H)(20H)→A表格首地址→DPTRMOVCA,@A+DPTR結(jié)束第35頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月練習(xí)根據(jù)累加器A的值(0–7FH)查平方表,求平方值,結(jié)果放在BA中。TABLE:DW0000H,0001H,0004H,0009H DW0010H,0019H,……MOV DPTR,#TABLEMOVCA,@A+DPTRMOV B,AINC AMOVCA,@A+DPTR…………TABLE00H00H00H01HTABLE+100HROM04HTABLE+2TABLE+3TABLE+4TABLE+5RLAPUSHACCPOPACCMOV DPTR,#TABLERLAPUSHACCMOVCA,@A+DPTRMOV B,APOPACCINC AMOVCA,@A+DPTR第36頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.3.2

分支結(jié)構(gòu)指令執(zhí)行時(shí),根據(jù)不同的情況執(zhí)行不同的程序段。單分支雙分支多分支第37頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月單分支結(jié)構(gòu)設(shè)累加器A中存儲(chǔ)有符號(hào)數(shù)的原碼,編程轉(zhuǎn)換成補(bǔ)碼開(kāi)始保存A最高位結(jié)束最高位為0NA數(shù)據(jù)位取反+1恢復(fù)符號(hào)位YCMPT:JNBAcc.7,RETURN

MOVC,Acc.7

CPLA ADDA,#1

MOVAcc.7,C RETURN:SJMP$END第38頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月雙分支結(jié)構(gòu)設(shè)變量x以補(bǔ)碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當(dāng)x>0時(shí),y=x;當(dāng)x=0時(shí),y=20H;當(dāng)x<0時(shí),y=x+5。編制程序,根據(jù)x的大小求y并送回30H單元。判斷結(jié)果為0,可通過(guò)執(zhí)行JZrel來(lái)實(shí)現(xiàn)判斷補(bǔ)碼的正負(fù),可通過(guò)最高位來(lái)判斷先與,保留最高位,再判斷結(jié)果是否為零來(lái)實(shí)現(xiàn)第39頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月雙分支結(jié)構(gòu)設(shè)變量x以補(bǔ)碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當(dāng)x>0時(shí),y=x;當(dāng)x=0時(shí),y=20H;當(dāng)x<0時(shí),y=x+5。編制程序,根據(jù)x的大小求y并送回30H單元。第40頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月雙分支結(jié)構(gòu)START:MOVA,30H;取x至累加器

JZNEXT;x=0,轉(zhuǎn)NEXTNEXT:MOV30H,#20HDONE:SJMP$

ENDANLA,#80H;否,保留符號(hào)位JZDONE;x>0,轉(zhuǎn)結(jié)束MOVA,#05H;x<0處理ADDA,30HMOV30H,A;X+05H送YSJMPDONE第41頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.3.3

循環(huán)結(jié)構(gòu)按某種控制規(guī)律重復(fù)執(zhí)行的程序稱為循環(huán)程序。循環(huán)程序有先執(zhí)行后判斷和先判斷后執(zhí)行兩種基本結(jié)構(gòu)。第42頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月例1

延時(shí)程序編寫(xiě)一段延時(shí)50ms的程序若晶振頻率為12MHz,則一個(gè)機(jī)器周期為1μs,延時(shí)50ms,則程序的執(zhí)行時(shí)間為50000個(gè)機(jī)器周期。立即數(shù)取指在0~255之間,可考慮200*250=50000。需要用到減1,結(jié)果不為0則重復(fù)的指令。執(zhí)行一條DJNZ指令需要2個(gè)機(jī)器周期,即2μs。采用循環(huán)計(jì)數(shù)法實(shí)現(xiàn)延時(shí),需要用到雙重循環(huán)。第43頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月延時(shí)程序DEL:MOVR7,#200;1μsDEL1:NOP;1

μsDEL1:MOVR6,#?;1μsNOP ;1μsDEL2:DJNZR6,DEL2;2μsDJNZR7,DEL1;2μs

DEL1:MOVR6,#123;1μs共計(jì)

[(2×123+2+2)×200+1]μs,即50.001ms第44頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月例2

未知次數(shù)的循環(huán)將內(nèi)部RAM中起始地址為data的數(shù)據(jù)串傳送到外部RAM中起始地址為buffer的存儲(chǔ)區(qū)域內(nèi),直到發(fā)現(xiàn)‘$’字符停止傳送?!璬ata??H??Hdata+1……內(nèi)部RAM‘$’??…………bufferbuffer+1……外部RAM問(wèn)題何時(shí)終止傳送?對(duì)取出的數(shù)進(jìn)行與’S’進(jìn)行比較,判斷是否相等。用CJNE

第45頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月例2

未知次數(shù)的循環(huán)程序?qū)?nèi)部RAM中起始地址為data的數(shù)據(jù)串傳送到外部RAM中起始地址為buffer的存儲(chǔ)區(qū)域內(nèi),直到發(fā)現(xiàn)‘$’字符停止傳送。

MOVR0,#dataMOVDPTR,#bufferLOOP:MOVA,@R0

CJNEA,’$’,繼續(xù)執(zhí)行地址結(jié)束

LP:MOVX@DPTR,AINCR0INCDPTRSJMPLOOPLP2:SJMP$END

SJMPLP2

CJNEA,’$’,LP

第46頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月5.4

子程序及其調(diào)用在實(shí)際應(yīng)用中,經(jīng)常會(huì)遇到一些帶有通用性的問(wèn)題,在一個(gè)程序中可能要使用多次。這時(shí)可以將其設(shè)計(jì)成通用的子程序供隨時(shí)調(diào)用,減少代碼冗余。一個(gè)程序中可以多次調(diào)用一個(gè)子程序多個(gè)程序可以調(diào)用一個(gè)子程序子程序可以調(diào)用子程序,最多支持8級(jí)調(diào)用子程序時(shí),單片機(jī)能自動(dòng)保存PC內(nèi)容,遇RET返回時(shí),能自動(dòng)恢復(fù)PC程序1……子程序RET……程序2……第47頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月子程序結(jié)構(gòu)子程序編寫(xiě)完成后,使用ACALL

函數(shù)名(短距離調(diào)用)LCALL

函數(shù)名(整個(gè)ROM區(qū)調(diào)用)此處的函數(shù)名,實(shí)際上是一個(gè)標(biāo)號(hào),編譯后形成具體的地址。子程序的處理過(guò)程中,可能要影響PSW、ACC,以及其他的一些功能寄存器,若這些影響是子程序功能的一部分,則無(wú)需保護(hù);否則,一定要保護(hù)現(xiàn)場(chǎng),使得主程序得以正確執(zhí)行。保護(hù)現(xiàn)場(chǎng)……子程序處理……恢復(fù)現(xiàn)場(chǎng)RET子程序函數(shù)名:第48頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月通過(guò)堆棧進(jìn)行現(xiàn)場(chǎng)的保護(hù)SUB1:PUSHPSW;保護(hù)現(xiàn)場(chǎng)

PUSHACC;

PUSHB;

……MOVPSW,#10H;換當(dāng)前工作寄存器組

……POPB;恢復(fù)現(xiàn)場(chǎng)

POPACC;

POPPSW;

RET注意:①保護(hù)和恢復(fù)的工作在子程序中進(jìn)行。②保護(hù)與恢復(fù)的順序要對(duì)應(yīng)。第49頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月子程序結(jié)構(gòu)子程序參數(shù)的傳遞。調(diào)用子程序時(shí),語(yǔ)句中無(wú)法攜帶子程序運(yùn)行所需的參數(shù)。明確子程序的功能后,對(duì)子程序使用的參數(shù),應(yīng)在調(diào)用之前完成數(shù)據(jù)的賦值等工作。類似乘法指令MULAB,必須在此指令之前將AB賦值,運(yùn)算才有意義。保護(hù)現(xiàn)場(chǎng)……子程序處理……恢復(fù)現(xiàn)場(chǎng)RET子程序函數(shù)名:第50頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月子程序舉例編寫(xiě)程序,實(shí)現(xiàn)c=a2+b2

。設(shè)a,b,c分別存于內(nèi)部RAM的30H,31H,32H三個(gè)單元中如何求數(shù)的平方MULAB左移查表開(kāi)始調(diào)用求平方子程序結(jié)束a2→R1(31H)→A(30H)→AA+R1→A調(diào)用求平方子程序A→32H第51頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月方法1:直接相乘START:MOVA,30H;取aACALLSQR;調(diào)用乘法

MOVR1,A;a2暫存于R1中

MOVA,31H;取bACALLSQR;調(diào)用查平方表

ADDA,R1;a2+b2存于A中

MOV32H,A;存結(jié)果

SJMP$SQR:PUSHPSWMOVB,AMULAB;POPPSW

RET開(kāi)始調(diào)用求平方子程序結(jié)束a2→R1(31H)→A(30H)→AA+R1→A調(diào)用求平方子程序A→32H第52頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月方法2:左移1次START:MOVA,30H;取aACALLSQR;調(diào)用乘法

MOVR1,A;a2暫存于R1中

MOVA,31H;取bACALLSQR;調(diào)用查平方表

ADDA,R1;a2+b2存于A中

MOV32H,A;存結(jié)果

SJMP$SQR:PUSHPSWRLAPOPPSW

RET開(kāi)始調(diào)用求平方子程序結(jié)束a2→R1(31H)→A(30H)→AA+R1→A調(diào)用求平方子程序A→32H第53頁(yè),課件共57頁(yè),創(chuàng)作于2023年2月方法3:查表START:MOVA,30H;取aACALLSQR;調(diào)用乘法

MOVR1,A;a2暫存于R1中

MOVA,31H;取bACALLSQR;調(diào)用查平方表

ADDA,R1;a2+b2存于A中

MOV32H,A;存結(jié)果

SJMP$SQR:MOVDPTR,#TAB;子程序

MOVCA,@A+DPTR;

RET

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論