版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、概述偽指令簡單程序分支程序循環(huán)程序查表程序子程序應(yīng)用舉例課件概述偽指令簡單程序分支程序循環(huán)程序查表程序子程序應(yīng)用舉例課件程序設(shè)計概述設(shè)計語言最早人們只能用機器語言(二進制)編寫程序;為了方便記憶,人們開始用助記符形式的匯編語言編寫程序,稱為低級語言。然后再用匯編系統(tǒng)將其翻譯成機器語言,該過程稱為匯編;為了用更接近人的語言編寫程序,程序設(shè)計師們發(fā)明了高級語言,如: BASIC、FORTRAN、PASCAL、 C、JAVA 然后再用編譯系統(tǒng)將其翻譯成機器語言,該過程稱為編譯;機器只能識別機器語言。所以必須用編譯系統(tǒng)將高級語言編寫的源程序編譯成機器語言,用匯編系統(tǒng)將用匯編語言編寫的源程序匯編成機器語
2、言;由低級或高級語言構(gòu)成的程序稱為源程序,由機器語言構(gòu)成的程序稱作目標程序;2022/9/11程序設(shè)計概述設(shè)計語言最早人們只能用機器語言(二進制)編寫程 源程序 目標程序 低級語言機器語言匯編高級語言機器語言編譯單片機的任務(wù)與設(shè)計風格1)面向控制;2)途徑不一;目標 周期短、空間??;掌握方法、學會思維2022/9/11 源一、概述1)機器語言、匯編語言、高級語言2)機器匯編、手工匯編 文件后綴ASM OBJ HEX3)程序設(shè)計步驟 (1) 分析問題;(分析透) (2) 確定算法; (3) 設(shè)計程序流程圖,參見P76圖4-1 (4) 分配內(nèi)存單元,確定程序和數(shù)據(jù) 區(qū)的起始地址; (5) 編寫匯編
3、語言程序; (6) 仿真、調(diào)試程序、優(yōu)化。 (7) 固化程序。3)注意方法、本章安排2022/9/11一、概述1)機器語言、匯編語言、高級語言2022/9/9 2偽指令 偽指令不要求計算機做任何操作,也沒有對應(yīng)的機器碼,不產(chǎn)生目標程序,不影響程序的執(zhí)行,僅僅是能夠幫助進行匯編的一些指令。它主要用來指定程序或數(shù)據(jù)的起始位置,給出一些連續(xù)存放數(shù)據(jù)的地址或為中間運算結(jié)果保留一部分存儲空間以及表示源程序結(jié)束等等。不同版本的匯編語言,偽指令的符號和含義可能有所不同,但基本用法是相似的。2022/9/11 2偽指令2022/9/9二、偽指令定位偽指令ORG(可多個)定義字節(jié)數(shù)據(jù)偽指令DB(定義表格,可設(shè)標
4、號)定義字數(shù)據(jù)偽指令DW(高位在前)定義空間偽指令DS(預留)符號定義偽指令EQU或(可定義寄存器、位、地址(#用法)等,可先使用)數(shù)據(jù)賦值偽指令DATA(與EQU等價)位定義偽指令bit 匯編結(jié)束偽指令END(只有一個)2022/9/11二、偽指令定位偽指令ORG(可多個)2022/9/9 1) 設(shè)置目標程序起始地址偽指令ORG 格式:符號: ORG 地址(十六進制表示) 該偽指令的功能是規(guī)定其后面的目標程序或數(shù)據(jù)塊的起始地址。它放在一段源程序(主程序、子程序)或數(shù)據(jù)塊的前面,說明緊跟在其后的程序段或數(shù)據(jù)塊的起始地址就是ORG后面給出的地址。例如: ORG 2000HSTART:MOV A,
5、#7FH2022/9/11 1) 設(shè)置目標程序起始地址偽指令ORG2 2) 結(jié)束匯編偽指令END 格式:標號: END END是匯編語言源程序的結(jié)束標志,表示匯編結(jié)束。在END以后所寫的指令,匯編程序都不予處理。一個源程序只能有一個END命令,否則就有一部分指令不能被匯編。如果END前面加標號的話,則應(yīng)與被結(jié)束程序段的起始點的標號一致,以表示結(jié)束的是哪一個程序段。2022/9/11 2) 結(jié)束匯編偽指令END2022/9/9 3) 定義字節(jié)偽指令DB 格式:標號: DB 項或項表 其中項或項表指一個字節(jié)數(shù)據(jù),用逗號分開的字節(jié)數(shù)據(jù)串,或以引號括起來的字符串。該偽指令的功能是把項或項表的數(shù)據(jù)(字符
6、串按字符順序以ASCII碼)存入從標號地址開始的連續(xù)存儲單元中。例如: ORG 2000HTAB1: DB 30H,8AH,7FH,73 DB 5,A,BCD2022/9/11 3) 定義字節(jié)偽指令DB2022/9/9 由于ORG 2000H,所以TAB1的地址為2000H,因此,以上偽指令經(jīng)匯編后,將對2000H開始的連續(xù)存儲單元賦值:(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H ;十進制數(shù)73以十六進制數(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 格式:標號: DW 項或項表 DW偽指令與DB相似,但用于定義字的內(nèi)容。項或項表指所定義的一個字(兩個字節(jié))或用逗號分開的字串。匯編時,機器自動按高8位先存入,低8位在后的格式排列。例如: ORG 1500HTAB2: DW 1234H,80H 匯編以后:(1500H)=12H,(1501H)=34H,(1502H)=00H, (1503H)=80H
8、2022/9/11 4) 定義字偽指令DW2022/9/9 5) 預留存儲空間偽指令DS 格式:標號: DS 表達式 該偽指令的功能是從標號地址開始,保留若干個字節(jié)的內(nèi)存空間以備存放數(shù)據(jù)。保留的字節(jié)單元數(shù)由表達式的值決定。例如: ORG 1000H DS 20H DB 30H,8FH 匯編后從1000H開始,預留32(20H)個字節(jié)的內(nèi)存單元,然后從1020H開始,按照下一條DB指令賦值,即(1020H)=30H,(1021H)=8FH。2022/9/11 5) 預留存儲空間偽指令DS2022/9/9 6) 等值偽指令EQU 格式:標號: EQU 項 該偽指令的功能是將指令中的項的值賦予EQU
9、前面的標號。項可以是常數(shù)、地址標號或表達式。例如:TAB1 EQU 1000HTAB2 EQU 2000H (驗證是否需要:?) 匯編后TAB1、TAB2分別具有值1000H、2000H。 用EQU偽指令對某標號賦值后,該標號的值在整個程序中不能再改變。2022/9/11 6) 等值偽指令EQU2022/9/9 7) 位地址定義偽指令BIT 格式:標號 BIT 位地址 該偽指令的功能是將位地址賦予BIT前面的標號,經(jīng)賦值后可用該標號代替BIT后面的位地址。例如:PLG BIT F0AI BIT P1.0 經(jīng)以上偽指令定義后,在程序中就可以把FLG和AI作為位地址來使用。2022/9/11 7)
10、 位地址定義偽指令BIT2022/9/單片機匯編命令與機器指令地址機器碼源程序清單0000H0023H2000H2003H2006H2009H02200002XXXX758920 758DF3758BF3D28EMAIN:ORG 0000HLJMP MAINORG 0023HLJMP INTSERORG 2000HMOV TMOD,#20HMOV TH1,#0F3HMOV TL1,0F3HSETB TR1;上電轉(zhuǎn)向主程序;串行口中斷入口;轉(zhuǎn)中斷服務(wù)程序;主程序;設(shè)T1作方式2;賦計數(shù)初值;啟動T12022/9/11單片機匯編命令與機器指令地址機器碼源程序清單ORG 0001目的 (1) 掌握匯
11、編語言程序的基本結(jié)構(gòu)。 (2) 了解匯編語言程序設(shè)計的基本方法和思路。實例 霓虹燈的控制2引入請觀察以下幾例程序的執(zhí)行順序?2022/9/111目的實例 霓虹燈的控制2引入請觀察以下幾例程序霓虹燈的簡易原理P1口滿足什么條件點燈嗎?2022/9/11霓虹燈的簡易原理P1口滿足什么條件點燈嗎?2022/9/9 流程圖2022/9/11 流程圖2022/9/93實訓程序程序1:所有發(fā)光二極管不停地閃動。 ORG 0000H;程序從地址0000H開始存放START: MOV P1,#00H;把立即數(shù)00H送P1口,點亮所有發(fā)光二極管 ACALL DELAY;調(diào)用延時子程序 MOV P1,#0FFH
12、;滅掉所有發(fā)光二極管 ACALL DELAY;調(diào)用延時子程序 AJMP START;重復閃動DELAY: MOV R3,#7FH ;延時子程序DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END;匯編程序結(jié)束 2022/9/113實訓程序程序1:所有發(fā)光二極管不停地閃動。2022/9/程序2:用開關(guān)控制發(fā)光二極管的顯示方式。 ORG0000H MOVP3,#00010000B ;使P3口鎖存器的P3.4置位 MOVA,P3;讀P3口引腳線信號 ANLA,#00010000B ;“邏輯與”操作,屏蔽掉無關(guān)位 JZ DDPING
13、 ;判斷P3.4是否接地,若是,跳轉(zhuǎn)到DDPING執(zhí)行 MOVP1,#00H;否則,P3.4接高電平,點亮所有發(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個發(fā)光二極管順序點亮。 ORG 0000HSTART: MOV R2,#08H ;設(shè)置循環(huán)次數(shù) MOV A,#0FEH ;送顯示模式字NEXT: MOV P1,A ;點亮連接P1.0的發(fā)光二極管 ACALL DELAY R
14、L A ;左移一位,改變顯示模式字 DJNZ R2,NEXT ;循環(huán)次數(shù)減1,不為零,繼續(xù)點亮下面一個二極管 SJMP STARTDELAY: MOV R3,#0FFH ;延時子程序開始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個發(fā)光二極管順序點亮。R4-10R4-1=0R程序3流程圖2022/9/11程序3流程圖2022/9/9程序設(shè)計實例引入實例假設(shè)一個班有50個人,共有3門選修課:計算機算法服裝CAD設(shè)計德語請找出
15、:同時選了三門課的同學;2022/9/11程序設(shè)計實例引入實例2022/9/9問題的解決第一步 如何在計算機中表示選修某門課的所有同學5122325225392939412252939計算機算法服裝CAD設(shè)計德語選修這門人數(shù)學生的學號這個過程實際上是設(shè)計數(shù)據(jù)結(jié)構(gòu)的問題2022/9/11問題的解決第一步5122325225392939412252問題的解決第二步 設(shè)計思路:找出同時選了三門課的同學這個過程實際上是設(shè)計算法的過程,既構(gòu)建模型。計算機算法CAD設(shè)計德語2022/9/11問題的解決第二步這個過程實際上是設(shè)計算法的過程,既構(gòu)建模型。重復該過程第三步:設(shè)計流程找出第一個學生他選了德語嗎?他
16、選了CAD嗎?記錄要找的人還有學生嗎?下一個學生NNYNYY結(jié)束他選計算機嗎?NY2022/9/11重復該過程第三步:設(shè)計流程找出第一個學生他選了德語嗎?他選了幾點啟示整體構(gòu)思;構(gòu)建整體流程框圖;結(jié)構(gòu)合理,流程清晰,簡單明了;局部模塊化;2022/9/11幾點啟示整體構(gòu)思;2022/9/9為什么要用流程圖?符合人進行邏輯思考的習慣計算機從根本上來說,沒有任何邏輯性,所以,你必須告訴它,先做什么,后做什么,遇到什么情況又該做什么,等等流程圖設(shè)計本身是一個逐步求精的過程,最終將任務(wù)劃分為若干能由機器指令實現(xiàn)的小模塊2022/9/11為什么要用流程圖?符合人進行邏輯思考的習慣2022/9/9第四章
17、程序設(shè)計 【例4.1.8】(P68)從片內(nèi)RAM 40H單元開始存放三個無符號數(shù),若40H單元的數(shù)等于2BH,則把后面兩單元的數(shù)相加,若40H單元的數(shù)等于2DH,則把后面兩單元的數(shù)相減,并將計算結(jié)果存放到43H單元中。如果40H單元非2BH或2DH,則作出錯處理,其出錯結(jié)果為FFH。試按要求編制源程序,并手工匯編成機器碼。 2022/9/11第四章 程序設(shè)計 【例4.1.8】(P68)從片內(nèi)RAM 4第四章 程序設(shè)計 地址機器碼源程序清單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è)計 地址機器碼源程序清單ORG0000H202P70 例
19、4.2.3 數(shù)據(jù)拼拆程序。將內(nèi)部RAM 20H單元中存放的BCD碼十進制數(shù)拆開并變成相應(yīng)的ASCII碼,分別存放到21H和22H單元中。4.2 簡單(順序)程序設(shè)計 本題中,首先必須將兩個數(shù)拆開,然后再拼裝成兩個ASCII碼。數(shù)字與ASCII碼之間的關(guān)系是:高4位為0011H,低4位即為該數(shù)字的8421碼。2022/9/11P70 例4.2.3 4.2 簡單(順序)程序設(shè)計 圖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單元的兩個壓縮BCD碼拆開變成ASCII碼,存入21H、22H單元。(假設(shè)20H中的BCD碼為00110100)20H21H22HAB0011壓縮BCD碼0011 0011 0100低四位ASII碼高四位ASII碼P78-79 例4.2.32022/9/11將20H單元的兩個壓縮BCD碼拆開變成ASCII碼,存入21方法1:利用半字節(jié)交換指令來實現(xiàn)。第四章 程序設(shè)計2022/9/11方法1:利用半字節(jié)交換指令來實現(xiàn)。第四章 程序設(shè)計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è)計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 此條加法指令可否改用帶進位的(ADDC)? 開始(22H)A(32H)+AA十進制調(diào)整(33H)+AA A(43H) 結(jié)束 A(42H)(23H)A 十進制調(diào)整2022/9/11 開始(22H)A(32H)+AA十進制調(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è)計結(jié)構(gòu)特點:不一定按指令的先后順序依次運行程序,程序的流向有兩個或兩個以上分支,根據(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è)計結(jié)構(gòu)特點:不一定按指令的先后順序依次運行例4.3.2(p74):已知30H單元中有一變量X,要求編寫一程序按下述要求給Y賦值,結(jié)果存入31H單元。 1 , X0 Y = 0 , X = 0 1 , X0題意:根據(jù)X的不同,程序編寫時有三個出口,即有三個分支! 想一想:程序怎么編寫?0000,00111000,0011正數(shù)標志位負數(shù)標志位4.3 分支程序設(shè)計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é)的偏移量最高位為符號位。本例與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的符號位,為負轉(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 單元中分別存放了兩個8位的無符號數(shù) X、Y, 若XY 則讓P1.0管腳連接的LED亮;若XY,點亮P1.1X=Y,點亮P1.0X0?NY2022/9/11程序框圖 結(jié)束 開始NYYYNNX,Y符號相同?XY,點亮程序清單 X DATA 20H Y DATA 30H;偽指令 ORG 0030H MOV A,X XRL A,Y ;X,Y進行異或 JB ACC.7,NEXT1 ;二者符號不同,跳轉(zhuǎn)到NEXT1 MOV A,X ;符號相同 CJNE A,Y,NEQUAL;X Y,跳轉(zhuǎn)到NEQUAL CLR P1.0 ;X=Y,點亮P1.0 SJMP FINISHNEQUA
30、L: JC XXY ;X Y,轉(zhuǎn)移到XDYNEXT1: MOV A,X JNB ACC.7,XDY ;判斷X的正、負,正則轉(zhuǎn)移到XDYXXY: CLR P1.2 ;X Y,點亮P1.1FINISH: SJMP $ END2022/9/11程序清單 X DATA數(shù)據(jù)比較大小的方法1無符號數(shù)2有符號數(shù)還可以利用溢出標志OV的狀態(tài)來判斷兩個有符號數(shù)的大小。具體算法如下:若X-Y為正數(shù),即CY=0 則 OV=0 時 XY OV=1 時XY若X-Y為負數(shù),即CY=1 則 OV=0 時 XY2022/9/11數(shù)據(jù)比較大小的方法1無符號數(shù)2022/9/94.4 散轉(zhuǎn)程序散轉(zhuǎn)程序是指通過修改某個參數(shù)后,程序可
31、以有三個以上的流向,多用于鍵盤程序。常用的指令是JMP A+DPTR,該指令是把16位數(shù)據(jù)指針DPTR的內(nèi)容與累加器A中的8位無符號數(shù)相加,形成地址,裝入程序計數(shù)器PC,形成散轉(zhuǎn)的目的地址。DPTR+APCA中內(nèi)容為8位無符號數(shù)16位地址數(shù)2022/9/114.4 散轉(zhuǎn)程序散轉(zhuǎn)程序是指通過修改某個參數(shù)后,程序可以有三 程序清單如下:JUMP1: MOV DPTR,JPTAB1 ;跳轉(zhuǎn)表首送數(shù)據(jù)指針 MOV A,R6 ADD A,R6 ;R62A (修正變址值) JNC NOAD ;判有否進位 INC DPH ;有進位則加到高字節(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)向各自對應(yīng)的操作程序 1.AJMP 與LJMP的適應(yīng)范圍;(與P56比較)2.若采用LJMP應(yīng)如何如修改?2022/9/11 程序清單如下:例: 根據(jù)圖4.11 指令轉(zhuǎn)移表的存儲格式2022/9/11圖4.11 指令轉(zhuǎn)移表的存儲格式2022/9/9 由于無條件轉(zhuǎn)移指令AJMP是兩字節(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)移指令AJMP是兩字節(jié)指令,因此三種無條件轉(zhuǎn)移指令LJMP、AJMP和SJMP 的比較。 三種無條件轉(zhuǎn)移指令在應(yīng)用上的區(qū)別有以下三點: 一是轉(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)移; 二是匯編后機器碼的字節(jié)數(shù)不同,LJMP是三字節(jié)指令,AJMP和SJMP都是兩字節(jié)指令。2022/9/11三種無條件轉(zhuǎn)移指令LJMP、AJMP和
34、SJMP 的比較。20 三是LJMP和AJMP都是絕對轉(zhuǎn)移指令,可以計算得到轉(zhuǎn)移目的地址,而SJMP是相對轉(zhuǎn)移指令,只能通過轉(zhuǎn)移偏移量來進行計算。 選擇無條件轉(zhuǎn)移指令的原則是根據(jù)跳轉(zhuǎn)的遠近,盡可能選擇占用字節(jié)數(shù)少的指令。例如,動態(tài)暫停指令一般都選用SJMP $,而不用LJMP $。 2022/9/11 三是LJMP和AJMP都是絕對轉(zhuǎn)移指令,可以結(jié)構(gòu)特點:利用轉(zhuǎn)移指令反復運行需要多次重復的程序段。實例:前面用到的延時程序:(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)體(重復執(zhí)行的部分,用于完成實際操作) 3. 循環(huán)控制(不斷修改和判別循環(huán)變量,直至結(jié)束)。 4. 循環(huán)結(jié)束處理。4.5 循環(huán)程序設(shè)計(延時程序分析與設(shè)計)2022/9/11結(jié)構(gòu)特點:利用轉(zhuǎn)移指令反復運行需要多次重復的程序段。4.5 延時分析 DELAY: MOV R3, #OFFH ;1T DEL2: MOV R4,#0FFH ;1T DEL1: NOP ;1T DJNZ R4,DEL1 ;2T DJNZ R3,DEL2 ;2T RET ;2T為什么用延時程序?1)晶振;(設(shè)6MHZ)2)內(nèi)循環(huán)延時;255 X (2+4)=
36、1530 us3)外循環(huán)延時2+(1530+2+4) X 255=392 ms 或 1530X255=390 ms2022/9/11延時分析 DELAY: MOV R3, #OFFH 延時程序設(shè)計源程序: 指令周期DELAY: MOV R3, #( X )H 1個T機器 DEL2: MOV R4,#( Y )H 1個T機器 DEL1: NOP 1個T機器 NOP 1個T機器 DJNZ R4,DEL1 2 個T機器 DJNZ R3,DEL2 2個T機器 RET指令周期、機器周期T機器與時鐘周期T時鐘的關(guān)系: T機器=12T時鐘=121/fosc=1s (假設(shè)晶振頻率fosc為12M)延時時間的簡
37、化計算結(jié)果: (1+1+2) X Y 延時時間怎樣計算?若想延時100ms,只需修改計數(shù)初始值,即 (1+1+2) 125200s=100ms#200#125延時程序2022/9/11延時程序設(shè)計源程序: 延時程序設(shè)計1S延時程序源程序: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延時程序 1)如何精確計算參數(shù)?2)理解多重循環(huán)2022/9/11延時程序設(shè)計1S延時程序源程序:1S延時程序 1)如何精確計
38、延時程序應(yīng)用編程實現(xiàn)P1口連接的8個LED顯示方式如下:從P1.0到P1.7的順序,依次點亮其連接的LED。設(shè)循環(huán)次數(shù) 顯示模式字送P1口開始 顯示模式字左移1位設(shè)循環(huán)初值 次數(shù)10YN2022/9/11延時程序應(yīng)用編程實現(xiàn)P1口連接的8個LED顯示方式如下:從P依次點亮其連接的LED ORG 0000HSTART: MOV R2,#08H ;設(shè)置循環(huán)次數(shù) MOV A,#0FEH ;送顯示模式字NEXT: MOV P1,A ;點亮二極管 ACALL DELAY RL A ;左移一位,改變顯示模式字 DJNZ R2,NEXT ;循環(huán)次數(shù)減1,不為零,繼續(xù)點亮 SJMP START ;下面一個二極
39、管 DELAY: MOV R3,#0FFH ;延時子程序開始DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 2022/9/11依次點亮其連接的LED 數(shù)據(jù)傳送程序書P86例4.4.6:不同存儲區(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:不同存儲區(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來實現(xiàn)。 在LED顯示和鍵盤處理程序中將會用到。2022/9/114.6 查表程序表格是事先存放在ROM中的,一般為一串有序的P98例4.5.1 用查表法計算平方(一) 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 用查表法計算平方(一)2022/9/9P98 用查表法計算平方(二) 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 用查表法計算平方(二) 1)為什么修正A?2022/4.7 子程序設(shè)計在實際問題中,常常會遇到在一個程序中多次用到相同的運算或操作,若每遇到這些運算或操作,都從頭編起,將使程序繁瑣、浪費內(nèi)存。因此在實際中,經(jīng)常把這種多次使用的程序段,按一定結(jié)構(gòu)編好,存放在存儲器中,當需要時,可以調(diào)用這些獨立的程序段。通常將這種可
43、以被調(diào)用的程序段稱為子程序。主要內(nèi)容: 1. 主程序與子程序的關(guān)系 2. 子程序嵌套 3. 子程序的調(diào)用與返回2022/9/114.7 子程序設(shè)計在實際問題中,常常會遇到在一個程序中多次用(一)短調(diào)用指令1,短調(diào)用指令 ACALL addr11 PC+2PCSP+1SP, PC70(SP)SP+1SP, PC158(SP)addr11 PC100 子程序的調(diào)用包含兩部分內(nèi)容:a, 實現(xiàn)轉(zhuǎn)入子程序的入口地址;這主要由調(diào)用語句中的addr11或addr16 實現(xiàn)。b,子程序完成后,能夠自動的返回;這是由調(diào)用語句執(zhí)行時依靠堆棧操作已經(jīng)將返回地址壓棧保存,帶返回時彈出送PC實現(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)移地址的形成示意圖程序計數(shù)器PC(2)絕對轉(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, 實現(xiàn)轉(zhuǎn)入子程序的入口地
45、址;這主要由調(diào)用語句中的addr11或addr16 實現(xiàn)。b,子程序完成后,能夠自動的返回;這是由調(diào)用語句執(zhí)行時依靠堆棧操作已經(jīng)將返回地址壓棧保存,帶返回時彈出送PC實現(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)先級狀態(tài)位,使系統(tǒng)響應(yīng)低優(yōu)先級的中斷
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;點亮LEDLCALLDELAY;延時MOVP1,#0FFH;熄滅燈LCALLDELAY;延時DJNZR0,LP0 RLA SJMPLP END實例:LED燈的閃爍點亮(一)延時次數(shù)-1=0點亮相應(yīng)的LEDYN熄滅相應(yīng)的LED延
47、時初值左移1位指向下一個LED設(shè)閃爍次數(shù)送顯示初值開始2022/9/11 ORG0100H 實例子程序嵌套 子程序嵌套(或稱多重轉(zhuǎn)子)是指在子程序執(zhí)行過程中,還可以調(diào)用另一個子程序。 子程序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左移,下一個燈閃爍 SJMP COUN ;循環(huán)不止. FLASH: MOV R0,#10;送閃爍次數(shù)FLASH1:
48、MOV P1,A;點亮LED LCALL DELAY;延時 MOV P1,#0FFH;熄滅燈 LCALL DELAY;延時 DJNZ R0,FLASH1;閃爍次數(shù)不夠10次,繼續(xù) RET. DELAY: MOV R3,#0FFH ;延時子程序 DEL2: MOV R4,#0FFH DEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET ENDLED燈的閃爍點亮(二)子程序嵌套范例2022/9/11 ORG 0100H LED燈的閃爍點亮(二圖4.14 子程序兩次調(diào)用、返回過程示意圖2022/9/11圖4.14 子程序兩次調(diào)用、返回過程示意圖2022/9/9子程序的調(diào)用與
49、返回 問題:子程序調(diào)用、返回到主程序中的正確位置,并接著執(zhí)行主程序中的后續(xù)指令呢? 為了解決這個問題,我們采用了堆棧技術(shù)。 子程序SUB1 主程序MAINRET 子程序SUB2RET20102013211021132100220020 132013 PC21 131321堆棧指針SP堆棧LCALL SUB1LCALL SUB2211320132022/9/11子程序的調(diào)用與返回 問題:子程序調(diào)用、返回到主 1. 堆棧概念 堆棧實際上是內(nèi)部RAM的一部分,堆棧的具體位置由堆棧指針SP確定。SP是一個8位寄存器,用于存放堆棧的棧底(初始化)地址和棧頂?shù)刂贰?單片機復位或上電時,SP的初值是07H,
50、表示堆棧棧底為07H, SP中的地址值隨著加1后,存入數(shù)據(jù)。SP的值總是指向最后放進堆棧的一個數(shù),此時,SP中的地址稱為棧頂?shù)刂贰6褩=Y(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ù)的存取采用后進先出方式,即后入棧的數(shù)據(jù),彈出時先彈出,類似貨棧堆放貨物的存取方式,“堆?!币辉~因此而得名。
51、 由于單片機初始化的堆棧區(qū)域同第1組工作寄存器區(qū)重合,也就是說,當把堆棧棧底設(shè)在07H處時,就不能使用第1組工作寄存器,如果堆棧存入數(shù)據(jù)量比較大的話,甚至第2組和第3組工作寄存器也不能使用了。因此,在匯編語言程序設(shè)計中,通??偸前讯褩^(qū)的位置設(shè)在用戶RAM區(qū)。例如 2022/9/11 2. 堆棧操作2022/9/9 MOVSP,#60H;將堆棧棧底設(shè)在內(nèi)部RAM的60H處 3. 堆棧的功能 最初,堆棧是為了子程序調(diào)用和返回而設(shè)計的,執(zhí)行調(diào)用指令(LCALL、ACALL)時,CPU自動把斷點地址壓棧;執(zhí)行返回指令RET時,自動從堆棧中彈出斷點地址。 由于堆棧操作簡單,程序員也經(jīng)常用堆棧暫存中間結(jié)
52、果或數(shù)據(jù)。只是使用時需要注意堆棧先進后出的特點?;謴同F(xiàn)場的順序就不能弄反,先保護的DPH后恢復出來。 另外,在子程序調(diào)用時,CPU會自動利用堆棧進行保護現(xiàn)場和恢復現(xiàn)場。 2022/9/11 MOVSP,#60H;將堆棧棧底設(shè)在內(nèi) 4. 堆棧操作與RAM操作的比較 堆棧作為內(nèi)部RAM的一個特殊區(qū)域,又有其獨特性,為匯編語言程序設(shè)計提供了更多的方便。同內(nèi)部RAM的操作相比較,使用堆棧有以下優(yōu)點: (1) 使用內(nèi)部RAM必須知道單元具體地址,而堆棧只需設(shè)置好棧底地址,就可放心使用,無需再記住單元具體地址。 (2) 當我們需要重新分配內(nèi)存工作單元時,程序中使用內(nèi)部RAM的地方,都要修改單元地址,而堆棧
53、只需修改棧底地址就行了。2022/9/11 4. 堆棧操作與RAM操作的比較2022/9/ (3) 堆棧所特有的先進后出特點,使得數(shù)據(jù)彈出之后,存儲單元自動回收、再次使用,充分提高了內(nèi)存的利用率;而內(nèi)部RAM的操作是不可能實現(xiàn)自動回收再利用的,必須通過編程員的重新分配,才能再次使用。2022/9/11 (3) 堆棧所特有的先進后出特點,使得數(shù)據(jù)彈子程序設(shè)計注意事項 (1)要給每個子程序起一個名字,也就是入口地址的代號。 (2)要能正確地傳遞參數(shù)。即首先要有入口條件,說明進入子程序時,它所要處理的數(shù)據(jù)放在何處(如:是放在A中還是放在某個工作寄存器中等)。另外,要有出口條件,即處理的結(jié)果存放在何處
54、。 (3)注意保護現(xiàn)場和恢復現(xiàn)場。在子程序使用累加器、工作寄存器等資源時,要先將其原來的內(nèi)容保存起來,即保護現(xiàn)場。當子程序執(zhí)行完畢,在返回主程序之前,要將這些內(nèi)容再取出,送還到累加器、工作寄存器等原單元中,這一過程稱為恢復現(xiàn)場。例4.6.2 查表子程序(p92)。注意:1.入口參數(shù)和出口參數(shù)的位置 2.現(xiàn)場的保護與恢復。2022/9/11子程序設(shè)計注意事項 (1)要給每個子程序起一個名字,也子程序的參數(shù)傳遞 范例:計算平方和c=a2+b2 ORG0000H ;主程序MOVSP,#3FH ;設(shè)置棧底MOVA,31H ;取數(shù)a存放到累加器A中作為入口參數(shù)LCALL SQR ;計算a2MOVR1,A
55、 ;出口參數(shù)平方值存放在A中MOVA,32H ;取數(shù)b存放到累加器A中作為出口參數(shù)LCALL SQR ;計算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 ;保護現(xiàn)場,將主程序中DPTR的高八位放入堆棧 PUSH DPL ;保護現(xiàn)場,將主程序中DPTR的低八位放入堆棧 MOV DPTR,#TABLE ;在子程序
56、中重新使用DPTR,表首地址DPTR MOVC A, A+DPTR ;查表 POP DPL;恢復現(xiàn)場,將主程序中DPTR的低八位從堆棧中彈出 POP DPH;恢復現(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八路彩燈控制程序(最后)要求:(對應(yīng)的口為1時點亮)(1)D1D8八個彩燈按規(guī)定順序依次點亮(間隔1秒),最后全亮;(2)按規(guī)定順序依次熄滅(間隔1秒),最后全滅;(3)八個燈同時點亮,保持1秒;(4)八個燈同時熄滅,保持
57、0.5秒; 再將第3、4步重復4遍,最后整個程序再重復N遍。步驟:(1)繪制流程圖(2)編寫程序(3)調(diào)試程序霓虹紅燈設(shè)計2022/9/11八路彩燈控制程序(最后)要求:(對應(yīng)的口為1時點亮)步驟:霓 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ù) 查表 延時循環(huán)次數(shù)到否?結(jié)束NY 亮滅4次循環(huán)N次到否?NY 霓虹紅燈設(shè)計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延時程序 (12Mhz) DELAY: MOV R2, #5 ;1T DEL0: MOV R3, #100 ;1T DEL1:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年生態(tài)農(nóng)業(yè)蔬果種植與加工銷售合同范本3篇
- 二零二五年金融貸款反擔保合同3篇
- 2025年度新型環(huán)保材料買賣合同書格式4篇
- 二零二五版文化產(chǎn)業(yè)并購股權(quán)交易合同范本3篇
- 2025年度鋁合金門窗售后服務(wù)外包合同4篇
- 2025年度鋁合金太陽能支架生產(chǎn)合同4篇
- 二零二五年度變壓器回收與再利用合同范本3篇
- 二零二五年度離婚財產(chǎn)分割與子女全面成長服務(wù)合同3篇
- 二零二五版保潔阿姨派遣與勞務(wù)合作合同3篇
- 二零二五年度生物科技研發(fā)零星工程勞務(wù)分包合同模板4篇
- 專題6.8 一次函數(shù)章末測試卷(拔尖卷)(學生版)八年級數(shù)學上冊舉一反三系列(蘇科版)
- GB/T 4167-2024砝碼
- 老年人視覺障礙護理
- 《腦梗塞的健康教育》課件
- 《請柬及邀請函》課件
- 中小銀行上云趨勢研究分析報告
- 遼寧省普通高中2024-2025學年高一上學期12月聯(lián)合考試語文試題(含答案)
- 青海原子城的課程設(shè)計
- 常州大學《新媒體文案創(chuàng)作與傳播》2023-2024學年第一學期期末試卷
- 麻醉蘇醒期躁動患者護理
- 英語雅思8000詞匯表
評論
0/150
提交評論