版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、概述偽指令簡單程序分支程序循環(huán)程序查表程序子程序應(yīng)用舉例課件概述偽指令簡單程序分支程序循環(huán)程序查表程序子程序應(yīng)用舉例課件程序設(shè)計(jì)概述設(shè)計(jì)語言最早人們只能用機(jī)器語言(二進(jìn)制)編寫程序;為了方便記憶,人們開始用助記符形式的匯編語言編寫程序,稱為低級(jí)語言。然后再用匯編系統(tǒng)將其翻譯成機(jī)器語言,該過程稱為匯編;為了用更接近人的語言編寫程序,程序設(shè)計(jì)師們發(fā)明了高級(jí)語言,如: BASIC、FORTRAN、PASCAL、 C、JAVA 然后再用編譯系統(tǒng)將其翻譯成機(jī)器語言,該過程稱為編譯;機(jī)器只能識(shí)別機(jī)器語言。所以必須用編譯系統(tǒng)將高級(jí)語言編寫的源程序編譯成機(jī)器語言,用匯編系統(tǒng)將用匯編語言編寫的源程序匯編成機(jī)器語
2、言;由低級(jí)或高級(jí)語言構(gòu)成的程序稱為源程序,由機(jī)器語言構(gòu)成的程序稱作目標(biāo)程序;2022/9/11程序設(shè)計(jì)概述設(shè)計(jì)語言最早人們只能用機(jī)器語言(二進(jìn)制)編寫程 源程序 目標(biāo)程序 低級(jí)語言機(jī)器語言匯編高級(jí)語言機(jī)器語言編譯單片機(jī)的任務(wù)與設(shè)計(jì)風(fēng)格1)面向控制;2)途徑不一;目標(biāo) 周期短、空間小;掌握方法、學(xué)會(huì)思維2022/9/11 源一、概述1)機(jī)器語言、匯編語言、高級(jí)語言2)機(jī)器匯編、手工匯編 文件后綴ASM OBJ HEX3)程序設(shè)計(jì)步驟 (1) 分析問題;(分析透) (2) 確定算法; (3) 設(shè)計(jì)程序流程圖,參見P76圖4-1 (4) 分配內(nèi)存單元,確定程序和數(shù)據(jù) 區(qū)的起始地址; (5) 編寫匯編
3、語言程序; (6) 仿真、調(diào)試程序、優(yōu)化。 (7) 固化程序。3)注意方法、本章安排2022/9/11一、概述1)機(jī)器語言、匯編語言、高級(jí)語言2022/9/9 2偽指令 偽指令不要求計(jì)算機(jī)做任何操作,也沒有對(duì)應(yīng)的機(jī)器碼,不產(chǎn)生目標(biāo)程序,不影響程序的執(zhí)行,僅僅是能夠幫助進(jìn)行匯編的一些指令。它主要用來指定程序或數(shù)據(jù)的起始位置,給出一些連續(xù)存放數(shù)據(jù)的地址或?yàn)橹虚g運(yùn)算結(jié)果保留一部分存儲(chǔ)空間以及表示源程序結(jié)束等等。不同版本的匯編語言,偽指令的符號(hào)和含義可能有所不同,但基本用法是相似的。2022/9/11 2偽指令2022/9/9二、偽指令定位偽指令ORG(可多個(gè))定義字節(jié)數(shù)據(jù)偽指令DB(定義表格,可設(shè)標(biāo)
4、號(hào))定義字?jǐn)?shù)據(jù)偽指令DW(高位在前)定義空間偽指令DS(預(yù)留)符號(hào)定義偽指令EQU或(可定義寄存器、位、地址(#用法)等,可先使用)數(shù)據(jù)賦值偽指令DATA(與EQU等價(jià))位定義偽指令bit 匯編結(jié)束偽指令END(只有一個(gè))2022/9/11二、偽指令定位偽指令ORG(可多個(gè))2022/9/9 1) 設(shè)置目標(biāo)程序起始地址偽指令ORG 格式:符號(hào): ORG 地址(十六進(jìn)制表示) 該偽指令的功能是規(guī)定其后面的目標(biāo)程序或數(shù)據(jù)塊的起始地址。它放在一段源程序(主程序、子程序)或數(shù)據(jù)塊的前面,說明緊跟在其后的程序段或數(shù)據(jù)塊的起始地址就是ORG后面給出的地址。例如: ORG 2000HSTART:MOV A,
5、#7FH2022/9/11 1) 設(shè)置目標(biāo)程序起始地址偽指令ORG2 2) 結(jié)束匯編偽指令END 格式:標(biāo)號(hào): END END是匯編語言源程序的結(jié)束標(biāo)志,表示匯編結(jié)束。在END以后所寫的指令,匯編程序都不予處理。一個(gè)源程序只能有一個(gè)END命令,否則就有一部分指令不能被匯編。如果END前面加標(biāo)號(hào)的話,則應(yīng)與被結(jié)束程序段的起始點(diǎn)的標(biāo)號(hào)一致,以表示結(jié)束的是哪一個(gè)程序段。2022/9/11 2) 結(jié)束匯編偽指令END2022/9/9 3) 定義字節(jié)偽指令DB 格式:標(biāo)號(hào): DB 項(xiàng)或項(xiàng)表 其中項(xiàng)或項(xiàng)表指一個(gè)字節(jié)數(shù)據(jù),用逗號(hào)分開的字節(jié)數(shù)據(jù)串,或以引號(hào)括起來的字符串。該偽指令的功能是把項(xiàng)或項(xiàng)表的數(shù)據(jù)(字符
6、串按字符順序以ASCII碼)存入從標(biāo)號(hào)地址開始的連續(xù)存儲(chǔ)單元中。例如: ORG 2000HTAB1: DB 30H,8AH,7FH,73 DB 5,A,BCD2022/9/11 3) 定義字節(jié)偽指令DB2022/9/9 由于ORG 2000H,所以TAB1的地址為2000H,因此,以上偽指令經(jīng)匯編后,將對(duì)2000H開始的連續(xù)存儲(chǔ)單元賦值:(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H ;十進(jìn)制數(shù)73以十六進(jìn)制數(shù)存放(2004H)=35H ;35H是數(shù)字5的ASCII碼(2005H)=41H ;41H是字母A的ASCII碼(2006H)=42H ;42H
7、是字符串BCD中B的ASCII碼(2007H)=43H ;43H是字符串BCD中C的ASCII碼(2008H)=44H ;44H是字符串BCD中D的ASCII碼2022/9/11 由于ORG 2000H,所以TAB1的地址 4) 定義字偽指令DW 格式:標(biāo)號(hào): DW 項(xiàng)或項(xiàng)表 DW偽指令與DB相似,但用于定義字的內(nèi)容。項(xiàng)或項(xiàng)表指所定義的一個(gè)字(兩個(gè)字節(jié))或用逗號(hào)分開的字串。匯編時(shí),機(jī)器自動(dòng)按高8位先存入,低8位在后的格式排列。例如: ORG 1500HTAB2: DW 1234H,80H 匯編以后:(1500H)=12H,(1501H)=34H,(1502H)=00H, (1503H)=80H
8、2022/9/11 4) 定義字偽指令DW2022/9/9 5) 預(yù)留存儲(chǔ)空間偽指令DS 格式:標(biāo)號(hào): DS 表達(dá)式 該偽指令的功能是從標(biāo)號(hào)地址開始,保留若干個(gè)字節(jié)的內(nèi)存空間以備存放數(shù)據(jù)。保留的字節(jié)單元數(shù)由表達(dá)式的值決定。例如: ORG 1000H DS 20H DB 30H,8FH 匯編后從1000H開始,預(yù)留32(20H)個(gè)字節(jié)的內(nèi)存單元,然后從1020H開始,按照下一條DB指令賦值,即(1020H)=30H,(1021H)=8FH。2022/9/11 5) 預(yù)留存儲(chǔ)空間偽指令DS2022/9/9 6) 等值偽指令EQU 格式:標(biāo)號(hào): EQU 項(xiàng) 該偽指令的功能是將指令中的項(xiàng)的值賦予EQU
9、前面的標(biāo)號(hào)。項(xiàng)可以是常數(shù)、地址標(biāo)號(hào)或表達(dá)式。例如:TAB1 EQU 1000HTAB2 EQU 2000H (驗(yàn)證是否需要:?) 匯編后TAB1、TAB2分別具有值1000H、2000H。 用EQU偽指令對(duì)某標(biāo)號(hào)賦值后,該標(biāo)號(hào)的值在整個(gè)程序中不能再改變。2022/9/11 6) 等值偽指令EQU2022/9/9 7) 位地址定義偽指令BIT 格式:標(biāo)號(hào) BIT 位地址 該偽指令的功能是將位地址賦予BIT前面的標(biāo)號(hào),經(jīng)賦值后可用該標(biāo)號(hào)代替BIT后面的位地址。例如:PLG BIT F0AI BIT P1.0 經(jīng)以上偽指令定義后,在程序中就可以把FLG和AI作為位地址來使用。2022/9/11 7)
10、 位地址定義偽指令BIT2022/9/單片機(jī)匯編命令與機(jī)器指令地址機(jī)器碼源程序清單0000H0023H2000H2003H2006H2009H02200002XXXX758920 758DF3758BF3D28EMAIN:ORG 0000HLJMP MAINORG 0023HLJMP INTSERORG 2000HMOV TMOD,#20HMOV TH1,#0F3HMOV TL1,0F3HSETB TR1;上電轉(zhuǎn)向主程序;串行口中斷入口;轉(zhuǎn)中斷服務(wù)程序;主程序;設(shè)T1作方式2;賦計(jì)數(shù)初值;啟動(dòng)T12022/9/11單片機(jī)匯編命令與機(jī)器指令地址機(jī)器碼源程序清單ORG 0001目的 (1) 掌握匯
11、編語言程序的基本結(jié)構(gòu)。 (2) 了解匯編語言程序設(shè)計(jì)的基本方法和思路。實(shí)例 霓虹燈的控制2引入請(qǐng)觀察以下幾例程序的執(zhí)行順序?2022/9/111目的實(shí)例 霓虹燈的控制2引入請(qǐng)觀察以下幾例程序霓虹燈的簡易原理P1口滿足什么條件點(diǎn)燈嗎?2022/9/11霓虹燈的簡易原理P1口滿足什么條件點(diǎn)燈嗎?2022/9/9 流程圖2022/9/11 流程圖2022/9/93實(shí)訓(xùn)程序程序1:所有發(fā)光二極管不停地閃動(dòng)。 ORG 0000H;程序從地址0000H開始存放START: MOV P1,#00H;把立即數(shù)00H送P1口,點(diǎn)亮所有發(fā)光二極管 ACALL DELAY;調(diào)用延時(shí)子程序 MOV P1,#0FFH
12、;滅掉所有發(fā)光二極管 ACALL DELAY;調(diào)用延時(shí)子程序 AJMP START;重復(fù)閃動(dòng)DELAY: MOV R3,#7FH ;延時(shí)子程序DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END;匯編程序結(jié)束 2022/9/113實(shí)訓(xùn)程序程序1:所有發(fā)光二極管不停地閃動(dòng)。2022/9/程序2:用開關(guān)控制發(fā)光二極管的顯示方式。 ORG0000H MOVP3,#00010000B ;使P3口鎖存器的P3.4置位 MOVA,P3;讀P3口引腳線信號(hào) ANLA,#00010000B ;“邏輯與”操作,屏蔽掉無關(guān)位 JZ DDPING
13、 ;判斷P3.4是否接地,若是,跳轉(zhuǎn)到DDPING執(zhí)行 MOVP1,#00H;否則,P3.4接高電平,點(diǎn)亮所有發(fā)光二極管 SJMP $DDPING:MOVP1,#55H;P3.4接地,發(fā)光二極管交叉亮滅 SJMP$ ENDA=0A02022/9/11程序2:用開關(guān)控制發(fā)光二極管的顯示方式。A=0A02022程序2流程圖2022/9/11程序2流程圖2022/9/9程序3:使8個(gè)發(fā)光二極管順序點(diǎn)亮。 ORG 0000HSTART: MOV R2,#08H ;設(shè)置循環(huán)次數(shù) MOV A,#0FEH ;送顯示模式字NEXT: MOV P1,A ;點(diǎn)亮連接P1.0的發(fā)光二極管 ACALL DELAY R
14、L A ;左移一位,改變顯示模式字 DJNZ R2,NEXT ;循環(huán)次數(shù)減1,不為零,繼續(xù)點(diǎn)亮下面一個(gè)二極管 SJMP STARTDELAY: MOV R3,#0FFH ;延時(shí)子程序開始DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET ENDR4-10R4-1=0R3-10R3-1=0R2-10R3-1=02022/9/11程序3:使8個(gè)發(fā)光二極管順序點(diǎn)亮。R4-10R4-1=0R程序3流程圖2022/9/11程序3流程圖2022/9/9程序設(shè)計(jì)實(shí)例引入實(shí)例假設(shè)一個(gè)班有50個(gè)人,共有3門選修課:計(jì)算機(jī)算法服裝CAD設(shè)計(jì)德語請(qǐng)找出
15、:同時(shí)選了三門課的同學(xué);2022/9/11程序設(shè)計(jì)實(shí)例引入實(shí)例2022/9/9問題的解決第一步 如何在計(jì)算機(jī)中表示選修某門課的所有同學(xué)5122325225392939412252939計(jì)算機(jī)算法服裝CAD設(shè)計(jì)德語選修這門人數(shù)學(xué)生的學(xué)號(hào)這個(gè)過程實(shí)際上是設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的問題2022/9/11問題的解決第一步5122325225392939412252問題的解決第二步 設(shè)計(jì)思路:找出同時(shí)選了三門課的同學(xué)這個(gè)過程實(shí)際上是設(shè)計(jì)算法的過程,既構(gòu)建模型。計(jì)算機(jī)算法CAD設(shè)計(jì)德語2022/9/11問題的解決第二步這個(gè)過程實(shí)際上是設(shè)計(jì)算法的過程,既構(gòu)建模型。重復(fù)該過程第三步:設(shè)計(jì)流程找出第一個(gè)學(xué)生他選了德語嗎?他
16、選了CAD嗎?記錄要找的人還有學(xué)生嗎?下一個(gè)學(xué)生NNYNYY結(jié)束他選計(jì)算機(jī)嗎?NY2022/9/11重復(fù)該過程第三步:設(shè)計(jì)流程找出第一個(gè)學(xué)生他選了德語嗎?他選了幾點(diǎn)啟示整體構(gòu)思;構(gòu)建整體流程框圖;結(jié)構(gòu)合理,流程清晰,簡單明了;局部模塊化;2022/9/11幾點(diǎn)啟示整體構(gòu)思;2022/9/9為什么要用流程圖?符合人進(jìn)行邏輯思考的習(xí)慣計(jì)算機(jī)從根本上來說,沒有任何邏輯性,所以,你必須告訴它,先做什么,后做什么,遇到什么情況又該做什么,等等流程圖設(shè)計(jì)本身是一個(gè)逐步求精的過程,最終將任務(wù)劃分為若干能由機(jī)器指令實(shí)現(xiàn)的小模塊2022/9/11為什么要用流程圖?符合人進(jìn)行邏輯思考的習(xí)慣2022/9/9第四章
17、程序設(shè)計(jì) 【例4.1.8】(P68)從片內(nèi)RAM 40H單元開始存放三個(gè)無符號(hào)數(shù),若40H單元的數(shù)等于2BH,則把后面兩單元的數(shù)相加,若40H單元的數(shù)等于2DH,則把后面兩單元的數(shù)相減,并將計(jì)算結(jié)果存放到43H單元中。如果40H單元非2BH或2DH,則作出錯(cuò)處理,其出錯(cuò)結(jié)果為FFH。試按要求編制源程序,并手工匯編成機(jī)器碼。 2022/9/11第四章 程序設(shè)計(jì) 【例4.1.8】(P68)從片內(nèi)RAM 4第四章 程序設(shè)計(jì) 地址機(jī)器碼源程序清單0000H:0100H:0102H:0105H:0107H:0109H:010BH:010DH:0110H:0111H:0113H:0115H:0117H:0
18、119H:011CH:020100E540B42B08E5412542F543800FB42D09C3E5419542F54380037543FF80FEMAIN:PLUS:MINUS:ERR:CLOSE:ORGLJMPORGMOVCJNEMOVADDMOVSJMPCJNECLRMOVSUBBMOVSJMPMOVSJMPEND0000HMAIN0100HA,40HA,#2BH,MINUSA,41HA,42H43H,ACLOSEA,#2DH,ERRCA,41HA,42H43H,ACLOSE43H,#0FFH$2022/9/11第四章 程序設(shè)計(jì) 地址機(jī)器碼源程序清單ORG0000H202P70 例
19、4.2.3 數(shù)據(jù)拼拆程序。將內(nèi)部RAM 20H單元中存放的BCD碼十進(jìn)制數(shù)拆開并變成相應(yīng)的ASCII碼,分別存放到21H和22H單元中。4.2 簡單(順序)程序設(shè)計(jì) 本題中,首先必須將兩個(gè)數(shù)拆開,然后再拼裝成兩個(gè)ASCII碼。數(shù)字與ASCII碼之間的關(guān)系是:高4位為0011H,低4位即為該數(shù)字的8421碼。2022/9/11P70 例4.2.3 4.2 簡單(順序)程序設(shè)計(jì) 圖4.6 例4.2題意分析示意圖什么是BCD碼?什么是ASII碼? 數(shù)字與ASCII碼之間的關(guān)系是:高4位為0011H,低4位即為該數(shù)字的8421碼。2022/9/11圖4.6 例4.2題意分析示意圖什么是BCD碼?數(shù)字與
20、AS將20H單元的兩個(gè)壓縮BCD碼拆開變成ASCII碼,存入21H、22H單元。(假設(shè)20H中的BCD碼為00110100)20H21H22HAB0011壓縮BCD碼0011 0011 0100低四位ASII碼高四位ASII碼P78-79 例4.2.32022/9/11將20H單元的兩個(gè)壓縮BCD碼拆開變成ASCII碼,存入21方法1:利用半字節(jié)交換指令來實(shí)現(xiàn)。第四章 程序設(shè)計(jì)2022/9/11方法1:利用半字節(jié)交換指令來實(shí)現(xiàn)。第四章 程序設(shè)計(jì)2022/ ORG 0000H MOV R0,#20H MOV A,#30H XCHD A,R0 MOV 22H,A MOV A,R0 SWAP A O
21、RL A , #30H MOV 21H, A SJMP $ END簡單程序例1-方法1 開始 #20HR0#30HA A的低4位(20H)的低4位 A(22H)(20H)A A的低4位A的高4位 A(21H) 結(jié)束 A+30HAPCPCPCPCPCPCPCPC源程序如下:20H21H22HAR000110010 000000110100000001000011010000110000001100000011PC00112022/9/11 方法2:將BCD碼除以10H,恰好是將BCD碼分別移到了A、B的低4位。然后再各自與30H相或,即成為ASCII碼。第四章 程序設(shè)計(jì)2022/9/11方法2:
22、將BCD碼除以10H,恰好是將BCD碼分別移到了A、ORG 0000HMOV A,20HMOV B,#10HDIV ABORL B,#30HMOV 22H,BORL A,#30HMOV 21H,ASJMP $END 開始 (20H)A10HB A/B (A中為高4位BCD碼,B中為低4位BCD碼) B+30HB B(22H) A+30HA A(21H) 結(jié)束簡單程序例1-方法2源程序如下:20H21H22HAB00110100PCPC0011 01000001 0000PC001100000000 0100PC0011 0100PCPCPC0011PC2022/9/11ORG 0000H 開始
23、 (20H)A10HB A基本步驟題意分析畫出流程圖分配內(nèi)存及端口編制源程序仿真、調(diào)試程序固化程序2022/9/11基本步驟題意分析2022/9/9例4.2.6相似(p72)有兩組BCD碼分別存放在23H、22H單元和33H、32H單元,求它們的和并送入43H、42H單元中去。(高位在前,低位在后)分析:32H33H42HA22H23H43H00111000011001010001000110000111BCD碼83HBCD碼11HBCD碼78HBCD碼56H2022/9/11例4.2.6相似(p72)有兩組BCD碼分別存放在23H、2 ORG 0000H MOV A,22H ADD A,32
24、H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END 此條加法指令可否改用帶進(jìn)位的(ADDC)? 開始(22H)A(32H)+AA十進(jìn)制調(diào)整(33H)+AA A(43H) 結(jié)束 A(42H)(23H)A 十進(jìn)制調(diào)整2022/9/11 開始(22H)A(32H)+AA十進(jìn)制調(diào)整(33H)+ ORG 2000H CLR C MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END32H33H42HA22H23H43H10
25、00 00110101 01100001 00010111 10001000 00110111 1000+1111 10110110 00010001 00010101 01100110 01110110 1000PCPCPCPCPCPCPCPCPC1111 10110110 0001PC0110 1000PC0110 01112022/9/1132H33H42HA22H23H43H4.3 分支程序設(shè)計(jì)結(jié)構(gòu)特點(diǎn):不一定按指令的先后順序依次運(yùn)行程序,程序的流向有兩個(gè)或兩個(gè)以上分支,根據(jù)指定條件選擇程序的流向。a)一般分支 b)散轉(zhuǎn)圖4-4 分支程序結(jié)構(gòu)示意圖(R)=?程序0程序1程序n=n=1=
26、0.條件滿足否?YN程序跳轉(zhuǎn) 順序執(zhí)行2022/9/114.3 分支程序設(shè)計(jì)結(jié)構(gòu)特點(diǎn):不一定按指令的先后順序依次運(yùn)行例4.3.2(p74):已知30H單元中有一變量X,要求編寫一程序按下述要求給Y賦值,結(jié)果存入31H單元。 1 , X0 Y = 0 , X = 0 1 , X0題意:根據(jù)X的不同,程序編寫時(shí)有三個(gè)出口,即有三個(gè)分支! 想一想:程序怎么編寫?0000,00111000,0011正數(shù)標(biāo)志位負(fù)數(shù)標(biāo)志位4.3 分支程序設(shè)計(jì)2022/9/11例4.3.2(p74):已知30H單元中有一變量X,要求編寫分支程序?qū)嵗?三分支程序開始 XAA= 1 A= A+1存結(jié)果結(jié)束YYNN程序框圖:A0
27、?A=0?2022/9/11分支程序?qū)嵗?三分支程序開始 XAA= 1 A= 分支程序?qū)嵗?三分支程序 源程序如下: ORG 2000H MOV A,30H JZ LP1 ;X = 0,轉(zhuǎn)LP1處理 JNB ACC.7,LP2 ;X0,轉(zhuǎn)LP2處理 MOV A,#0FFH ;X0,則Y= 1 SJMP LP1 LP2:MOV A,#01 ;X 0,Y=1 LP1:MOV 31H,A ;存結(jié)果 SJMP $ ;循環(huán)等待,$表示轉(zhuǎn)至 本地址,此方法適用 于一字節(jié)的偏移量最高位為符號(hào)位。本例與P74例4.3.2相似.2022/9/11分支程序?qū)嵗?三分支程序 源程序如下:最高位為符P74 例4.3.
28、2START:SUL:NEG:DATA:FSGN:ORGMOVMOVXJZJBMOVMOVMOVXSJMPMOVSJMPDBDBEND4000HDPTR,#DATAA,DPTRSULACC.7,NEGA,#01HDPTR,#FSGNDPTR,A$A,#0FFHSULxn;取x值;x=0,轉(zhuǎn)SUL;判x的符號(hào)位,為負(fù)轉(zhuǎn)移;若x0,則1A;保存y值;程序結(jié)束,等待處理;若x0,則-1A;x為任意數(shù);n為任意數(shù)1.理解DPTR、MOVX、DB的用法.2.本例若采用CJNE A,#0是否可以?2022/9/11P74 例4.3.2ORG4000H;取x值2022/9/9參照例4.3.3 (P75) 設(shè)
29、內(nèi)部RAM20H單元和30H 單元中分別存放了兩個(gè)8位的無符號(hào)數(shù) X、Y, 若XY 則讓P1.0管腳連接的LED亮;若XY,點(diǎn)亮P1.1X=Y,點(diǎn)亮P1.0X0?NY2022/9/11程序框圖 結(jié)束 開始NYYYNNX,Y符號(hào)相同?XY,點(diǎn)亮程序清單 X DATA 20H Y DATA 30H;偽指令 ORG 0030H MOV A,X XRL A,Y ;X,Y進(jìn)行異或 JB ACC.7,NEXT1 ;二者符號(hào)不同,跳轉(zhuǎn)到NEXT1 MOV A,X ;符號(hào)相同 CJNE A,Y,NEQUAL;X Y,跳轉(zhuǎn)到NEQUAL CLR P1.0 ;X=Y,點(diǎn)亮P1.0 SJMP FINISHNEQUA
30、L: JC XXY ;X Y,轉(zhuǎn)移到XDYNEXT1: MOV A,X JNB ACC.7,XDY ;判斷X的正、負(fù),正則轉(zhuǎn)移到XDYXXY: CLR P1.2 ;X Y,點(diǎn)亮P1.1FINISH: SJMP $ END2022/9/11程序清單 X DATA數(shù)據(jù)比較大小的方法1無符號(hào)數(shù)2有符號(hào)數(shù)還可以利用溢出標(biāo)志OV的狀態(tài)來判斷兩個(gè)有符號(hào)數(shù)的大小。具體算法如下:若X-Y為正數(shù),即CY=0 則 OV=0 時(shí) XY OV=1 時(shí)XY若X-Y為負(fù)數(shù),即CY=1 則 OV=0 時(shí) XY2022/9/11數(shù)據(jù)比較大小的方法1無符號(hào)數(shù)2022/9/94.4 散轉(zhuǎn)程序散轉(zhuǎn)程序是指通過修改某個(gè)參數(shù)后,程序可
31、以有三個(gè)以上的流向,多用于鍵盤程序。常用的指令是JMP A+DPTR,該指令是把16位數(shù)據(jù)指針DPTR的內(nèi)容與累加器A中的8位無符號(hào)數(shù)相加,形成地址,裝入程序計(jì)數(shù)器PC,形成散轉(zhuǎn)的目的地址。DPTR+APCA中內(nèi)容為8位無符號(hào)數(shù)16位地址數(shù)2022/9/114.4 散轉(zhuǎn)程序散轉(zhuǎn)程序是指通過修改某個(gè)參數(shù)后,程序可以有三 程序清單如下:JUMP1: MOV DPTR,JPTAB1 ;跳轉(zhuǎn)表首送數(shù)據(jù)指針 MOV A,R6 ADD A,R6 ;R62A (修正變址值) JNC NOAD ;判有否進(jìn)位 INC DPH ;有進(jìn)位則加到高字節(jié)地址 NOAD: JMP A+DPTR ;轉(zhuǎn)向形成的散轉(zhuǎn)地址人口J
32、PTAB1: AJMP OPR0 ;直接轉(zhuǎn)移地址表 AJMP OPR1 . AJMP OPRn例: 根據(jù)R6的內(nèi)容,轉(zhuǎn)向各自對(duì)應(yīng)的操作程序 1.AJMP 與LJMP的適應(yīng)范圍;(與P56比較)2.若采用LJMP應(yīng)如何如修改?2022/9/11 程序清單如下:例: 根據(jù)圖4.11 指令轉(zhuǎn)移表的存儲(chǔ)格式2022/9/11圖4.11 指令轉(zhuǎn)移表的存儲(chǔ)格式2022/9/9 由于無條件轉(zhuǎn)移指令A(yù)JMP是兩字節(jié)指令,因此控制轉(zhuǎn)移方向的A中的數(shù)值為A=0 轉(zhuǎn)向AJMPONEA=2 轉(zhuǎn)向AJMPTWO A=4 轉(zhuǎn)向AJMPTHREE A=6 轉(zhuǎn)向AJMPFOUR 程序中,從P3口讀入的數(shù)據(jù)分別為0、1、2、3
33、,因此必須乘以2來修正A的值。如果A=2,散轉(zhuǎn)過程如下: JMPA+DPTR PC=TABLE+2 AJMP TWO2022/9/11 由于無條件轉(zhuǎn)移指令A(yù)JMP是兩字節(jié)指令,因此三種無條件轉(zhuǎn)移指令LJMP、AJMP和SJMP 的比較。 三種無條件轉(zhuǎn)移指令在應(yīng)用上的區(qū)別有以下三點(diǎn): 一是轉(zhuǎn)移距離不同,LJMP可在64 KB范圍內(nèi)轉(zhuǎn)移,AJMP指令可以在本指令取出后的2 KB范圍內(nèi)轉(zhuǎn)移,SJMP的轉(zhuǎn)移范圍是以本指令為核心的-126+129 B范圍內(nèi)轉(zhuǎn)移; 二是匯編后機(jī)器碼的字節(jié)數(shù)不同,LJMP是三字節(jié)指令,AJMP和SJMP都是兩字節(jié)指令。2022/9/11三種無條件轉(zhuǎn)移指令LJMP、AJMP和
34、SJMP 的比較。20 三是LJMP和AJMP都是絕對(duì)轉(zhuǎn)移指令,可以計(jì)算得到轉(zhuǎn)移目的地址,而SJMP是相對(duì)轉(zhuǎn)移指令,只能通過轉(zhuǎn)移偏移量來進(jìn)行計(jì)算。 選擇無條件轉(zhuǎn)移指令的原則是根據(jù)跳轉(zhuǎn)的遠(yuǎn)近,盡可能選擇占用字節(jié)數(shù)少的指令。例如,動(dòng)態(tài)暫停指令一般都選用SJMP $,而不用LJMP $。 2022/9/11 三是LJMP和AJMP都是絕對(duì)轉(zhuǎn)移指令,可以結(jié)構(gòu)特點(diǎn):利用轉(zhuǎn)移指令反復(fù)運(yùn)行需要多次重復(fù)的程序段。實(shí)例:前面用到的延時(shí)程序:(DELAY) DELAY: MOV R3, #OFFH DEL2: MOV R4,#0FFH DEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET
35、 循環(huán)程序的組成: 1. 初始化部分(設(shè)定循環(huán)次數(shù)等)。 2. 循環(huán)體(重復(fù)執(zhí)行的部分,用于完成實(shí)際操作) 3. 循環(huán)控制(不斷修改和判別循環(huán)變量,直至結(jié)束)。 4. 循環(huán)結(jié)束處理。4.5 循環(huán)程序設(shè)計(jì)(延時(shí)程序分析與設(shè)計(jì))2022/9/11結(jié)構(gòu)特點(diǎn):利用轉(zhuǎn)移指令反復(fù)運(yùn)行需要多次重復(fù)的程序段。4.5 延時(shí)分析 DELAY: MOV R3, #OFFH ;1T DEL2: MOV R4,#0FFH ;1T DEL1: NOP ;1T DJNZ R4,DEL1 ;2T DJNZ R3,DEL2 ;2T RET ;2T為什么用延時(shí)程序?1)晶振;(設(shè)6MHZ)2)內(nèi)循環(huán)延時(shí);255 X (2+4)=
36、1530 us3)外循環(huán)延時(shí)2+(1530+2+4) X 255=392 ms 或 1530X255=390 ms2022/9/11延時(shí)分析 DELAY: MOV R3, #OFFH 延時(shí)程序設(shè)計(jì)源程序: 指令周期DELAY: MOV R3, #( X )H 1個(gè)T機(jī)器 DEL2: MOV R4,#( Y )H 1個(gè)T機(jī)器 DEL1: NOP 1個(gè)T機(jī)器 NOP 1個(gè)T機(jī)器 DJNZ R4,DEL1 2 個(gè)T機(jī)器 DJNZ R3,DEL2 2個(gè)T機(jī)器 RET指令周期、機(jī)器周期T機(jī)器與時(shí)鐘周期T時(shí)鐘的關(guān)系: T機(jī)器=12T時(shí)鐘=121/fosc=1s (假設(shè)晶振頻率fosc為12M)延時(shí)時(shí)間的簡
37、化計(jì)算結(jié)果: (1+1+2) X Y 延時(shí)時(shí)間怎樣計(jì)算?若想延時(shí)100ms,只需修改計(jì)數(shù)初始值,即 (1+1+2) 125200s=100ms#200#125延時(shí)程序2022/9/11延時(shí)程序設(shè)計(jì)源程序: 延時(shí)程序設(shè)計(jì)1S延時(shí)程序源程序:DELAY: MOV R2, #10 DEL2: MOV R3, #100DEL1: MOV R4,#125(7DH)DEL0: NOP NOP DJNZ R4,DEL0 DJNZ R3,DEL1 DJNZ R2, DEL2 RET1S延時(shí)程序 1)如何精確計(jì)算參數(shù)?2)理解多重循環(huán)2022/9/11延時(shí)程序設(shè)計(jì)1S延時(shí)程序源程序:1S延時(shí)程序 1)如何精確計(jì)
38、延時(shí)程序應(yīng)用編程實(shí)現(xiàn)P1口連接的8個(gè)LED顯示方式如下:從P1.0到P1.7的順序,依次點(diǎn)亮其連接的LED。設(shè)循環(huán)次數(shù) 顯示模式字送P1口開始 顯示模式字左移1位設(shè)循環(huán)初值 次數(shù)10YN2022/9/11延時(shí)程序應(yīng)用編程實(shí)現(xiàn)P1口連接的8個(gè)LED顯示方式如下:從P依次點(diǎn)亮其連接的LED ORG 0000HSTART: MOV R2,#08H ;設(shè)置循環(huán)次數(shù) MOV A,#0FEH ;送顯示模式字NEXT: MOV P1,A ;點(diǎn)亮二極管 ACALL DELAY RL A ;左移一位,改變顯示模式字 DJNZ R2,NEXT ;循環(huán)次數(shù)減1,不為零,繼續(xù)點(diǎn)亮 SJMP START ;下面一個(gè)二極
39、管 DELAY: MOV R3,#0FFH ;延時(shí)子程序開始DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 2022/9/11依次點(diǎn)亮其連接的LED 數(shù)據(jù)傳送程序書P86例4.4.6:不同存儲(chǔ)區(qū)域之間的數(shù)據(jù)傳輸:將內(nèi)部RAM30H單元開始的內(nèi)容傳送到外部RAM0100H單元開始的區(qū)域,直到遇到傳送的內(nèi)容是0為止。地址指針R0賦初值 (R0)AA(DPTR), 地址指針增1地址指針DPTR賦初值 A = 0NY初始化部分循環(huán)體循環(huán)控制循環(huán)結(jié)束開始結(jié)束2022/9/11數(shù)據(jù)傳送程序書P86例4.4.6:不同存儲(chǔ)區(qū)域之間的數(shù)
40、據(jù)傳輸 ORG0000H MOVR0,#30H ;R0指向內(nèi)部RAM數(shù)據(jù)區(qū)首地址 MOVDPTR,#0100H ;DPTR指向外部RAM數(shù)據(jù)區(qū)首地址TRANS: MOVA,R0 ;A(R0) MOVXDPTR,A;(DPTR)A CJNEA,#00H,NEXT SJMPFINISH;A=0,傳送完成NEXT: INCR0;修改地址指針 INCDPTR AJMPTRANS;繼續(xù)傳送FINISH: SJMP $ END程序清單2022/9/11 ORG0000H程序清單20224.6 查表程序表格是事先存放在ROM中的,一般為一串有序的常數(shù),例如平方表、字型碼表等。表格可通過偽指令DB來確定。通過
41、查表指令 MOVC A,A+DPTR MOVC A,A+PC來實(shí)現(xiàn)。 在LED顯示和鍵盤處理程序中將會(huì)用到。2022/9/114.6 查表程序表格是事先存放在ROM中的,一般為一串有序的P98例4.5.1 用查表法計(jì)算平方(一) ORG 0000H MOV DPTR,#TABLE ;表首地址送DPTR MOV A,#05;被查數(shù)字05A MOVC A,A+DPTR ;查表求平方 SJMP $ TABLE:DB 0,1,4,9,16,25,36,49,64,81 END 2022/9/11P98例4.5.1 用查表法計(jì)算平方(一)2022/9/9P98 用查表法計(jì)算平方(二) ORG 0000H
42、0000H MOV A,#05 ;05 A0002H ADD A,#02 ;修正累加器A0004H MOVC A,A+PC ;查表求平方0005H SJMP $ 0007H: DB 0,1,4,9,16,25,36,49,64,81 END 1)為什么修正A?2022/9/11P98 用查表法計(jì)算平方(二) 1)為什么修正A?2022/4.7 子程序設(shè)計(jì)在實(shí)際問題中,常常會(huì)遇到在一個(gè)程序中多次用到相同的運(yùn)算或操作,若每遇到這些運(yùn)算或操作,都從頭編起,將使程序繁瑣、浪費(fèi)內(nèi)存。因此在實(shí)際中,經(jīng)常把這種多次使用的程序段,按一定結(jié)構(gòu)編好,存放在存儲(chǔ)器中,當(dāng)需要時(shí),可以調(diào)用這些獨(dú)立的程序段。通常將這種可
43、以被調(diào)用的程序段稱為子程序。主要內(nèi)容: 1. 主程序與子程序的關(guān)系 2. 子程序嵌套 3. 子程序的調(diào)用與返回2022/9/114.7 子程序設(shè)計(jì)在實(shí)際問題中,常常會(huì)遇到在一個(gè)程序中多次用(一)短調(diào)用指令1,短調(diào)用指令 ACALL addr11 PC+2PCSP+1SP, PC70(SP)SP+1SP, PC158(SP)addr11 PC100 子程序的調(diào)用包含兩部分內(nèi)容:a, 實(shí)現(xiàn)轉(zhuǎn)入子程序的入口地址;這主要由調(diào)用語句中的addr11或addr16 實(shí)現(xiàn)。b,子程序完成后,能夠自動(dòng)的返回;這是由調(diào)用語句執(zhí)行時(shí)依靠堆棧操作已經(jīng)將返回地址壓棧保存,帶返回時(shí)彈出送PC實(shí)現(xiàn)的。2022/9/11(
44、一)短調(diào)用指令1,短調(diào)用指令 ACALL addr11 PC高5位(保持不變) PC低11位A10A9A800 001A7A6A5A4A3A2A1A0操作碼(第一字節(jié))操作數(shù)(第二字節(jié))11位轉(zhuǎn)移地址的形成示意圖程序計(jì)數(shù)器PC(2)絕對(duì)轉(zhuǎn)移指令(短)AJMP addr11 ; PC+2PC, addr11 PC.10PC.02022/9/11 PC高5位 PC低11位A10A9A800(二)長調(diào)用指令 2, 長調(diào)用指令 LCALL addr16PC+3PCSP+1SP, PC70(SP)SP+1SP, PC158(SP)addr16 PC子程序的調(diào)用包含兩部分內(nèi)容:a, 實(shí)現(xiàn)轉(zhuǎn)入子程序的入口地
45、址;這主要由調(diào)用語句中的addr11或addr16 實(shí)現(xiàn)。b,子程序完成后,能夠自動(dòng)的返回;這是由調(diào)用語句執(zhí)行時(shí)依靠堆棧操作已經(jīng)將返回地址壓棧保存,帶返回時(shí)彈出送PC實(shí)現(xiàn)的。2022/9/11(二)長調(diào)用指令 (三)返回指令格式:RET (子程序返回 操作碼:22H) 操作: (SP) PC158 , SP-1SP (SP) PC 70 , SP-1SP格式:RETI (中斷子程序返回 操作碼:32H) 操作: (SP) PC158 , SP-1SP (SP) PC 70 , SP-1SP RETI與RET的區(qū)別在于返回主程序后,RETI還要清除相應(yīng)的中斷優(yōu)先級(jí)狀態(tài)位,使系統(tǒng)響應(yīng)低優(yōu)先級(jí)的中斷
46、。返回2022/9/11(三)返回指令格式:RET (子程序返回 操作主程序與子程序的關(guān)系 子程序SUB 主程序MAIN返回 LCALL SUB 調(diào)用子程序子程序入口地址RET2022/9/11主程序與子程序的關(guān)系 子程序SUB 主程序MAIN返回 ORG0100H MAIN:MOVA,#0FEH;送顯示初值 LP:MOVR0,#10;送閃爍次數(shù) LP0:MOVP1,A;點(diǎn)亮LEDLCALLDELAY;延時(shí)MOVP1,#0FFH;熄滅燈LCALLDELAY;延時(shí)DJNZR0,LP0 RLA SJMPLP END實(shí)例:LED燈的閃爍點(diǎn)亮(一)延時(shí)次數(shù)-1=0點(diǎn)亮相應(yīng)的LEDYN熄滅相應(yīng)的LED延
47、時(shí)初值左移1位指向下一個(gè)LED設(shè)閃爍次數(shù)送顯示初值開始2022/9/11 ORG0100H 實(shí)例子程序嵌套 子程序嵌套(或稱多重轉(zhuǎn)子)是指在子程序執(zhí)行過程中,還可以調(diào)用另一個(gè)子程序。 子程序SUB1 主程序MAINLCALL SUB1 RET 子程序SUB2RETLCALL SUB2 2022/9/11子程序嵌套 子程序嵌套(或稱多重轉(zhuǎn)子)是指在子程 ORG 0100H MAIN: MOV A,#0FEH;送顯示初值 COUN: ACALL FLASH;調(diào)閃爍子程序 RL A;A左移,下一個(gè)燈閃爍 SJMP COUN ;循環(huán)不止. FLASH: MOV R0,#10;送閃爍次數(shù)FLASH1:
48、MOV P1,A;點(diǎn)亮LED LCALL DELAY;延時(shí) MOV P1,#0FFH;熄滅燈 LCALL DELAY;延時(shí) DJNZ R0,FLASH1;閃爍次數(shù)不夠10次,繼續(xù) RET. DELAY: MOV R3,#0FFH ;延時(shí)子程序 DEL2: MOV R4,#0FFH DEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET ENDLED燈的閃爍點(diǎn)亮(二)子程序嵌套范例2022/9/11 ORG 0100H LED燈的閃爍點(diǎn)亮(二圖4.14 子程序兩次調(diào)用、返回過程示意圖2022/9/11圖4.14 子程序兩次調(diào)用、返回過程示意圖2022/9/9子程序的調(diào)用與
49、返回 問題:子程序調(diào)用、返回到主程序中的正確位置,并接著執(zhí)行主程序中的后續(xù)指令呢? 為了解決這個(gè)問題,我們采用了堆棧技術(shù)。 子程序SUB1 主程序MAINRET 子程序SUB2RET20102013211021132100220020 132013 PC21 131321堆棧指針SP堆棧LCALL SUB1LCALL SUB2211320132022/9/11子程序的調(diào)用與返回 問題:子程序調(diào)用、返回到主 1. 堆棧概念 堆棧實(shí)際上是內(nèi)部RAM的一部分,堆棧的具體位置由堆棧指針SP確定。SP是一個(gè)8位寄存器,用于存放堆棧的棧底(初始化)地址和棧頂?shù)刂贰?單片機(jī)復(fù)位或上電時(shí),SP的初值是07H,
50、表示堆棧棧底為07H, SP中的地址值隨著加1后,存入數(shù)據(jù)。SP的值總是指向最后放進(jìn)堆棧的一個(gè)數(shù),此時(shí),SP中的地址稱為棧頂?shù)刂?。堆棧結(jié)構(gòu)示意圖如圖4.22所示。堆棧(參見P105-106)2022/9/11堆棧(參見P105-106)2022/9/9圖4.22 堆棧結(jié)構(gòu)示意圖2022/9/11圖4.22 堆棧結(jié)構(gòu)示意圖2022/9/9 2. 堆棧操作 堆棧有兩種最基本操作:向堆棧存入數(shù)據(jù)稱為“入棧”或“壓入堆?!保≒USH);從堆棧取出數(shù)據(jù)稱為“出?!被颉皬棾龆褩!保≒OP)。堆棧中數(shù)據(jù)的存取采用后進(jìn)先出方式,即后入棧的數(shù)據(jù),彈出時(shí)先彈出,類似貨棧堆放貨物的存取方式,“堆?!币辉~因此而得名。
51、 由于單片機(jī)初始化的堆棧區(qū)域同第1組工作寄存器區(qū)重合,也就是說,當(dāng)把堆棧棧底設(shè)在07H處時(shí),就不能使用第1組工作寄存器,如果堆棧存入數(shù)據(jù)量比較大的話,甚至第2組和第3組工作寄存器也不能使用了。因此,在匯編語言程序設(shè)計(jì)中,通??偸前讯褩^(qū)的位置設(shè)在用戶RAM區(qū)。例如 2022/9/11 2. 堆棧操作2022/9/9 MOVSP,#60H;將堆棧棧底設(shè)在內(nèi)部RAM的60H處 3. 堆棧的功能 最初,堆棧是為了子程序調(diào)用和返回而設(shè)計(jì)的,執(zhí)行調(diào)用指令(LCALL、ACALL)時(shí),CPU自動(dòng)把斷點(diǎn)地址壓棧;執(zhí)行返回指令RET時(shí),自動(dòng)從堆棧中彈出斷點(diǎn)地址。 由于堆棧操作簡單,程序員也經(jīng)常用堆棧暫存中間結(jié)
52、果或數(shù)據(jù)。只是使用時(shí)需要注意堆棧先進(jìn)后出的特點(diǎn)?;謴?fù)現(xiàn)場的順序就不能弄反,先保護(hù)的DPH后恢復(fù)出來。 另外,在子程序調(diào)用時(shí),CPU會(huì)自動(dòng)利用堆棧進(jìn)行保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場。 2022/9/11 MOVSP,#60H;將堆棧棧底設(shè)在內(nèi) 4. 堆棧操作與RAM操作的比較 堆棧作為內(nèi)部RAM的一個(gè)特殊區(qū)域,又有其獨(dú)特性,為匯編語言程序設(shè)計(jì)提供了更多的方便。同內(nèi)部RAM的操作相比較,使用堆棧有以下優(yōu)點(diǎn): (1) 使用內(nèi)部RAM必須知道單元具體地址,而堆棧只需設(shè)置好棧底地址,就可放心使用,無需再記住單元具體地址。 (2) 當(dāng)我們需要重新分配內(nèi)存工作單元時(shí),程序中使用內(nèi)部RAM的地方,都要修改單元地址,而堆棧
53、只需修改棧底地址就行了。2022/9/11 4. 堆棧操作與RAM操作的比較2022/9/ (3) 堆棧所特有的先進(jìn)后出特點(diǎn),使得數(shù)據(jù)彈出之后,存儲(chǔ)單元自動(dòng)回收、再次使用,充分提高了內(nèi)存的利用率;而內(nèi)部RAM的操作是不可能實(shí)現(xiàn)自動(dòng)回收再利用的,必須通過編程員的重新分配,才能再次使用。2022/9/11 (3) 堆棧所特有的先進(jìn)后出特點(diǎn),使得數(shù)據(jù)彈子程序設(shè)計(jì)注意事項(xiàng) (1)要給每個(gè)子程序起一個(gè)名字,也就是入口地址的代號(hào)。 (2)要能正確地傳遞參數(shù)。即首先要有入口條件,說明進(jìn)入子程序時(shí),它所要處理的數(shù)據(jù)放在何處(如:是放在A中還是放在某個(gè)工作寄存器中等)。另外,要有出口條件,即處理的結(jié)果存放在何處
54、。 (3)注意保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場。在子程序使用累加器、工作寄存器等資源時(shí),要先將其原來的內(nèi)容保存起來,即保護(hù)現(xiàn)場。當(dāng)子程序執(zhí)行完畢,在返回主程序之前,要將這些內(nèi)容再取出,送還到累加器、工作寄存器等原單元中,這一過程稱為恢復(fù)現(xiàn)場。例4.6.2 查表子程序(p92)。注意:1.入口參數(shù)和出口參數(shù)的位置 2.現(xiàn)場的保護(hù)與恢復(fù)。2022/9/11子程序設(shè)計(jì)注意事項(xiàng) (1)要給每個(gè)子程序起一個(gè)名字,也子程序的參數(shù)傳遞 范例:計(jì)算平方和c=a2+b2 ORG0000H ;主程序MOVSP,#3FH ;設(shè)置棧底MOVA,31H ;取數(shù)a存放到累加器A中作為入口參數(shù)LCALL SQR ;計(jì)算a2MOVR1,A
55、 ;出口參數(shù)平方值存放在A中MOVA,32H ;取數(shù)b存放到累加器A中作為出口參數(shù)LCALL SQR ;計(jì)算b2ADDA,R1 ;求和MOV33H,A ;存放結(jié)果SJMP$ P103例4.6.22022/9/11子程序的參數(shù)傳遞P103例4.6.22022/9/9;子程序:SQR;功能:通過查表求出平方值y=x2;入口參數(shù):x存放在累加器A中;出口參數(shù):求得的平方值y存放在A中;占用資源:累加器A,數(shù)據(jù)指針DPTRSQR:PUSH DPH ;保護(hù)現(xiàn)場,將主程序中DPTR的高八位放入堆棧 PUSH DPL ;保護(hù)現(xiàn)場,將主程序中DPTR的低八位放入堆棧 MOV DPTR,#TABLE ;在子程序
56、中重新使用DPTR,表首地址DPTR MOVC A, A+DPTR ;查表 POP DPL;恢復(fù)現(xiàn)場,將主程序中DPTR的低八位從堆棧中彈出 POP DPH;恢復(fù)現(xiàn)場,將主程序中DPTR的高八位從堆棧中彈出 RETTABLE: DB 0,1,4,9,16,25,36,49,64,81與P106例比較參數(shù)傳遞地方法2022/9/11與P106例比較參數(shù)傳遞地方法2022/9/9八路彩燈控制程序(最后)要求:(對(duì)應(yīng)的口為1時(shí)點(diǎn)亮)(1)D1D8八個(gè)彩燈按規(guī)定順序依次點(diǎn)亮(間隔1秒),最后全亮;(2)按規(guī)定順序依次熄滅(間隔1秒),最后全滅;(3)八個(gè)燈同時(shí)點(diǎn)亮,保持1秒;(4)八個(gè)燈同時(shí)熄滅,保持
57、0.5秒; 再將第3、4步重復(fù)4遍,最后整個(gè)程序再重復(fù)N遍。步驟:(1)繪制流程圖(2)編寫程序(3)調(diào)試程序霓虹紅燈設(shè)計(jì)2022/9/11八路彩燈控制程序(最后)要求:(對(duì)應(yīng)的口為1時(shí)點(diǎn)亮)步驟:霓 ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV R7,#7LOOP: MOV R6,#16 MOV R5,#4 MOV DPTR,#TABL MOV R4,#0LOOP1:MOV A,R4 MOVC A,A+DPTR MOV P1,A INC R4 LCALL DELAY LCALL DELAY DJNZ R6,LOOP1LOOP2: MOV P1,#0FFH LCA
58、LL DELAY LCALL DELAY MOV P1,#00H LCALL DELAY DJNZ R5,LOOP2 DJNZ R7,LOOP SJMP $ END 開始 初始化參數(shù) 查表 延時(shí)循環(huán)次數(shù)到否?結(jié)束NY 亮滅4次循環(huán)N次到否?NY 霓虹紅燈設(shè)計(jì)2022/9/11 ORG 0000H開始 初始化參數(shù) 常用匯編子程序(P118)TABL: DB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH,0FFH DB 7FH, 3FH, 1FH, 0FH, 07H, 03H, 01H,00H 2022/9/11常用匯編子程序(P118)TABL: DB 01H, 03H500us延時(shí)程序 (12Mhz) DELAY: MOV R2, #5 ;1T DEL0: MOV R3, #100 ;1T DEL1:
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度電商合同電子數(shù)據(jù)證據(jù)收集與保全操作規(guī)范3篇
- 2025-2031年中國網(wǎng)絡(luò)購物行業(yè)市場深度研究及投資策略研究報(bào)告
- 2025年度智慧城市安防系統(tǒng)承包清工勞務(wù)合同4篇
- 2025年中國醫(yī)用空氣凈化器行業(yè)發(fā)展監(jiān)測及投資規(guī)劃建議報(bào)告
- 2025年度教育資源共享平臺(tái)建設(shè)與運(yùn)營合同范本4篇
- 2025年度個(gè)人二手房交易合同模板物業(yè)費(fèi)繳納優(yōu)化版4篇
- 2025年貴州仁懷市供銷社股金公司招聘筆試參考題庫含答案解析
- 2025年江西有為生物技術(shù)有限公司招聘筆試參考題庫含答案解析
- 2025年四川宇客旅游開發(fā)有限公司招聘筆試參考題庫含答案解析
- 2025年江西贛州市會(huì)昌縣發(fā)展集團(tuán)招聘筆試參考題庫含答案解析
- 《請(qǐng)柬及邀請(qǐng)函》課件
- 中小銀行上云趨勢研究分析報(bào)告
- 機(jī)電安裝工程安全培訓(xùn)
- 遼寧省普通高中2024-2025學(xué)年高一上學(xué)期12月聯(lián)合考試語文試題(含答案)
- 青海原子城的課程設(shè)計(jì)
- 常州大學(xué)《新媒體文案創(chuàng)作與傳播》2023-2024學(xué)年第一學(xué)期期末試卷
- 麻醉蘇醒期躁動(dòng)患者護(hù)理
- 英語雅思8000詞匯表
- 小學(xué)好詞好句好段摘抄(8篇)
- JT-T-1059.1-2016交通一卡通移動(dòng)支付技術(shù)規(guī)范第1部分:總則
- 《茶藝文化初探》(教學(xué)設(shè)計(jì))-六年級(jí)勞動(dòng)北師大版
評(píng)論
0/150
提交評(píng)論