版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1第第 4 4 章章 MCS-51MCS-51匯編語言程序設(shè)計匯編語言程序設(shè)計2第4章 MCS-51匯編語言程序設(shè)計 匯編語言是面向匯編語言是面向CPUCPU硬件的程序設(shè)計語言。要熟練硬件的程序設(shè)計語言。要熟練掌握掌握MCS-51MCS-51單片機(jī)應(yīng)用技術(shù),用戶就必須熟練掌握單片機(jī)應(yīng)用技術(shù),用戶就必須熟練掌握MCS-51MCS-51單片機(jī)的匯編語言程序設(shè)計技能,具有很好單片機(jī)的匯編語言程序設(shè)計技能,具有很好的的“軟軟/ /硬件結(jié)合硬件結(jié)合”的設(shè)計基礎(chǔ)。的設(shè)計基礎(chǔ)。 本章介紹單片機(jī)程序設(shè)計的基本知識及如何使用本章介紹單片機(jī)程序設(shè)計的基本知識及如何使用匯編語言來進(jìn)行匯編語言來進(jìn)行MCS-51MCS
2、-51單片機(jī)應(yīng)用程序設(shè)計。單片機(jī)應(yīng)用程序設(shè)計。34.1 4.1 匯編語言程序設(shè)計概述匯編語言程序設(shè)計概述4.1.1 4.1.1 機(jī)器語言、匯編語言和高級語言機(jī)器語言、匯編語言和高級語言 用于程序設(shè)計的語言基本上可分為用于程序設(shè)計的語言基本上可分為3 3種:種: 機(jī)器碼語言、匯編語言機(jī)器碼語言、匯編語言 和和 高級語言。高級語言。 1.1.機(jī)器碼語言機(jī)器碼語言 用二進(jìn)制代碼表示的指令、數(shù)字和符號簡稱為機(jī)器用二進(jìn)制代碼表示的指令、數(shù)字和符號簡稱為機(jī)器碼語言。碼語言。( (簡稱為機(jī)器語言簡稱為機(jī)器語言) )機(jī)器語言不易懂,難記憶,易出錯。機(jī)器語言不易懂,難記憶,易出錯。 例如,人們不易理解例如,人們
3、不易理解7425H7425H究竟代表的是何含義。究竟代表的是何含義。但是機(jī)器碼語言是計算機(jī)但是機(jī)器碼語言是計算機(jī)CPUCPU唯一能夠唯一能夠“理解理解”并并予以執(zhí)行的語言!予以執(zhí)行的語言!42匯編語言匯編語言 用英文助記符表示的指令稱為符號語言或匯編語言用英文助記符表示的指令稱為符號語言或匯編語言. .例如:例如: ORG 0000HORG 0000HST: MOV R0,#20HST: MOV R0,#20H MOV A,#00HMOV A,#00HLOOP:LOOP: MOV RO,AMOV RO,AINC R0INC R0INC AINC ACJNE R0,#60H,LOOP CJNE
4、R0,#60H,LOOP SJMP $SJMP $ ENDEND 將匯編語言程序轉(zhuǎn)換成為二進(jìn)制代碼表示的機(jī)器語將匯編語言程序轉(zhuǎn)換成為二進(jìn)制代碼表示的機(jī)器語言程序稱為匯編程序。言程序稱為匯編程序。 經(jīng)匯編程序經(jīng)匯編程序“匯編(翻譯)匯編(翻譯)”得到的機(jī)器語言程序得到的機(jī)器語言程序 稱為目標(biāo)程序,原來的匯編語言程序稱為源程序。稱為目標(biāo)程序,原來的匯編語言程序稱為源程序。5 匯編語言的特點:匯編語言的特點:面向具體面向具體CPUCPU的語言。程序設(shè)計員須對具體的語言。程序設(shè)計員須對具體CPUCPU的硬的硬件結(jié)構(gòu)與體系有相當(dāng)深入的了解。件結(jié)構(gòu)與體系有相當(dāng)深入的了解。助記符指令和機(jī)器指令一一對應(yīng),用匯
5、編語言編寫助記符指令和機(jī)器指令一一對應(yīng),用匯編語言編寫的程序效率高,占用存儲空間小,運(yùn)行速度快,用的程序效率高,占用存儲空間小,運(yùn)行速度快,用匯編語言能編寫出最優(yōu)化的程序。匯編語言能編寫出最優(yōu)化的程序。 能直接管理和控制硬件設(shè)備(功能部件),它能處能直接管理和控制硬件設(shè)備(功能部件),它能處理中斷,也能直接訪問存儲器及理中斷,也能直接訪問存儲器及I/OI/O接口電路。接口電路。 (1)(1)匯編語言和機(jī)器碼語言都脫離不開具體機(jī)器的硬匯編語言和機(jī)器碼語言都脫離不開具體機(jī)器的硬件,均是面向件,均是面向“機(jī)器機(jī)器”的語言,缺乏通用性。的語言,缺乏通用性。63 3高級語言高級語言例如:常用的如例如:常
6、用的如BASICBASIC、FORTRANFORTRAN或或C C、C+C+、VBVB、VCVC等。等。高級語言是面向用戶和算法的計算機(jī)語言,與計算高級語言是面向用戶和算法的計算機(jī)語言,與計算機(jī)使用的機(jī)使用的CPUCPU硬件無直接的關(guān)系。硬件無直接的關(guān)系。為了使用高級語言,軟件公司開發(fā)了許多方便人們?yōu)榱耸褂酶呒壵Z言,軟件公司開發(fā)了許多方便人們使用高級語言的高級語言編譯使用高級語言的高級語言編譯/ /解釋系統(tǒng)。解釋系統(tǒng)。最常用的就最常用的就是是微軟公司開發(fā)的如微軟公司開發(fā)的如BASICBASIC、FORTRANFORTRAN或或C C、VBVB、VCVC等軟等軟件編譯件編譯/ /解釋系統(tǒng)。解釋系
7、統(tǒng)。這些語言軟件都是商品軟件,應(yīng)用方便,功能強(qiáng)大。這些語言軟件都是商品軟件,應(yīng)用方便,功能強(qiáng)大。 7 4 4、高級語言的優(yōu)、高級語言的優(yōu)/ /缺點:缺點:1 1、高級語言的通用性好,直觀、易懂、易學(xué),可讀性好。、高級語言的通用性好,直觀、易懂、易學(xué),可讀性好。2 2、語句功能強(qiáng),不受具體機(jī)器、語句功能強(qiáng),不受具體機(jī)器(CPU)(CPU)的限制的限制, ,使用了許多數(shù)學(xué)公使用了許多數(shù)學(xué)公 式和數(shù)學(xué)計算上的習(xí)慣用語,最適合應(yīng)用于科學(xué)計算。式和數(shù)學(xué)計算上的習(xí)慣用語,最適合應(yīng)用于科學(xué)計算。3 3、需要配備專門的編譯或解釋軟件才能工作。、需要配備專門的編譯或解釋軟件才能工作。4、運(yùn)行高級語言需要較多的程
8、序空間,執(zhí)行時間也較長。運(yùn)行高級語言需要較多的程序空間,執(zhí)行時間也較長。 所以所以在很多需要直接控制硬件的應(yīng)用場合,在很多需要直接控制硬件的應(yīng)用場合,匯編語言仍是必匯編語言仍是必不可缺的或必不可少的。不可缺的或必不可少的。所以學(xué)習(xí)、使用匯編語言進(jìn)行單片機(jī)所以學(xué)習(xí)、使用匯編語言進(jìn)行單片機(jī)程序設(shè)計,是掌握程序設(shè)計,是掌握MCS-51MCS-51單片機(jī)技術(shù)的基本功之一單片機(jī)技術(shù)的基本功之一。 人們也可以使用人們也可以使用C51C51、PL/MPL/M等語言來進(jìn)行等語言來進(jìn)行MCS-51MCS-51單片機(jī)的程序單片機(jī)的程序設(shè)計或采用設(shè)計或采用C51C51語言與匯編語言進(jìn)行混合語言編程,但前提是必語言與
9、匯編語言進(jìn)行混合語言編程,但前提是必須具有相應(yīng)的須具有相應(yīng)的C51C51、PL/MPL/M等語言的編譯系統(tǒng)。等語言的編譯系統(tǒng)。84.2 4.2 匯編語言語句的種類和格式匯編語言語句的種類和格式 在匯編語言的語句中,有兩種基本語句在匯編語言的語句中,有兩種基本語句類型:類型: 指令語句和偽指令語句指令語句和偽指令語句1 1)指令語句:)指令語句:已在第已在第3 3章介紹,如:章介紹,如:MOV A,#25HMOV A,#25H等,等, 每一條指令語句通過匯編都會產(chǎn)生至少一個字節(jié)的二進(jìn)制代每一條指令語句通過匯編都會產(chǎn)生至少一個字節(jié)的二進(jìn)制代碼碼機(jī)器碼。機(jī)器碼。 注意:指令語句是由注意:指令語句是由
10、CPUCPU、MCUMCU設(shè)計師規(guī)定的。設(shè)計師規(guī)定的。(2 2)偽指令語句)偽指令語句 偽指令語句是為匯編服務(wù)的,目的是方便、準(zhǔn)確的產(chǎn)生和運(yùn)行偽指令語句是為匯編服務(wù)的,目的是方便、準(zhǔn)確的產(chǎn)生和運(yùn)行指令代碼指令代碼。偽指令語句并無機(jī)器碼與之對應(yīng)。偽指令語句并無機(jī)器碼與之對應(yīng)。 注意:偽指令語句是由設(shè)計匯編程序的軟件公司自己規(guī)定的,注意:偽指令語句是由設(shè)計匯編程序的軟件公司自己規(guī)定的,不同的匯編程序所支持的偽指令語句可能會略有不同。不同的匯編程序所支持的偽指令語句可能會略有不同。9 MCS-51MCS-51單片機(jī)的匯編語言的語句,其基本單片機(jī)的匯編語言的語句,其基本格式格式如下:如下: ( (四分
11、段格式四分段格式) ) 標(biāo)號字段標(biāo)號字段 操作碼字段操作碼字段 操作數(shù)字段操作數(shù)字段 注釋字段注釋字段例:以例:以下是一段按四分段格式書寫的匯編語言程序下是一段按四分段格式書寫的匯編語言程序標(biāo)號字段標(biāo)號字段 操作碼字段操作碼字段 操作數(shù)字段操作數(shù)字段 注釋字段注釋字段 STARTSTART: MOV AMOV A,#00H ;A #00H ;A 00H00H MOV R1 MOV R1,#10H ;R1#10H ;R1 10H10H MOV R2 MOV R2,#03H ;R2#03H ;R2 03H03H LOOP LOOP: ADD AADD A,R2 ;A R2 ;A A+R2A+R2
12、DJNZ R1 DJNZ R1,LOOP ;(R1-1)LOOP ;(R1-1)00則循環(huán)則循環(huán) REPREP: SJMP REPSJMP REP10 匯編語言語句書寫規(guī)則:匯編語言語句書寫規(guī)則:1 1、標(biāo)號:、標(biāo)號: 標(biāo)號依需要而設(shè)置,代表標(biāo)號依需要而設(shè)置,代表語句所在存儲地址的標(biāo)志符號語句所在存儲地址的標(biāo)志符號( (符號符號地址地址) )。 標(biāo)號的長度標(biāo)號的長度 8 8個字符,后隨一個冒號個字符,后隨一個冒號“:” 。一般放在被轉(zhuǎn)移。一般放在被轉(zhuǎn)移或分支的入口,作指令的符號地址?;蚍种У娜肟冢髦噶畹姆柕刂?。例如:例如: LOOPLOOP: MOV R1,AMOV R1,A注意:注意:1
13、 1)標(biāo)號后邊必須跟以冒號)標(biāo)號后邊必須跟以冒號“:” 2 2)由)由1 18 8個個ASCIIASCII字符組成;字符組成;3 3)同一標(biāo)號在一個程序中只能定義一次;)同一標(biāo)號在一個程序中只能定義一次;4 4)不能使用匯編語言已經(jīng)定義的符號作為標(biāo)號。)不能使用匯編語言已經(jīng)定義的符號作為標(biāo)號。11 匯編語言語句書寫規(guī)則:匯編語言語句書寫規(guī)則:2 2、語句:包含操作碼字段和操作數(shù)字段!、語句:包含操作碼字段和操作數(shù)字段! 注意:語句書寫時要合乎如下規(guī)則:注意:語句書寫時要合乎如下規(guī)則: 1)1)操作碼字段和操作數(shù)字段操作碼字段和操作數(shù)字段之間至少空一格;之間至少空一格; 2)2)操作數(shù)字段操作數(shù)
14、字段( (Oprand)Oprand)之間以逗號之間以逗號“, ,”分隔;分隔; 3)3)書寫要合法。如:書寫要合法。如:INC A ; INC A ; MOV A,#25H ; MOV A,#25H ; CJNE A,25H,LOOP ; CJNE A,25H,LOOP ; CJNE A,#34H,LOOPCJNE A,#34H,LOOP12 操作數(shù)的表示形式操作數(shù)的表示形式1 1)可使用十六進(jìn)制、二進(jìn)制或十進(jìn)制形式的操作數(shù)表示)可使用十六進(jìn)制、二進(jìn)制或十進(jìn)制形式的操作數(shù)表示 一般都采用十六進(jìn)制數(shù)據(jù)形式來表示,某些特殊場合一般都采用十六進(jìn)制數(shù)據(jù)形式來表示,某些特殊場合才采才采 用二進(jìn)制或十進(jìn)
15、制的表示形式用二進(jìn)制或十進(jìn)制的表示形式 。 對于十六進(jìn)制數(shù),加后綴對于十六進(jìn)制數(shù),加后綴“H H” ; ; 對于二進(jìn)制,加后綴對于二進(jìn)制,加后綴“B B” ; ; 對于十進(jìn)制,加后綴對于十進(jìn)制,加后綴“D D”,也可不用后綴。,也可不用后綴。 若十六進(jìn)制的操作數(shù)以字符若十六進(jìn)制的操作數(shù)以字符A AF F中的某個開頭時,則中的某個開頭時,則需在它前面加一個需在它前面加一個 “0 0”,以便在匯編時把它和字符,以便在匯編時把它和字符A AF F區(qū)別開來。區(qū)別開來。132 2)工作寄存器和特殊功能寄存器的表示)工作寄存器和特殊功能寄存器的表示 可用其的代號來表示,也可用其地址來表示??捎闷涞拇杹肀?/p>
16、示,也可用其地址來表示。 例如:累加器用例如:累加器用A A(或(或AccAcc)表示)表示, ,也可用也可用0E0H0E0H來表示。來表示。 (0E0H(0E0H為累加器為累加器A A的地址的地址) )。3 3)符號)符號$ $的使用的使用 用于表示該轉(zhuǎn)移指令操作碼所在的地址。用于表示該轉(zhuǎn)移指令操作碼所在的地址。 例如:例如: 指令:指令: JNB F0JNB F0,$ $ 與如下指令是等價的:與如下指令是等價的:REPREP:JNB F0JNB F0,REPREP 再如:再如: REPREP:SJMP REPSJMP REP 可寫為:可寫為: SJMP $SJMP $144 4注釋字段注釋
17、字段: : 以分號以分號(;) (;) 起頭起頭, ,為方便人們閱讀指令為方便人們閱讀指令( (語句語句) )而設(shè)而設(shè), ,可不要可不要, ,匯編器不理會注釋后的字符。匯編器不理會注釋后的字符。 操作碼字段為必選項,其余各段為任選項。操作碼字段為必選項,其余各段為任選項。 必須以分號必須以分號“;”開頭開頭. .用用注釋字段可對該注釋字段可對該行語句行語句進(jìn)行說明,幫助讀者理解程序的功能或特性。進(jìn)行說明,幫助讀者理解程序的功能或特性。 程序在進(jìn)行匯編時,注釋字段不會產(chǎn)生機(jī)器代碼。程序在進(jìn)行匯編時,注釋字段不會產(chǎn)生機(jī)器代碼。154.3 4.3 偽指令偽指令 在在MCS-51MCS-51單片機(jī)匯編
18、語言源程序中,應(yīng)有向匯編程單片機(jī)匯編語言源程序中,應(yīng)有向匯編程序發(fā)出的指示信息,告訴它如何完成匯編工作的命令序發(fā)出的指示信息,告訴它如何完成匯編工作的命令或語句。這種命令或語句就是偽指令,也稱為匯編程或語句。這種命令或語句就是偽指令,也稱為匯編程序的控制命令。序的控制命令。 只有在匯編前的源程序中才有偽指令。經(jīng)過匯編得只有在匯編前的源程序中才有偽指令。經(jīng)過匯編得到目標(biāo)程序(機(jī)器代碼)后,偽指令已無存在的必要,到目標(biāo)程序(機(jī)器代碼)后,偽指令已無存在的必要,所以所以“偽指令偽指令”是在程序匯編時起作用是在程序匯編時起作用。注意:注意:偽指令沒有與之相應(yīng)的偽指令沒有與之相應(yīng)的CPUCPU操作代碼!
19、操作代碼! MCS-51MCS-51單片機(jī)匯編語言中常用的偽指令有單片機(jī)匯編語言中常用的偽指令有8 8條:條: ORG, END, DB, DW, DS, EQU, DATA, BITORG, END, DB, DW, DS, EQU, DATA, BIT 161.1.起點指令起點指令:ORG(ORiGin):ORG(ORiGin),確定程序起始存放地址的命令,確定程序起始存放地址的命令放在匯編語言源程序的開始放在匯編語言源程序的開始, ,通常都用一條通常都用一條ORGORG偽指令來確偽指令來確 定程序的起始存放地址。定程序的起始存放地址。 指令格式:指令格式: ORG nnORG nn或標(biāo)號
20、或標(biāo)號這里,這里,n n 代表代表1 1字節(jié)數(shù),字節(jié)數(shù),nnnn可以是可以是4 4位位1616進(jìn)制數(shù)或進(jìn)制數(shù)或1616位二進(jìn)制位二進(jìn)制數(shù),也可是十進(jìn)制的數(shù)。數(shù),也可是十進(jìn)制的數(shù)。 標(biāo)號則是用符號表示的地址。標(biāo)號則是用符號表示的地址。如不用如不用ORGORG偽指令,則匯編程序偽指令,則匯編程序( (即把源程序翻譯成機(jī)器碼即把源程序翻譯成機(jī)器碼的工具軟件的工具軟件) )將把程序存放地址自動從將把程序存放地址自動從0000H0000H開始。開始。17在一個源程序中可多次使用在一個源程序中可多次使用ORGORG指令,但設(shè)定的指令,但設(shè)定的地址地址必須由小到大排列,地址也不能交叉、重疊。必須由小到大排列
21、,地址也不能交叉、重疊。 例如:例如: ORG 2000HORG 2000H ORG 2500H ORG 2500H ORG 3000HORG 3000H 182.2.匯編結(jié)束指令匯編結(jié)束指令 ENDEND 指令格式:指令格式: END END 標(biāo)號標(biāo)號 END END是是匯編語言源程序的結(jié)束標(biāo)志,用于終止源程匯編語言源程序的結(jié)束標(biāo)志,用于終止源程 序的匯編工作。序的匯編工作。 在整個源程序中只能有一條在整個源程序中只能有一條ENDEND命令,位于程序的命令,位于程序的 最后。最后。ENDEND指令中的標(biāo)號是可選項,可以不要。指令中的標(biāo)號是可選項,可以不要。例如:可將例如:可將 END MAI
22、N END MAIN 直接可寫為:直接可寫為: ENDEND193 3定義字節(jié)指令:定義字節(jié)指令: 助記符為:助記符為: DBDB或或DEFBDEFB 指令格式:指令格式: 標(biāo)號標(biāo)號: DB : DB DB DB(Define ByteDefine Byte)指令是一個用于定義字節(jié)的命令。)指令是一個用于定義字節(jié)的命令。 項項: : 指一字節(jié)數(shù)據(jù)指一字節(jié)數(shù)據(jù) 項表項表: :指多字節(jié)數(shù)據(jù)指多字節(jié)數(shù)據(jù), , 以逗號分隔。數(shù)據(jù)可以是以逗號分隔。數(shù)據(jù)可以是1616進(jìn)制或二進(jìn)進(jìn)制或二進(jìn)制或十進(jìn)制數(shù),也可以是用引號括起來的制或十進(jìn)制數(shù),也可以是用引號括起來的ASCIIASCII字符。字符。指令功能:在程序
23、存儲器指令功能:在程序存儲器的連續(xù)單元中的連續(xù)單元中設(shè)置數(shù)據(jù)設(shè)置數(shù)據(jù), ,產(chǎn)生目標(biāo)碼產(chǎn)生目標(biāo)碼例例: SEG: DB 53H,23H,78,: SEG: DB 53H,23H,78,“f f”, , “A A”20例:例: ORG 2000HORG 2000H DB 30H,40H,24, DB 30H,40H,24,“C C”, ,“B B”匯編后匯編后, ,從程序存儲器的從程序存儲器的2000H2000H單元開始,有:單元開始,有:(2000H2000H)=30H=30H(2001H2001H)=40H=40H(2002H2002H)=18H=18H(1010進(jìn)制數(shù)進(jìn)制數(shù)2424)(200
24、3H2003H)=43H=43H(字符(字符“C C”的的ASCIIASCII碼)碼)(2004H2004H)=42H=42H(字符(字符“B B”的的ASCIIASCII碼)碼)214 4定義字指令:定義字指令: 助記符為:助記符為: DWDW或或DEFWDEFW 指令格式:指令格式: 標(biāo)號標(biāo)號: DW : DW 項項: 16b的數(shù)據(jù)的數(shù)據(jù) 項表項表:多個多個16b的數(shù)據(jù)的數(shù)據(jù),以逗號分隔。以逗號分隔。 指令指令功能:在程序存儲器中設(shè)置功能:在程序存儲器中設(shè)置16位的數(shù)據(jù)位的數(shù)據(jù),產(chǎn)生目標(biāo)碼。產(chǎn)生目標(biāo)碼。 DWDW(Define WordDefine Word)指令是一個用于定義數(shù)據(jù)字()指
25、令是一個用于定義數(shù)據(jù)字(WordWord)的命)的命令。令。DWDW會會從指定的地址開始,在程序存儲器的連續(xù)單元中定義從指定的地址開始,在程序存儲器的連續(xù)單元中定義1616位的數(shù)據(jù)字。位的數(shù)據(jù)字。例如:例如: ABC: DW 1234H, 0008H 22例:例:ORG 2000HORG 2000H DW 1246H DW 1246H,7BH7BH,1010匯編后:匯編后:(2000H2000H)=12H=12H;第;第1 1個字個字(2001H2001H)=46H =46H (2002H2002H)=00H=00H;第;第2 2個字個字(2003H2003H)=7BH=7BH(2004H20
26、04H)=00H=00H;第;第3 3個字(個字(2004H2004H)=0AH=0AH(2005H2005H)=0AH=0AH可見:這里的每一個可見:這里的每一個“字字” ,都被看成,都被看成1616位的二進(jìn)制數(shù),即使該位的二進(jìn)制數(shù),即使該數(shù)是寫成數(shù)是寫成8 8位的二進(jìn)制數(shù)或十進(jìn)制的數(shù)。位的二進(jìn)制數(shù)或十進(jìn)制的數(shù)。注意:注意:高位字節(jié)的數(shù)據(jù)存放在前!高位字節(jié)的數(shù)據(jù)存放在前!235. 5. 預(yù)留存貯區(qū)指令:預(yù)留存貯區(qū)指令: 助記符為:助記符為: DSDS或或DEFSDEFS指令格式:指令格式: 標(biāo)號標(biāo)號: DS : DS 說明:說明:1 1、表達(dá)式?jīng)Q定預(yù)留存儲單元的個數(shù)。、表達(dá)式?jīng)Q定預(yù)留存儲單元
27、的個數(shù)。2 2、指令功能:為程序保留若干由表達(dá)式確定的空單元??諉卧⒅噶罟δ埽簽槌绦虮A羧舾捎杀磉_(dá)式確定的空單元。空單元的位置緊隨上一句的程序。的位置緊隨上一句的程序。 也可用也可用 ORG ORG 指令指定預(yù)留存儲單元的起始地址。指令指定預(yù)留存儲單元的起始地址。例例: : TEMP: DS 10HTEMP: DS 10H 該指令在程序存儲空間中從地址該指令在程序存儲空間中從地址TEMPTEMP開始保留開始保留1616個字節(jié)的空個字節(jié)的空單元。單元。例例: : ORG 2000HORG 2000H DS 11DS 11 該指令在程序存儲空間中從該指令在程序存儲空間中從2000H2000H開始
28、保留開始保留1111個字節(jié)的空單元個字節(jié)的空單元. .246 6符號賦值指令:符號賦值指令: 助記符為:助記符為: EQUEQU(EqualEqual)指令格式:指令格式: 標(biāo)號標(biāo)號 EQU nnEQU nn或表達(dá)式或表達(dá)式 注注 意:意:1 1、標(biāo)號須先賦值后使用,故該指令通常放在源程序的開頭;、標(biāo)號須先賦值后使用,故該指令通常放在源程序的開頭; 2 2、標(biāo)號賦值后、標(biāo)號賦值后, ,標(biāo)號值將不能改變。標(biāo)號值將不能改變。3 3、用用EQUEQU指令指令給標(biāo)號賦值后,其標(biāo)號值在整個程序中都有效。給標(biāo)號賦值后,其標(biāo)號值在整個程序中都有效。例例: : BLK EQU 1000H BLK EQU 10
29、00H 這里,將符號這里,將符號BLKBLK定義為數(shù)據(jù)(或地址)定義為數(shù)據(jù)(或地址)1000H1000H。例例: : AA EQU KKKAA EQU KKK ; ;將符號將符號AAAA定義為字符定義為字符KKKKKK。例:例:TEST EQU 2000HTEST EQU 2000H 表示標(biāo)號表示標(biāo)號TEST=2000HTEST=2000H,在匯編時凡是遇到標(biāo)號,在匯編時凡是遇到標(biāo)號TESTTEST時,均以時,均以2000H2000H來代替。來代替。 257 7數(shù)據(jù)地址賦值指令:助記符為:數(shù)據(jù)地址賦值指令:助記符為:DATADATA指令格式:指令格式: 標(biāo)號標(biāo)號 DATA nnDATA nn或
30、表達(dá)式或表達(dá)式 注注 意:意:1 1、DATADATA指令的功能與指令的功能與EQU EQU 指令類似指令類似 2 2、標(biāo)號可以先使用后定義,故它比、標(biāo)號可以先使用后定義,故它比EQU EQU 指令靈活,所以指令靈活,所以DATADATA指指令可放令可放在整個程序的任何位置上。在整個程序的任何位置上。例例: : TAB DATA 1000HTAB DATA 1000H 這里這里: :將符號將符號TAB TAB 定義為數(shù)據(jù)(或地址值)定義為數(shù)據(jù)(或地址值)1000H1000H。在匯編時,在匯編時,凡是遇到標(biāo)號凡是遇到標(biāo)號TABTAB時,均以時,均以1000H1000H來代替。來代替。 DATAD
31、ATA指令一般用來定義程序中所用到的指令一般用來定義程序中所用到的8 8位或位或1616位數(shù)據(jù)或地址。位數(shù)據(jù)或地址。但有些匯編程序只允許但有些匯編程序只允許DATADATA指令定義指令定義8 8位的數(shù)據(jù)或地址。位的數(shù)據(jù)或地址。268.8.位地址定義指令:助記符為:位地址定義指令:助記符為:BITBIT 指令格式:指令格式: 字符字符 BIT BIT 說說 明:明:1 1、BITBIT指令將字符定義為一個位地址值。指令將字符定義為一個位地址值。2 2、某些匯編程序不支持該指令。、某些匯編程序不支持該指令。例例: KKK BIT 50H: KKK BIT 50H 該指令將該指令將KKKKKK定義為
32、位地址定義為位地址50H50H。 于是我們就可用于是我們就可用 CLR KKK CLR KKK 來代表來代表 CLR 50H CLR 50H 指令指令274.4 匯編語言程序設(shè)計 4.4.1 4.4.1匯編語言程序設(shè)計步驟匯編語言程序設(shè)計步驟1 1、確定設(shè)計任務(wù),明確功能細(xì)節(jié);、確定設(shè)計任務(wù),明確功能細(xì)節(jié);2 2、建立數(shù)學(xué)模型;、建立數(shù)學(xué)模型; 3 3、選擇并確定算法;、選擇并確定算法;4 4、設(shè)計程序框圖(繪制流程圖);、設(shè)計程序框圖(繪制流程圖);5 5、分配內(nèi)存工作區(qū)及有關(guān)端口地址分配內(nèi)存工作區(qū)及有關(guān)端口地址6 6、填寫程序代碼;、填寫程序代碼;7 7、上機(jī)調(diào)試、上機(jī)調(diào)試/ /實驗實驗.
33、 .284.4 4.4 匯編語言程序設(shè)計匯編語言程序設(shè)計 如所設(shè)計的程序未達(dá)到預(yù)期的目標(biāo)或功能要求,如所設(shè)計的程序未達(dá)到預(yù)期的目標(biāo)或功能要求,則應(yīng)返回設(shè)計步驟(則應(yīng)返回設(shè)計步驟(1 1)或步驟()或步驟(4 4)重新進(jìn)行設(shè))重新進(jìn)行設(shè)計。計。 設(shè)計者應(yīng)養(yǎng)成在程序的適當(dāng)位置上加上注釋的好設(shè)計者應(yīng)養(yǎng)成在程序的適當(dāng)位置上加上注釋的好習(xí)慣,以便程序易被他人閱讀和理解。習(xí)慣,以便程序易被他人閱讀和理解。 編寫完畢的程序,必須編寫完畢的程序,必須“匯編匯編”成機(jī)器代碼(使成機(jī)器代碼(使用專門的匯編程序或稱為匯編器),才能調(diào)試和用專門的匯編程序或稱為匯編器),才能調(diào)試和運(yùn)行,調(diào)試與硬件有關(guān)程序還要借助于仿真
34、開發(fā)運(yùn)行,調(diào)試與硬件有關(guān)程序還要借助于仿真開發(fā)工具并與硬件連接。工具并與硬件連接。294.4.2 繪制流程圖時常用到的繪制流程圖時常用到的4 4個基本框圖個基本框圖304.4.3 4.4.3 匯編語言源程序的匯編匯編語言源程序的匯編 匯編語言源程序匯編語言源程序 “翻譯翻譯”成機(jī)器代碼成機(jī)器代碼( (指令代碼指令代碼) )的的過程稱為過程稱為“匯編匯編”。匯編可分為手工匯編和機(jī)器匯編。匯編可分為手工匯編和機(jī)器匯編兩類兩類: :1 1、手工匯編、手工匯編 即人工查表來翻譯指令。即人工查表來翻譯指令。 若遇到的相對轉(zhuǎn)移指令的偏移量的計算,要根據(jù)轉(zhuǎn)若遇到的相對轉(zhuǎn)移指令的偏移量的計算,要根據(jù)轉(zhuǎn)移的目標(biāo)
35、地址手工計算偏移量,不但麻煩且容易出錯。移的目標(biāo)地址手工計算偏移量,不但麻煩且容易出錯。特點:簡單但效率低、易出錯。特點:簡單但效率低、易出錯。 偶爾一用。偶爾一用。 312 2、機(jī)器匯編、機(jī)器匯編只需寫出源程序,由只需寫出源程序,由PCPC機(jī)完成代碼翻譯的任務(wù)。效率高。機(jī)完成代碼翻譯的任務(wù)。效率高。 但要求有但要求有/ /使用使用MCSMCS5151單片機(jī)的匯編程序。單片機(jī)的匯編程序。通過通過MCS51MCS51匯編程序,把我們書寫的匯編語言源程序轉(zhuǎn)換為匯編程序,把我們書寫的匯編語言源程序轉(zhuǎn)換為二進(jìn)制碼文件(即機(jī)器碼文件)。這個過程我們稱為二進(jìn)制碼文件(即機(jī)器碼文件)。這個過程我們稱為“匯編
36、匯編”。將機(jī)器碼文件固化到單片機(jī)的程序存儲器中后,單片機(jī)應(yīng)用將機(jī)器碼文件固化到單片機(jī)的程序存儲器中后,單片機(jī)應(yīng)用系統(tǒng)就能按照程序設(shè)計的要求(過程)來工作了。系統(tǒng)就能按照程序設(shè)計的要求(過程)來工作了。完成把匯編語言源程序翻譯成機(jī)器代碼的工作,需要預(yù)先用完成把匯編語言源程序翻譯成機(jī)器代碼的工作,需要預(yù)先用文本編輯軟件進(jìn)行源程序的書寫與編輯。編輯完成后,生成一文本編輯軟件進(jìn)行源程序的書寫與編輯。編輯完成后,生成一個個ASCIIASCII碼文本文件,擴(kuò)展名一般用碼文本文件,擴(kuò)展名一般用“.ASM.ASM”。交叉匯編交叉匯編: :匯編后的機(jī)器代碼是在另一種計算機(jī)(這里是單片機(jī))上運(yùn)行匯編后的機(jī)器代碼是
37、在另一種計算機(jī)(這里是單片機(jī))上運(yùn)行 323 3、交叉匯編的三個步驟;、交叉匯編的三個步驟;1 1)在微計算機(jī)上,運(yùn)行編輯程序進(jìn)行源程序的輸入和編輯;)在微計算機(jī)上,運(yùn)行編輯程序進(jìn)行源程序的輸入和編輯; 2 2)對源程序進(jìn)行交叉匯編得到機(jī)器代碼;)對源程序進(jìn)行交叉匯編得到機(jī)器代碼;3 3)通過微計算機(jī)的串行口(或并行口)把機(jī)器碼傳送到用戶樣通過微計算機(jī)的串行口(或并行口)把機(jī)器碼傳送到用戶樣機(jī)(或在線仿真器)中進(jìn)行程序的調(diào)試和運(yùn)行。機(jī)(或在線仿真器)中進(jìn)行程序的調(diào)試和運(yùn)行。第第1 1步,只需在微計算機(jī)上使用通用的編輯軟件即可完成。步,只需在微計算機(jī)上使用通用的編輯軟件即可完成。第第2 2步,交
38、叉匯編要用到的匯編程序,可在購買單片機(jī)的仿真開步,交叉匯編要用到的匯編程序,可在購買單片機(jī)的仿真開 發(fā)工具時由廠商提供,或自己從互連網(wǎng)上下載。發(fā)工具時由廠商提供,或自己從互連網(wǎng)上下載。第第3 3步,要借步,要借助于單片機(jī)仿真開發(fā)工具(硬件型或軟件型皆可)助于單片機(jī)仿真開發(fā)工具(硬件型或軟件型皆可) 進(jìn)行。進(jìn)行。334 4、反匯編、反匯編 反匯編可完成從機(jī)器碼到文本型匯編指令的轉(zhuǎn)換工作。反匯編可完成從機(jī)器碼到文本型匯編指令的轉(zhuǎn)換工作。反匯編一般被用來反匯編一般被用來分析現(xiàn)成單片機(jī)系統(tǒng)的機(jī)器碼程序,將二進(jìn)分析現(xiàn)成單片機(jī)系統(tǒng)的機(jī)器碼程序,將二進(jìn)制的機(jī)器代碼翻譯成人們易于看懂的匯編語言源程序制的機(jī)器代
39、碼翻譯成人們易于看懂的匯編語言源程序。5 5、機(jī)器匯編過程、機(jī)器匯編過程 匯編程序需要對源程序進(jìn)行二次掃描,才能最后確定得到源匯編程序需要對源程序進(jìn)行二次掃描,才能最后確定得到源程序的機(jī)器碼及其存放地址。程序的機(jī)器碼及其存放地址。1)1)第一次掃描:檢查第一次掃描:檢查源程序各條指令的源程序各條指令的語法、分析語句,獲得操語法、分析語句,獲得操作碼,確定標(biāo)號的真實地址及指令(程序)的長度作碼,確定標(biāo)號的真實地址及指令(程序)的長度; ;( (因為每條指令的操作碼及長度都是固定的,所以從因為每條指令的操作碼及長度都是固定的,所以從ORGORG指令開始,指令開始,每條指令的真實地址就可以確定下來,
40、故標(biāo)號的真實地址就可知每條指令的真實地址就可以確定下來,故標(biāo)號的真實地址就可知了。了。) )2)2)第二次掃描:對于在第一次掃描中無法立刻得知的相對轉(zhuǎn)移指第二次掃描:對于在第一次掃描中無法立刻得知的相對轉(zhuǎn)移指令中的偏移量,通過對標(biāo)號真實地址的計算,就可得出偏移量的令中的偏移量,通過對標(biāo)號真實地址的計算,就可得出偏移量的二進(jìn)制補(bǔ)碼值,最后得出二進(jìn)制補(bǔ)碼值,最后得出源程序的源程序的全部機(jī)器碼及程序列表文件。全部機(jī)器碼及程序列表文件。344.5 4.5 匯編語言程序設(shè)計的基本結(jié)構(gòu)匯編語言程序設(shè)計的基本結(jié)構(gòu) 匯編語言程序的基本結(jié)構(gòu)形式:匯編語言程序的基本結(jié)構(gòu)形式: 包括:順序結(jié)構(gòu)(也叫做直線結(jié)構(gòu))、分
41、支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),包括:順序結(jié)構(gòu)(也叫做直線結(jié)構(gòu))、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),再加上廣泛使用的子程序和中斷服務(wù)子程序。再加上廣泛使用的子程序和中斷服務(wù)子程序。4.5.1 4.5.1 順序結(jié)構(gòu):順序結(jié)構(gòu):按程序的地址大小依次執(zhí)行。按程序的地址大小依次執(zhí)行。 程序框圖如下程序框圖如下:35順序結(jié)構(gòu)順序結(jié)構(gòu)程序舉例程序舉例ORG 0200HORG 0200HMOV 20H,#65H MOV 20H,#65H ;(20H)= 65H;(20H)= 65HMOV 21H,#24H MOV 21H,#24H ;(21H)= 24H;(21H)= 24HCLR CCLR CMOV A,#9AHMOV A,#9AH
42、;A=9AHA=9AHSUBB A,21HSUBB A,21H; A-(21H)-CY=9AH-24H-0=76H; A-(21H)-CY=9AH-24H-0=76HADD A,20HADD A,20H; A+65H=DBH; A+65H=DBHDA ADA A; A=DBH+66H=41H, C=1, AC=1; A=DBH+66H=41H, C=1, AC=1MOV 25H,AMOV 25H,A;(25H)=41H;(25H)=41HSJMP $ ;SJMP $ ;動態(tài)停機(jī)動態(tài)停機(jī) END END36 4.5.2 4.5.2 循環(huán)結(jié)構(gòu) 即重復(fù)執(zhí)行某些指令(或語句)的程序。即重復(fù)執(zhí)行某些指令
43、(或語句)的程序。 分無條件循環(huán)和有條件循環(huán)分無條件循環(huán)和有條件循環(huán)2 2大類。大類。 無條件循環(huán):無條件循環(huán): 使用使用LJMPLJMP、 SJMPSJMP、 AJMPAJMP指令,使程序不停的指令,使程序不停的循環(huán)運(yùn)行。有可能導(dǎo)致死循環(huán)狀況的出現(xiàn)。循環(huán)運(yùn)行。有可能導(dǎo)致死循環(huán)狀況的出現(xiàn)。 有條件循環(huán):有條件循環(huán):程序運(yùn)行過程中,若滿足一定的條件,則程序程序運(yùn)行過程中,若滿足一定的條件,則程序?qū)⒀h(huán)運(yùn)行。一般在每次循環(huán)運(yùn)行中程序會修改運(yùn)行的條件,將循環(huán)運(yùn)行。一般在每次循環(huán)運(yùn)行中程序會修改運(yùn)行的條件,使得程序有可能(機(jī)會)退出循環(huán)狀態(tài)。使得程序有可能(機(jī)會)退出循環(huán)狀態(tài)。 有條件循環(huán)程序一般包含
44、:有條件循環(huán)程序一般包含: 循環(huán)初值循環(huán)初值+ +循環(huán)體循環(huán)體+ +循環(huán)條件控制及退出判斷循環(huán)條件控制及退出判斷 這這4 4大部分。大部分。 程序框圖如下:程序框圖如下:37循環(huán)程序框圖如下循環(huán)程序框圖如下 38循環(huán)程序舉例循環(huán)程序舉例功能:功能:將片內(nèi)將片內(nèi)RAM 20H5FH單元按單元按00H3FH數(shù)值遞增規(guī)律予以置數(shù)數(shù)值遞增規(guī)律予以置數(shù) ORG 2000HORG 2000HSTART:MOV R0,#20HSTART:MOV R0,#20H; ;數(shù)據(jù)存儲的起始地址數(shù)據(jù)存儲的起始地址MOV R1,#40HMOV R1,#40H; ;存儲數(shù)據(jù)的個數(shù)存儲數(shù)據(jù)的個數(shù)MOV A,#00HMOV A
45、,#00H; ;被存數(shù)據(jù)的第一個數(shù)值被存數(shù)據(jù)的第一個數(shù)值LOOP:LOOP: MOV RO,AMOV RO,A; ;存入數(shù)據(jù)存入數(shù)據(jù)INC R0INC R0; ;地址量加地址量加1 1INC AINC A; ;被存數(shù)據(jù)加被存數(shù)據(jù)加1 1DJNZ R1,LOOPDJNZ R1,LOOP; ;未存完未存完40H40H個數(shù)據(jù)則循環(huán)個數(shù)據(jù)則循環(huán)REP:REP:SJMP REPSJMP REP; ;存完存完40H40H個數(shù)據(jù)后動態(tài)停機(jī)個數(shù)據(jù)后動態(tài)停機(jī)ENDEND394.5.3 4.5.3 分支結(jié)構(gòu)分支結(jié)構(gòu) 程序依不同的條件轉(zhuǎn)而執(zhí)行不同的程序塊。分支型程序與子程程序依不同的條件轉(zhuǎn)而執(zhí)行不同的程序塊。分支型
46、程序與子程序的不同之處的是無須返回分支點。序的不同之處的是無須返回分支點。 分支程序中一定含有轉(zhuǎn)移指令。通常是根據(jù)不同的條件,轉(zhuǎn)分支程序中一定含有轉(zhuǎn)移指令。通常是根據(jù)不同的條件,轉(zhuǎn)去執(zhí)行相對應(yīng)的分支程序去執(zhí)行相對應(yīng)的分支程序( (即:條件分支即:條件分支) )。條件條件分支結(jié)構(gòu):分支結(jié)構(gòu):對多個條件進(jìn)行判斷,依每個條件是否得到滿對多個條件進(jìn)行判斷,依每個條件是否得到滿足而獲得不同的結(jié)果。足而獲得不同的結(jié)果。40分支程序結(jié)構(gòu)分支程序結(jié)構(gòu) 右邊是一個多分支結(jié)構(gòu)的右邊是一個多分支結(jié)構(gòu)的程序框圖程序框圖例如例如: 某個設(shè)計要根據(jù)累某個設(shè)計要根據(jù)累加器加器A中中(D0D)位各位位各位是否為是否為1來決定
47、執(zhí)行對應(yīng)來決定執(zhí)行對應(yīng)的分支程序,它就屬于是的分支程序,它就屬于是一多分支結(jié)構(gòu)的分支程序。一多分支結(jié)構(gòu)的分支程序。即即:根據(jù)根據(jù)A中中(D0D)位位的狀態(tài)來確定分支的方向。的狀態(tài)來確定分支的方向。41例例: 分支程序設(shè)計分支程序設(shè)計 分支程序:分支程序:滿足一定的條件,則轉(zhuǎn)去執(zhí)行不同的程序塊(分枝程序)滿足一定的條件,則轉(zhuǎn)去執(zhí)行不同的程序塊(分枝程序)例例 如:如:根據(jù)累加器根據(jù)累加器A中各位中各位(D0D)是否為是否為1來決定執(zhí)行對應(yīng)來決定執(zhí)行對應(yīng) 的分支程序。的分支程序。若若 D0=1 D0=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2000H2000H的程序塊;的程序塊;若若 D1=1
48、 D1=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2100H2100H的程序塊;的程序塊;若若 D2=1 D2=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2200H2200H的程序塊;的程序塊;若若 D3=1 D3=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2300H2300H的程序塊;的程序塊;若若 D4=1 D4=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2400H2400H的程序塊;的程序塊;若若 D5=1 D5=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2500H2500H的程序塊;的程序塊;若若 D6=1 D6=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2600H2600
49、H的程序塊;的程序塊;若若 D7=1 D7=1 則轉(zhuǎn)去執(zhí)行起始地址為則轉(zhuǎn)去執(zhí)行起始地址為2700H2700H的程序塊;的程序塊; (設(shè)每個程序塊的長度不超過(設(shè)每個程序塊的長度不超過100H100H) 關(guān)鍵是進(jìn)行條件判斷,符合某個條件則轉(zhuǎn)移去執(zhí)行某個分枝程關(guān)鍵是進(jìn)行條件判斷,符合某個條件則轉(zhuǎn)移去執(zhí)行某個分枝程序。故需要設(shè)置一個分支程序入口地址表。序。故需要設(shè)置一個分支程序入口地址表。42 ORG 1000HORG 1000H AR0 EQU 2000H AR0 EQU 2000H AR1 EQU 2100H AR1 EQU 2100H AR2 EQU 2200H AR2 EQU 2200H A
50、R3 EQU 2300H AR3 EQU 2300H AR4 EQU 2400H AR4 EQU 2400H ; ;定義標(biāo)號地址值定義標(biāo)號地址值 AR5 EQU 2500HAR5 EQU 2500H AR6 EQU 2600H AR6 EQU 2600H AR7 EQU 2700H AR7 EQU 2700HST: ST: MOV A,P1MOV A,P1 ; ;將將P1P1端口值讀到端口值讀到A A中中JB 0E0H,AR00 ;D0=1JB 0E0H,AR00 ;D0=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR00AR00JB 0E1H,AR01 ;D1=1JB 0E1H,AR01 ;D1=1則轉(zhuǎn)移至則轉(zhuǎn)移至
51、AR01AR01JB 0E2H,AR02 ;D2=1JB 0E2H,AR02 ;D2=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR02AR02JB 0E3H,AR03 ;D3=1JB 0E3H,AR03 ;D3=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR03AR03JB 0E4H,AR04 ;D4=1JB 0E4H,AR04 ;D4=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR04AR04JB 0E5H,AR05 ;D5=1JB 0E5H,AR05 ;D5=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR05AR05JB 0E6H,AR06 ;D6=1JB 0E6H,AR06 ;D6=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR06AR06 JB 0E7H,AR07 ;D7=1JB 0E7H,AR07
52、;D7=1則轉(zhuǎn)移至則轉(zhuǎn)移至AR07AR07SJMP STSJMP ST43AR00: LJMP AR0AR00: LJMP AR0AR01: LJMP AR1AR01: LJMP AR1AR02: LJMP AR2AR02: LJMP AR2AR03: LJMP AR3AR03: LJMP AR3AR04: LJMP AR4AR04: LJMP AR4AR05: LJMP AR5AR05: LJMP AR5AR06: LJMP AR6AR06: LJMP AR6AR07: LJMP AR7AR07: LJMP AR7 END END思考思考: : 在此題中,為何需要設(shè)置分支程序入口地址表?在此
53、題中,為何需要設(shè)置分支程序入口地址表?分支程序入口地址表分支程序入口地址表444.5.4 4.5.4 子程序 按照設(shè)計需求,程序在主程序的執(zhí)行工程中轉(zhuǎn)去執(zhí)行設(shè)計好的按照設(shè)計需求,程序在主程序的執(zhí)行工程中轉(zhuǎn)去執(zhí)行設(shè)計好的子程序。執(zhí)行完后再返回主程序。子程序。執(zhí)行完后再返回主程序。子程序框圖如下:子程序框圖如下:45 子程序的設(shè)計子程序的設(shè)計一、子程序設(shè)計原則和應(yīng)注意的問題一、子程序設(shè)計原則和應(yīng)注意的問題 子程序是一種能完成某一特定任務(wù)的程序段。其資源要為所子程序是一種能完成某一特定任務(wù)的程序段。其資源要為所有調(diào)用程序共享。因此,子程序在結(jié)構(gòu)上應(yīng)具有獨立性和通用有調(diào)用程序共享。因此,子程序在結(jié)構(gòu)上
54、應(yīng)具有獨立性和通用性,在編寫子程序時應(yīng)注意以下問題:性,在編寫子程序時應(yīng)注意以下問題: 1 1子程序的第一條指令的地址稱為子程序的入口地址。該指子程序的第一條指令的地址稱為子程序的入口地址。該指令前必須有標(biāo)號。令前必須有標(biāo)號。 2 2主程序調(diào)用子程序主程序調(diào)用子程序 兩條子程序調(diào)用指令:兩條子程序調(diào)用指令:(1 1)長調(diào)用指令:)長調(diào)用指令: LCALL addr16LCALL addr16(2 2)絕對調(diào)用指令:)絕對調(diào)用指令:ACALL addr11 ACALL addr11 463 3注意設(shè)置堆棧指針和現(xiàn)場保護(hù)注意設(shè)置堆棧指針和現(xiàn)場保護(hù)4 4最后一條指令必須是最后一條指令必須是RETRE
55、T指令指令5 5子程序可以嵌套,即子程序可以調(diào)用子程序子程序可以嵌套,即子程序可以調(diào)用子程序6 6在子程序調(diào)用時,還要注意參數(shù)傳遞的問題在子程序調(diào)用時,還要注意參數(shù)傳遞的問題 二、二、 子程序的基本結(jié)構(gòu)子程序的基本結(jié)構(gòu) MAINMAIN: ;MAINMAIN為主程序或調(diào)用程序標(biāo)號為主程序或調(diào)用程序標(biāo)號 LCALL SUB LCALL SUB ;調(diào)用子程序;調(diào)用子程序SUBSUB SUBSUB:PUSH PSWPUSH PSW;現(xiàn)場保護(hù);現(xiàn)場保護(hù) PUSH ACCPUSH ACC; 子程序處理程序段子程序處理程序段 POP ACCPOP ACC;現(xiàn)場恢復(fù);現(xiàn)場恢復(fù) POP PSWPOP PSW;
56、 RETRET;最后一條指令必須為;最后一條指令必須為RETRET47方波發(fā)生程序:方波發(fā)生程序:( (從從1.01.0口產(chǎn)生頻率約口產(chǎn)生頻率約2.5Hz2.5Hz的方波的方波) ) ORG 1000H ORG 1000HLOOP: CPL P1.0LOOP: CPL P1.0 LCALL DELAY ; LCALL DELAY ;延時約延時約200mS200mS SJMP LOOP SJMP LOOP; ;DELAY: MOV R2,#0C8H ;1TDELAY: MOV R2,#0C8H ;1TLP: MOV A,#0A6H ;1TLP: MOV A,#0A6H ;1TLP1: DEC A
57、 ;1TLP1: DEC A ;1T JNZ LP1 ;2T JNZ LP1 ;2T NOP ;1T NOP ;1T DJNZ R2, LP ;2T DJNZ R2, LP ;2T RET ;1T RET ;1T END END子程序子程序舉例舉例48延時約延時約n mS 的子程序的子程序DELAY: MOV R2,#nnH ;1TDELAY: MOV R2,#nnH ;1TLP: MOV A,#0A6H ;1TLP: MOV A,#0A6H ;1TLP1: DEC A ;1TLP1: DEC A ;1T JNZ LP1 ;2T JNZ LP1 ;2T NOP ;1T NOP ;1T DJNZ
58、 R2, LP ;2T DJNZ R2, LP ;2T RET ;1T RET ;1T494.5.5 4.5.5 中斷服務(wù)子程序中斷服務(wù)子程序 中斷服務(wù)子程序是一種由中斷信號導(dǎo)致的使中斷服務(wù)子程序是一種由中斷信號導(dǎo)致的使CPUCPU轉(zhuǎn)而轉(zhuǎn)而脫離主程序轉(zhuǎn)去執(zhí)行的某一特定程序。脫離主程序轉(zhuǎn)去執(zhí)行的某一特定程序。 中斷服務(wù)子程序與普通子程序不同之處在于:中斷服務(wù)子程序與普通子程序不同之處在于:1 1、CPUCPU開始執(zhí)行中斷服務(wù)子程序的時機(jī)是隨機(jī)的;開始執(zhí)行中斷服務(wù)子程序的時機(jī)是隨機(jī)的;2 2、要用特定的中斷返回指令(、要用特定的中斷返回指令(RETIRETI)使)使CPUCPU脫離中斷脫離中斷服務(wù)
59、子程序以返回主程序服務(wù)子程序以返回主程序504.6 4.6 程序設(shè)計舉例程序設(shè)計舉例 例例1: 1: 延時程序延時程序 ORG 1000HORG 1000H1000 B290 LOOP: 1000 B290 LOOP: CPL P1.0CPL P1.0 ; ;1T1T1002 74A5 1002 74A5 MOV A,#0A5HMOV A,#0A5H ; ;1T1T 1004 14 LOOP1: 1004 14 LOOP1: DEC ADEC A ; ;1T1T1005 70FD 1005 70FD JNZ LOOP1JNZ LOOP1 ; ;2T2T1007 00 1007 00 NOP N
60、OP ; ;1T1T1008 80F6 1008 80F6 SJMP LOOPSJMP LOOP ; ;2T2T END END延時時間:延時時間:TIME=TIME=2 2( (1 12 2) )1651652 23 31651652 2495495497T497T若若f=6MHzf=6MHz,則,則T=2uST=2uS,對,對P1.0P1.0取反的循環(huán)周期將是:取反的循環(huán)周期將是:497T497T1 12 2 T T500T500T1000uS1000uS1mS,1mS,故從故從P1.0P1.0口輸出的方波脈沖的頻率為口輸出的方波脈沖的頻率為500Hz (500Hz (方波脈沖周期為方波脈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建筑鋼筋綁扎與回收利用合同4篇
- 江蘇省無錫市錫山區(qū)2019-2020學(xué)年八年級下學(xué)期期中物理試題【含答案、解析】
- 2025版房屋抵押貸款風(fēng)險評估與咨詢服務(wù)合同4篇
- 股權(quán)代持合同簽訂與解除的法律要點2025年合同2篇
- 江西省贛州市瑞金市2024-2025學(xué)年八年級上學(xué)期期末考試道德與法治試題(含答案)
- 廣東省茂名市電白區(qū)2024-2025學(xué)年八年級上學(xué)期期末地理試卷(含答案)
- 固體飲料行業(yè)的融資模式與投資機(jī)會分析報告考核試卷
- 2025版企業(yè)知識產(chǎn)權(quán)保護(hù)委托合同范本指南3篇
- 東南歐eMAG知識百科 2025
- 2001年江蘇南通中考滿分作文《我發(fā)現(xiàn)女孩也可做“太陽”》
- 《健康體檢知識》課件
- 蘇少版七年級美術(shù)下冊 全冊
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
評論
0/150
提交評論