




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、汽車單片機與車載網絡汽車單片機與車載網絡學習情境學習情境2汽車轉向燈的單片機控制汽車轉向燈的單片機控制2.1指令簡介指令簡介、指令概述、指令概述指令是規定單片機進行某種操作的命令。一條指令只能完成指令是規定單片機進行某種操作的命令。一條指令只能完成有限的功能,為使單片機完成一定的或復雜的功能就需要一系列有限的功能,為使單片機完成一定的或復雜的功能就需要一系列指令。單片機能夠執行的各種指令的集合就稱為指令系統。指令。單片機能夠執行的各種指令的集合就稱為指令系統。單片機能執行什么樣的操作,是在單片機設計時確定的。一單片機能執行什么樣的操作,是在單片機設計時確定的。一條指令對應著一種基本操作。由于單
2、片機只能識別二進制數,所條指令對應著一種基本操作。由于單片機只能識別二進制數,所以必須用二進制形式來表示,稱為指令的機器碼或機器指令。以必須用二進制形式來表示,稱為指令的機器碼或機器指令。-51單片機指令系統共有單片機指令系統共有33種功能,種功能,42種助記符,種助記符,111條指令。條指令。、指令格式、指令格式不同指令翻譯成機器碼后字節數也不一定相同。按照機器碼不同指令翻譯成機器碼后字節數也不一定相同。按照機器碼個數,指令可以分為以下三種:個數,指令可以分為以下三種:單字節指令:操作碼單字節指令:操作碼雙字節指令:操作碼數據或尋址方式雙字節指令:操作碼數據或尋址方式三字節指令:操作碼數據或
3、尋址方式數據或尋址方式三字節指令:操作碼數據或尋址方式數據或尋址方式-51單片機指令系統包括單片機指令系統包括49條單字節指令、條單字節指令、45條雙條雙字節指令、字節指令、17條三字節指令。條三字節指令。采用助記符表示的匯編語言指令格式如下:采用助記符表示的匯編語言指令格式如下:標號:標號:操作碼操作碼目的操作數目的操作數,源操作數,源操作數;注釋;注釋標號是加在指令的前面表示該指令位置的符號地址,可標號是加在指令的前面表示該指令位置的符號地址,可有可無;標號由有可無;標號由18個字符組成,第一個字符必須是英文字母,個字符組成,第一個字符必須是英文字母,不能是數字或其他符號;標號后必須用不能
4、是數字或其他符號;標號后必須用“:”。操作碼是由助記符表示的字符串,表示指令所實現的操操作碼是由助記符表示的字符串,表示指令所實現的操作功能,如表示數據傳送操作、表示加法操作作功能,如表示數據傳送操作、表示加法操作等。等。操作數指出了參加運算的數據或數據存放的位置。操作數操作數指出了參加運算的數據或數據存放的位置。操作數一般有以下幾種形式:沒有操作數項,操作數隱含在操作碼中,一般有以下幾種形式:沒有操作數項,操作數隱含在操作碼中,如指令;只有一個操作數,如如指令;只有一個操作數,如1.01.0指令;有兩指令;有兩個操作數,如個操作數,如,#0,#0指令,操作數之間以逗號相指令,操作數之間以逗號
5、相隔;有三個操作數,如隔;有三個操作數,如,#08,#08, ,指令,指令,操作數之間以逗號相隔。操作數之間以逗號相隔。注釋是對語句的解釋說明,用以提高程序的可讀性,注釋注釋是對語句的解釋說明,用以提高程序的可讀性,注釋前必須加前必須加“;”。計算機對它不作處理,注釋部分不影響指令。計算機對它不作處理,注釋部分不影響指令的執行。的執行。2.22.2尋址方式尋址方式從指令格式知道,指令的重要組成部分是操作數,指出了從指令格式知道,指令的重要組成部分是操作數,指出了參與操作的數據或數據的地址。尋找操作操作數地址的方式稱參與操作的數據或數據的地址。尋找操作操作數地址的方式稱為尋址方式,是由指令的功能
6、決定的,尋址方式越多,指令功為尋址方式,是由指令的功能決定的,尋址方式越多,指令功能就越強。能就越強。-51-51指令系統共使用了指令系統共使用了7 7種尋址方式,包括寄存器尋種尋址方式,包括寄存器尋址、直接尋址、立即尋址、寄存器間接尋址、變址尋址、相對址、直接尋址、立即尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。尋址和位尋址。、立即數尋址、立即數尋址在這種尋址方式中,指令多是雙字節的。立即數尋址是指在這種尋址方式中,指令多是雙字節的。立即數尋址是指操作數直接寫在指令中。例如:指令操作數直接寫在指令中。例如:指令,#3,#3執行執行的操作是將立即數的操作是將立即數3 3送到累加器中,該指
7、令就是立即數送到累加器中,該指令就是立即數尋址。注意:立即數前必須加尋址。注意:立即數前必須加“#”#”號。號。、直接尋址、直接尋址在這種尋址方式中,把存放操作數的內存單元的地址直接在這種尋址方式中,把存放操作數的內存單元的地址直接寫在指令中。在寫在指令中。在-51-51單片機中,可以直接尋址的存儲器主單片機中,可以直接尋址的存儲器主要有內部區和特殊功能寄存器區區。例如:指令要有內部區和特殊功能寄存器區區。例如:指令,3,3執行的操作是將內部中地址為執行的操作是將內部中地址為3 3的的單元內容傳送到累加器中,其操作數單元內容傳送到累加器中,其操作數3 3就是存放數據的單就是存放數據的單元地址,
8、因此指令是直接尋址。設內部元地址,因此指令是直接尋址。設內部3 3單元的內單元的內容是容是8888,那指令,那指令,3,3的執行過程如圖所示。的執行過程如圖所示。、寄存器尋址、寄存器尋址寄存器尋址是指將操作數存放于寄存器中,寄存器包括工寄存器尋址是指將操作數存放于寄存器中,寄存器包括工作寄存器作寄存器0-0-7 7、累加器、通用寄存器、地址寄存器、累加器、通用寄存器、地址寄存器等。例如:指令等。例如:指令1,1,的操作是把累加器中的的操作是把累加器中的數據傳送到寄存器數據傳送到寄存器1 1中,其操作數存放在累加器中,所以中,其操作數存放在累加器中,所以3AH3AHA內部RAM40H圖2-2 直
9、接尋址示意圖58H58HA內部RAM20H20HR0圖2-3 寄存器尋址示意圖尋址方式為寄存器尋址。尋址方式為寄存器尋址。如果程序狀態寄存器的如果程序狀態寄存器的1 1、0=01(0=01(選中第二選中第二組工作寄存器,對應地址為組工作寄存器,對應地址為0808-0-0),),設累加器的內容為設累加器的內容為2020,則執行,則執行1,1,指令后,內部指令后,內部0909單元單元的值就變為的值就變為2020。、寄存器間接尋址、寄存器間接尋址在這種尋址方式中,操作數所指定的寄存器中存放的不是在這種尋址方式中,操作數所指定的寄存器中存放的不是操作數,而是操作數地址,這種尋址方式是用于訪問片內數據操
10、作數,而是操作數地址,這種尋址方式是用于訪問片內數據存儲器或片外數據存儲器。存儲器或片外數據存儲器。-51-51指令系統中,用于寄存器間接尋址的寄存器有指令系統中,用于寄存器間接尋址的寄存器有0 0、1 1和,稱為寄存器間接尋址寄存器。注意:間和,稱為寄存器間接尋址寄存器。注意:間接尋址寄存器前面必須加符號接尋址寄存器前面必須加符號“”。例如:指令例如:指令,0 0執行的操作是將執行的操作是將0 0的內容作的內容作為內部的地址,再將該地址單元中的內容取出來送到累為內部的地址,再將該地址單元中的內容取出來送到累加器中。加器中。、變址尋址、變址尋址在這種尋址方式中,是將基址寄存器與變址寄存器的內容
11、在這種尋址方式中,是將基址寄存器與變址寄存器的內容相加,結果作為操作數的地址。或是基址寄存器,相加,結果作為操作數的地址。或是基址寄存器,累加器是變址寄存器。該類尋址方式主要用于查表操作。例累加器是變址寄存器。該類尋址方式主要用于查表操作。例如:指令如:指令,+ +執行的操作是將累加器執行的操作是將累加器和基址寄存器的內容相加,相加結果作為操作數存放和基址寄存器的內容相加,相加結果作為操作數存放的地址,再將操作數取出來送到累加器中。的地址,再將操作數取出來送到累加器中。設累加器設累加器0202,03000300,外部,外部(0302(0302) )5555,則指令,則指令,+ +的執行結果是的
12、執行結果是累加器的內容為累加器的內容為5555。2000H20HADPTR指令執行前2020H47H47HAROM指令執行后圖2-5 變址尋址示意圖、相對尋址、相對尋址相對尋址是指程序計數器的當前內容與指令第二字節相對尋址是指程序計數器的當前內容與指令第二字節所給出的數相加,其結果作為跳轉指令的轉移地址(也稱目所給出的數相加,其結果作為跳轉指令的轉移地址(也稱目的)。該類尋址方式主要用于跳轉指令。的)。該類尋址方式主要用于跳轉指令。例如:例如:rere這條指令表示若進位這條指令表示若進位0 0,則不跳轉,程序繼續向下執行;,則不跳轉,程序繼續向下執行;若進位若進位1 1,則以中的當前值為基地址
13、,加上偏移量,則以中的當前值為基地址,加上偏移量后所得到的結果為該轉移指令的目的地址。后所得到的結果為該轉移指令的目的地址。、位尋址、位尋址位尋址是指按位進行的操作,位尋址是指按位進行的操作,-51-51單片機中,操作數單片機中,操作數不僅可以按字節為單位進行操作,也可以進行操作。當我們把不僅可以按字節為單位進行操作,也可以進行操作。當我們把一位作為操作數時,這個操作數的地址稱為位地址。一位作為操作數時,這個操作數的地址稱為位地址。位尋址區包括專門安排在內部中兩個區域:一是內位尋址區包括專門安排在內部中兩個區域:一是內部的位尋址區,地址范圍是部的位尋址區,地址范圍是2020-2-2,共,共16
14、16個個單元,位地址為單元,位地址為0000-7-7;二是特殊功能寄存器中有;二是特殊功能寄存器中有1111個寄存器可以位尋址。個寄存器可以位尋址。例如:指令例如:指令3 3執行的操作是將內部位執行的操作是將內部位尋址區中的尋址區中的3 3位置位置1.1.設內部設內部2727單元原來的內容是單元原來的內容是0000,執行,執行3后,由于后,由于3對應著內部對應著內部27的第的第5位,因位,因此該位變為此該位變為1,也就是,也就是27單元的內容為單元的內容為20。2.32.3指令系統指令系統-51-51單片機指令系統包括單片機指令系統包括111111條指令,按功能可以劃條指令,按功能可以劃分為五
15、類:分為五類:數據傳送指令(數據傳送指令(2929條)、算術運算指令(條)、算術運算指令(2424條)、邏輯運條)、邏輯運算指令(算指令(2424條)、控制轉移指令(條)、控制轉移指令(1717條)、位操作指令(條)、位操作指令(1717條)條)2.3.12.3.1指令系統中的符號說明指令系統中的符號說明2.3.22.3.2數據傳送類指令數據傳送類指令數據傳送類指令是最常用、最基本的一類指令,包括內部數據傳送類指令是最常用、最基本的一類指令,包括內部、寄存器、外部以及程序存儲器之間的數據傳送。、寄存器、外部以及程序存儲器之間的數據傳送。數據傳送操作是指把數據從源地址傳送到目的地址,源地數據傳送
16、操作是指把數據從源地址傳送到目的地址,源地址內容不變。址內容不變。 1 1、內部、內部8 8位數據傳送指令位數據傳送指令內部內部8 8位數據傳送指令共位數據傳送指令共1515條,主要用于條,主要用于-51-51單片機內單片機內部與寄存器之間的數據傳送。指令基本格式:部與寄存器之間的數據傳送。指令基本格式: ,源操作數源操作數()以累加器為目的地址的傳送指令(條)()以累加器為目的地址的傳送指令(條)說明:以上傳送指令的結果影響程序狀態字寄存器的說明:以上傳送指令的結果影響程序狀態字寄存器的標志。標志。例例2.1已知相應單元的內容,請指出每條指令執行后相應已知相應單元的內容,請指出每條指令執行后
17、相應單元內容的變化。單元內容的變化。累加器累加器4040寄存器寄存器0 0 5050內部內部:40:40 6060內部內部:50:50 2020,#30,#30,40,40, ,0 0,0 0解:解:,#30執行后()執行后()30; ,40執行后()執行后()60; ,0執行后()執行后()50;,0執行后()執行后()20。()以為目的地址的傳送指令(條)()以為目的地址的傳送指令(條)說明:以上傳送指令的結果不影響程序狀態寄存器說明:以上傳送指令的結果不影響程序狀態寄存器標志。標志。()以直接地址為目的的傳送指令(條)()以直接地址為目的的傳送指令(條)說明:以上傳送指令的結果不影響程序
18、狀態字寄存器說明:以上傳送指令的結果不影響程序狀態字寄存器標志。標志。()以寄存器間接地址為目的地址的傳送指令(條)()以寄存器間接地址為目的地址的傳送指令(條)說明:以上傳送指令的結果不影響程序狀態寄存器說明:以上傳送指令的結果不影響程序狀態寄存器標志。標志。例例2.1已知相應單元的內容,請指出每條指令執行后相應已知相應單元的內容,請指出每條指令執行后相應單元內容的變化。單元內容的變化。寄存器寄存器0 05050內部內部:50:506060寄存器寄存器1 16666內部內部:66:664545寄存器寄存器6 62020內部內部:70:703030, ,6 67,707,707070,50,5
19、04040,0 0 1,#881,#88解:解: ,6執行后()執行后()207,70執行后(執行后(7)3070,50執行后(執行后(70)6040,0執行后(執行后(40)601,#88執行后(執行后(66)882 2、1616位數據傳送指令(條)位數據傳送指令(條)說明:以上指令結果不影響程序狀態字寄存器標志。說明:以上指令結果不影響程序狀態字寄存器標志。3 3、外部數據傳送指令(條)、外部數據傳送指令(條)說明:)外部只能通過累加器進行數據傳送。說明:)外部只能通過累加器進行數據傳送。)累加器與外部之間傳送數據時只能間間接尋址方式,間接尋址)累加器與外部之間傳送數據時只能間間接尋址方式
20、,間接尋址寄存器為寄存器為, ,0,0,1 1)以上傳送指令結果通常影響的標志。)以上傳送指令結果通常影響的標志。例例2.32.3把外部數據存儲器把外部數據存儲器20402040單元中的數據傳送到外部單元中的數據傳送到外部數據存儲器數據存儲器25702570單元中去。單元中去。解:解:,#2040,#2040,#2570,#2570 , ,、交換和查表類指令、交換和查表類指令()字節交換指令(條)()字節交換指令(條)說明:以上指令結果影響程序狀態字寄存器的標志說明:以上指令結果影響程序狀態字寄存器的標志()半字節交換指令(條)()半字節交換指令(條)說明:以上指令結果影響程序狀態字寄存器的標
21、志說明:以上指令結果影響程序狀態字寄存器的標志()累加器中高位和低位交換(條)()累加器中高位和低位交換(條)說明:以上指令結果影響程序狀態字寄存器的標志說明:以上指令結果影響程序狀態字寄存器的標志例例2.42.4設內部數據存儲區設內部數據存儲區2 2、2 2單元中連續存放有單元中連續存放有4 4個個碼,試編寫一程序把碼,試編寫一程序把4 4個碼倒序排序,即:個碼倒序排序,即:3 3 2 2 1 1 0 0 0 1 2 3 2BH 2CH 2BH 2CH解:解:MOV R0,#2BH MOV A, R0 SWAP A MOV R0, A MOV R1, #2CH MOV A, R1 SWAP
22、A XCH A, R0 MOV R1, A()查表指令(條)()查表指令(條) 說明:說明:以上指令結果影響程序狀態寄存器的標志。以上指令結果影響程序狀態寄存器的標志。查表指令用于查找存放在程序存儲器中的表格。查表指令用于查找存放在程序存儲器中的表格。()堆棧操作指令(條)()堆棧操作指令(條)說明:說明:堆棧是用戶自己設定的內部中的一塊專用存儲區,堆棧是用戶自己設定的內部中的一塊專用存儲區,使用時一定先設堆棧指針;堆棧指針缺省為使用時一定先設堆棧指針;堆棧指針缺省為0707堆棧遵循后進先出的原則安排數據堆棧遵循后進先出的原則安排數據堆棧操作必須是字節操作,而且只能直接尋址。將累加器堆棧操作必
23、須是字節操作,而且只能直接尋址。將累加器入棧、出棧指令可以寫成:入棧、出棧指令可以寫成:PUSH/POP ACCPUSH/POP ACC或或PUSH/POP 0E0HPUSH/POP 0E0H,而不能寫成:而不能寫成:PUSH/POP APUSH/POP A。堆棧通常用于臨時保護數據及子程序調用時保護現場堆棧通常用于臨時保護數據及子程序調用時保護現場/ /恢恢復現場。復現場。上類指令結果不影響程序狀態字寄存器標志。上類指令結果不影響程序狀態字寄存器標志。例例2.52.5設(設(3030)0101,(,(4040)1 1。將內部。將內部的的3030與與4040兩單元的內容交換。兩單元的內容交換。
24、解:解:PUSH 30HPUSH 30H PUSH 40H PUSH 40H POP 30H POP 30H POP 40H POP 40H執行結果執行結果(3030)1 1,(,(4040)0101。2.3.32.3.3算術運算類指令算術運算類指令、加、減法指令、加、減法指令()加法指令(條)()加法指令(條)說明:說明:與的區別為是否加進位位。與的區別為是否加進位位。指令執行結果均在累加器中。指令執行結果均在累加器中。以上指令結果均影響程序狀態字寄存器的、以上指令結果均影響程序狀態字寄存器的、和標志。和標志。如果如果7 7位有進位,則進位位為:否則,為位有進位,則進位位為:否則,為. .如
25、如果果3 3位有進位,則輔助進位為;否則,為位有進位,則輔助進位為;否則,為. .如果如果6 6位有進位而位有進位而7 7位無進位,或位無進位,或6 6位無進位而位無進位而7 7位有進位,位有進位,則溢出標志為,否則,為。標志可由計算公則溢出標志為,否則,為。標志可由計算公式式7+7+66來確定,其中來確定,其中7、6分別為分別為6位、位、7位向高位的進位。位向高位的進位。例例2.62.6()()0 03 3,(,(0 0)0 0,執行指令,執行指令ADD A, R0ADD A, R0,操作如下:,操作如下:1100001111000011+ 10101010+ 10101010 101101
26、101101101101運算后,運算后,1 1,1 1,1 1,1 1,(),()6 6。上例中若上例中若3 3和看作無符號數相加,則不考慮溢出,和看作無符號數相加,則不考慮溢出,結果為結果為1616;若把;若把3 3和看作有符號數,則得到個和看作有符號數,則得到個負數相加得正數的錯誤結論,此時負數相加得正數的錯誤結論,此時1 1,表示出錯。,表示出錯。=1=1表示兩正數相加,和變成負數,或兩負數相加,和變成正數的表示兩正數相加,和變成負數,或兩負數相加,和變成正數的錯誤結果。溢出標志在內部是靠硬件異或門獲得。錯誤結果。溢出標志在內部是靠硬件異或門獲得。()減法指令(條)()減法指令(條)說明
27、:說明:減法指令中沒有不帶借位的減法指令,所以在需要減法指令中沒有不帶借位的減法指令,所以在需要時,發須先將清。時,發須先將清。指令執行結果均在累加器中。指令執行結果均在累加器中。減法指令結果影響程序狀態字寄存器的、減法指令結果影響程序狀態字寄存器的、和標志。、和標志。()()BCDBCD碼調正指令(條)碼調正指令(條)說明:說明:結果影響程序狀態字寄存器的、和標志。結果影響程序狀態字寄存器的、和標志。碼是用二進制形式表示十進數,例如十制數碼是用二進制形式表示十進數,例如十制數4545,其碼,其碼形式形式4545。碼只是一種表示形式,與其數值沒有關系。碼只是一種表示形式,與其數值沒有關系。碼用
28、位二進制碼表示一位十進制數,這四位二碼用位二進制碼表示一位十進制數,這四位二進制數的權為進制數的權為84218421,所以碼又稱為,所以碼又稱為84218421碼。如下表:碼。如下表:十進制數碼0123456789二進制碼0000000100100011010001010110011110001001指令將中的二進制碼自動調整為碼。指令將中的二進制碼自動調整為碼。指令只能跟在或加法指令后,不指令只能跟在或加法指令后,不適用于減法。適用于減法。該指令結果影響程序狀態字寄存器的、該指令結果影響程序狀態字寄存器的、和標志。和標志。例例2.72.7說明下列指令的執行結果。說明下列指令的執行結果。解:解
29、:MOV A,#05H ;05H-AMOV A,#05H ;05H-A ADD A,#08H ;05H+08HA,A=0DH ADD A,#08H ;05H+08HA,A=0DH DA A ; DA A ;自動調整為碼,自動調整為碼,1313()加減指令(條)()加減指令(條)說明:以上指令通常不影響。說明:以上指令通常不影響。2 2、乘、除法指令、乘、除法指令()乘法指令(條)()乘法指令(條)說明:乘法結果影響的(積超過,則說明:乘法結果影響的(積超過,則置,否則為)和(總是清)以及標志。置,否則為)和(總是清)以及標志。()除法指令(條)()除法指令(條)說明:說明:除法結果影響的除法結
30、果影響的( (除數為除數為0 0,則置,否,則置,否則為則為0)0)和(總是清)以及標志。和(總是清)以及標志。當除數為時結果不確定。當除數為時結果不確定。()邏輯或指令(條)()邏輯或指令(條)()邏輯異或指令(條)()邏輯異或指令(條)()累加器清()累加器清0 0和取反指令(條)和取反指令(條)2 2、循環移位指令(條)、循環移位指令(條)說明:執行帶進位的循環移位指令之前,必須給置位說明:執行帶進位的循環移位指令之前,必須給置位或清或清0.0.例例2.92.9()()5 5,執行指令,執行指令,#,#之之后,()后,()0505,高位被清,而低位不變;執行指令,高位被清,而低位不變;執
31、行指令,#,#,高位不變,而低位被置;執行指,高位不變,而低位被置;執行指令令,#,#之后,(),高位不變,而之后,(),高位不變,而低位變反。低位變反。2.3.5 2.3.5 控制轉移類指令控制轉移類指令控制轉移類指令的本質是改變程序計數器的內容,從控制轉移類指令的本質是改變程序計數器的內容,從而改變程序的執行方向。控制轉移指令分為:無條件轉移指令、而改變程序的執行方向。控制轉移指令分為:無條件轉移指令、條件轉移指令和調用條件轉移指令和調用/ /返回指令。返回指令。、無條件轉移指令(條)、無條件轉移指令(條)()長轉移指令說明:該指令可以轉移到()長轉移指令說明:該指令可以轉移到6464程序
32、程序存儲器中的任意位置。存儲器中的任意位置。()絕對轉移指令:()絕對轉移指令:說明:該指令轉移范圍是說明:該指令轉移范圍是2。例例2.102.10指令:指令:1 1的執行結果。的執行結果。解:設標號地址解:設標號地址10301030, ,1 1標號地址標號地址=1100=1100,該指令執行后首先加該指令執行后首先加2 2變為變為10321032的高的高5 5位和位和11001100的低的低1111位拼裝成新的值位拼裝成新的值000100010000000000100010000000,即程序從,即程序從11001100開開始執行。始執行。()相對轉移指令()相對轉移指令說明:該指令的轉移范
33、圍是以本指令的下一條指令為中心說明:該指令的轉移范圍是以本指令的下一條指令為中心的的-128127B-128127B以內。在實際應用中,以內。在實際應用中,LJMPLJMP、AJMPAJMP和和SJMPSJMP后面的后面的addr16addr16、addr11addr11或或relrel都是用標號來代替的,不一定寫出它們的都是用標號來代替的,不一定寫出它們的具體地址。具體地址。()間接尋址的無條件轉移指令:常用于散轉程序()間接尋址的無條件轉移指令:常用于散轉程序、條件轉移指令、條件轉移指令()累加器判()累加器判0 0指令指令說明說明:轉移范圍與指令:轉移范圍與指令SJMP相同。相同。 ()
34、比較轉移指令()比較轉移指令()減()減1 1非零轉移指令非零轉移指令說明:說明:DJNZDJNZ指令通常用于循環程序中控制循環次數。指令通常用于循環程序中控制循環次數。轉移范圍與轉移范圍與SJMPSJMP指令相同。指令相同。以上指令結果不影響程序狀態字寄存器以上指令結果不影響程序狀態字寄存器PSWPSW。3 3、調用和返回指令、調用和返回指令()絕對調用指令:調用范圍與()絕對調用指令:調用范圍與AJMPAJMP相同。相同。()長調用指令:調用范圍與()長調用指令:調用范圍與LJMPLJMP相同。相同。 (3 3)返回指令)返回指令 (4 4)空操作)空操作2.3.6 2.3.6 位操作類指
35、令位操作類指令 前面介紹的指令全都是用前面介紹的指令全都是用“字節字節”來處理的:字節的移動、來處理的:字節的移動、加法、減法、邏輯運算、移位等。工業中有很場合需要處理開加法、減法、邏輯運算、移位等。工業中有很場合需要處理開關輸出、繼電器吸合,用字節來處理就比較麻煩,所以在關輸出、繼電器吸合,用字節來處理就比較麻煩,所以在80518051單片機中特意引入一個位處理機制。在項目中單片機中特意引入一個位處理機制。在項目中“位位”就是一個就是一個汽車轉向燈的亮和滅。汽車轉向燈的亮和滅。 位操作指令的操作數是位操作指令的操作數是“位位”,其取值只能是,其取值只能是0 0或或1 1,故又稱,故又稱為布爾
36、變量操作指令。位操作指令的操作對象是片內為布爾變量操作指令。位操作指令的操作對象是片內RAMRAM的位尋的位尋址區(即址區(即20H2FH20H2FH)和特殊功能寄存器)和特殊功能寄存器SFRSFR中的中的1111個位尋址的寄個位尋址的寄存器。片內存器。片內RAMRAM的的20H2FH20H2FH共共1616個單元個單元128128個位,我們為這個位,我們為這128128個個位的每個位均定義位的每個位均定義1 1個名稱,個名稱,00H7FH00H7FH,稱為位地址。對于特殊,稱為位地址。對于特殊功能寄存器功能寄存器SFRSFR中可位尋址的寄存器的每個位也有名稱定義。中可位尋址的寄存器的每個位也
37、有名稱定義。 對于位尋址,有以下三種不同的寫法:對于位尋址,有以下三種不同的寫法: 第一種是直接地址寫法,如第一種是直接地址寫法,如 MOV C,0D2H MOV C,0D2H 其中其中0D2H0D2H表示表示PSWPSW中中的的OVOV位尋址。位尋址。 第二種是點操作符寫法,如第二種是點操作符寫法,如 MOV C,0D0H.2MOV C,0D0H.2。 第三種是位名稱寫法,在指令格式中直接采用位定義名稱,第三種是位名稱寫法,在指令格式中直接采用位定義名稱,這種方式只適應于可以位尋址的這種方式只適應于可以位尋址的SFR,SFR,如如 MOV C,OVMOV C,OV。 (1 1)位傳送指令)位
38、傳送指令 說明:位傳送指令必須與進位位說明:位傳送指令必須與進位位C C進行,不能在其他兩位之間進行,不能在其他兩位之間傳送。進位位傳送。進位位C C也稱為位累加器。也稱為位累加器。 (2 2)位置位和位清零指令)位置位和位清零指令 (3 3)位運算指令)位運算指令 (4 4)位轉移指令)位轉移指令 說明:說明:JBCJBC與與JBJB指令區別,前者轉移后并把尋址位清指令區別,前者轉移后并把尋址位清0 0,后者,后者只轉移不清只轉移不清0 0尋址位。尋址位。 (5 5)判)判CyCy標志指令標志指令 例例2.11 2.11 用位操作指令編程計算邏輯方程用位操作指令編程計算邏輯方程P1.7=AC
39、C.0 x(B.0+P2.1)+/P3.2,P1.7=ACC.0 x(B.0+P2.1)+/P3.2,其中其中“+”+”表示邏輯或,表示邏輯或,“x”x”表示邏輯與。表示邏輯與。 解:程序段如下:解:程序段如下: MOV C,B.0MOV C,B.0 ORL C,P2.1 ORL C,P2.1 ANL C,ACC.0 ANL C,ACC.0 ORL C,/P3.2 ORL C,/P3.2 MOV P1.7,C MOV P1.7,C2.3.7 2.3.7 常用偽指令常用偽指令 單片機匯編語言程序設計中,除了使用指令系統規定的指單片機匯編語言程序設計中,除了使用指令系統規定的指令外,還要用到一些偽
40、指令。偽指令又稱指示性指令,具有和令外,還要用到一些偽指令。偽指令又稱指示性指令,具有和指令類似的形式,但匯編時偽指令并不產生可執行的目標代碼,指令類似的形式,但匯編時偽指令并不產生可執行的目標代碼,只是對匯編進行某種控制或提供某些匯編信息。只是對匯編進行某種控制或提供某些匯編信息。 1 1、定位為指令、定位為指令 ORGORG 格式:格式: 標號:標號: ORG ORG 地址表達式地址表達式 功能:規定程序塊或數據塊存放的起始位置功能:規定程序塊或數據塊存放的起始位置 例如:例如:ORG 1000HORG 1000H;表示指令;表示指令 MOV A,#20H MOV A,#20H 存放于存放
41、于1000H1000H開開始的單元。始的單元。 2 2、定義字節數據偽指令、定義字節數據偽指令 DBDB 格式:格式: 標號:標號: DB DB 字節數據表字節數據表 功能:字節數據表是多個字節數據、字符串或表達式,它功能:字節數據表是多個字節數據、字符串或表達式,它表示將字節數據表中的數據從左到右依次存放在指定地址單元。表示將字節數據表中的數據從左到右依次存放在指定地址單元。 例如:例如:ORG 1000HORG 1000H TAB:DB 2BH,0A0H,A,2 TAB:DB 2BH,0A0H,A,2* *4 4;表示從;表示從1000H1000H單元開單元開始的地方存放數據始的地方存放數
42、據2BH2BH,0A0H,41H(0A0H,41H(字母字母A A的的ASCIIASCII碼碼),08H.),08H. 3 3、定義字數據偽指令、定義字數據偽指令 DWDW 格式:格式: 標號:標號: DW DW 字數據表字數據表 功能:與功能:與DBDB類似,但類似,但DWDW定義的數據項為字,包括兩個字節,定義的數據項為字,包括兩個字節,存放時高位在前,低位在后。存放時高位在前,低位在后。 例如:例如:ORG 1000HORG 1000H DATA:DW 324AH,3CH; DATA:DW 324AH,3CH;表示從表示從1000H1000H單元開始的地方存單元開始的地方存放數放數 32
43、H,4AH,00H,3CH(3CH32H,4AH,00H,3CH(3CH以字的形式表示為以字的形式表示為003CH).003CH). 4 4、定義空間偽指令、定義空間偽指令 DSDS 格式:格式: 標號:標號: DS DS 表達式表達式 功能:從指定的地址開始,保留多個存儲單元作為備用的功能:從指定的地址開始,保留多個存儲單元作為備用的空間。空間。 例如:例如:ORG 1000HORG 1000H BUG:DS 50 BUG:DS 50 TAB:DB 22H; TAB:DB 22H;表示從表示從1000H1000H開始的地方預留開始的地方預留5050(1000H1031H1000H1031H)
44、個存儲節空間,)個存儲節空間,22H22H存放在存放在1032H1032H。 5 5、符號定義偽指令、符號定義偽指令EQUEQU或或 格式:符號名格式:符號名 EQU EQU 表達式表達式 符號名表達式符號名表達式 功能:將表達式的值或某個特定匯編符號定義為一個指定功能:將表達式的值或某個特定匯編符號定義為一個指定的符號名,只能定義單字節數據,并且必須遵循先定義后使用的符號名,只能定義單字節數據,并且必須遵循先定義后使用的原則,因此該語句通常放在源程序的開關部分。的原則,因此該語句通常放在源程序的開關部分。 例如:例如:LEN=10LEN=10 SUM EQU 21H SUM EQU 21H
45、MOV A,#LEN MOV A,#LEN;執行指令后,累加器;執行指令后,累加器A A中的值為中的值為0AH0AH 6 6、數據賦值偽指令、數據賦值偽指令 DATADATA 格式:符號名格式:符號名 DATA DATA 表達式表達式 功能:將表達式的值或某個特定匯編符號定義一個指定的符功能:將表達式的值或某個特定匯編符號定義一個指定的符號名,只能定義單字節數據,但可以先使用后定義,因此用它號名,只能定義單字節數據,但可以先使用后定義,因此用它定義數據可以放在程序末尾進行數據定義。定義數據可以放在程序末尾進行數據定義。 舉例:舉例: MOV A,#LEN MOV A,#LEN LEN DATA
46、 10 LEN DATA 10 7 7、數據地址賦值偽指令、數據地址賦值偽指令 XDATAXDATA 格式:符號名格式:符號名 XDATA XDATA 表達式表達式 功能:將表達式的值或某個特定匯編符號定義一個指定的功能:將表達式的值或某個特定匯編符號定義一個指定的符號名,可以先使用后定義,并且用于雙字節數據定義。符號名,可以先使用后定義,并且用于雙字節數據定義。 舉例:舉例:DELAY XDATA 0356HDELAY XDATA 0356H LCALL DELAY ; LCALL DELAY ;執行指令后,程序轉到執行指令后,程序轉到0356H0356H單元執單元執行。行。 2.3.8 2
47、.3.8 匯編子程序舉例匯編子程序舉例 例例2.12 2.12 試計算發動機燃油溫度信號與油溫的關系。試計算發動機燃油溫度信號與油溫的關系。 設電壓與油溫表為設電壓與油溫表為1 2 3 4V 22 30 38 54 1 2 3 4V 22 30 38 54 。發動機的發動機的燃油溫度通常是燃油溫度通常是電壓信號,通過上表可以在得到一個電壓信號,電壓信號,通過上表可以在得到一個電壓信號,算出燃油溫度。由于輸入的字符之間很難找到什么規律,建立算出燃油溫度。由于輸入的字符之間很難找到什么規律,建立表格時將字符和其對應的處理程序的地址一同存入。查表時先表格時將字符和其對應的處理程序的地址一同存入。查表
48、時先查找電壓值,其后就是處理程序的入口地址(假設待轉換量放查找電壓值,其后就是處理程序的入口地址(假設待轉換量放在在A A中,結果存放到中,結果存放到R2R2中)。程序代碼如下:中)。程序代碼如下: SRT: MOV DPTR,#TABSRT: MOV DPTR,#TAB MOV B, A MOV B, A LOOP: CLR A LOOP: CLR A MOVC A,A+DPTR MOVC A,A+DPTR INC DPTR INC DPTR CJNE A,B,NEXTCJNE A,B,NEXT CLR A CLR A MOVC A,A+DPTR MOVC A,A+DPTR MOV R2,A
49、 MOV R2,A NEXT:INC DPTR NEXT:INC DPTR SJMP LOOP SJMP LOOP TAB: DB 1 TAB: DB 1 DB 22 DB 22 DB 2 DB 2 DB 30 DB 30 DB 3 DB 3 DB 38 DB 38 DB 4 DB 4 DB 54 DB 542.4 2.4 單片機開發系統單片機開發系統 一個單片機系統從提出任務到正式投入運行的過程,稱為單一個單片機系統從提出任務到正式投入運行的過程,稱為單片機的開發。開發過程所用的設備稱為開發工具。片機的開發。開發過程所用的設備稱為開發工具。 單片機價格低、功能強、簡單易學、使用方便,可用來組
50、成單片機價格低、功能強、簡單易學、使用方便,可用來組成各種不同規模的應用系統,但由于它的硬件和軟件的支持能力各種不同規模的應用系統,但由于它的硬件和軟件的支持能力有限,自身無調試能力,因此必須借助于開發工具來排除應用有限,自身無調試能力,因此必須借助于開發工具來排除應用系統樣機中的硬件故障,生成目標程序,并排除程序錯誤。當系統樣機中的硬件故障,生成目標程序,并排除程序錯誤。當目標系統調試成功以后,還需要用開發工具把目標程序固化到目標系統調試成功以后,還需要用開發工具把目標程序固化到單片機內部或外部單片機內部或外部EEPROMEEPROM芯片中。芯片中。2.4.1 2.4.1 單片機開發系統的功
51、能單片機開發系統的功能 單片機應用系統中電路和程序的調試、程序的裝入等,都必單片機應用系統中電路和程序的調試、程序的裝入等,都必須借助于單片機開發系統,單片機開發系統是單片機編程調試須借助于單片機開發系統,單片機開發系統是單片機編程調試的必需工具。的必需工具。 單片機開發系統在硬件上增加了目標系統的在線仿真器、編單片機開發系統在硬件上增加了目標系統的在線仿真器、編譯器等部件,所提供的軟件除有簡單的操作系統外,還增加了譯器等部件,所提供的軟件除有簡單的操作系統外,還增加了目標系統的匯編和調試程序等。目標系統的匯編和調試程序等。 單片機開發系統又稱為開發機或仿真器。仿真的目的是利用單片機開發系統又
52、稱為開發機或仿真器。仿真的目的是利用開發機的資源(開發機的資源(CPUCPU、存儲器和、存儲器和I/OI/O設備等)來模擬要開發的單設備等)來模擬要開發的單片機應用系統的片機應用系統的CPUCPU、存儲器和、存儲器和I/OI/O操作,并跟蹤和觀察目標機操作,并跟蹤和觀察目標機的運行狀態。的運行狀態。 1 1、在線仿真功能、在線仿真功能 單片機的仿真器具有與所要開發的單片機系統相同的單片機單片機的仿真器具有與所要開發的單片機系統相同的單片機芯片,仿真器就是一個單片機系統。當單片機系統接線完畢后,芯片,仿真器就是一個單片機系統。當單片機系統接線完畢后,由于自身無法驗證好壞,無調試能力,那么我們可以
53、把應用系由于自身無法驗證好壞,無調試能力,那么我們可以把應用系統中的單片機芯片拔掉,插上在線仿真器的仿真頭,此時單片統中的單片機芯片拔掉,插上在線仿真器的仿真頭,此時單片機應用系統和仿真器共用一塊單片機芯片,當在開發系統上通機應用系統和仿真器共用一塊單片機芯片,當在開發系統上通過在線仿真器調試單片機應用系統時,就像使用應用系統中真過在線仿真器調試單片機應用系統時,就像使用應用系統中真實的單片機一樣,稱之為實的單片機一樣,稱之為“仿真仿真”。 2 2、調試功能、調試功能 開發系統對目標系統硬、軟件的調試功能強弱直接影響到開開發系統對目標系統硬、軟件的調試功能強弱直接影響到開發的效率。性能優良的單
54、片機開發系統應具有下列調試功能。發的效率。性能優良的單片機開發系統應具有下列調試功能。 (1 1)運行控制功能)運行控制功能 開發系統為了檢查程序運行的結果,必開發系統為了檢查程序運行的結果,必須對存在的硬件故障和軟件錯誤進行定位。須對存在的硬件故障和軟件錯誤進行定位。 1 1)單步運行:單步運行命令把函數和函數調用當作一個實)單步運行:單步運行命令把函數和函數調用當作一個實體來看待,必要時可以跳過函數。體來看待,必要時可以跳過函數。 2 2)斷點設置:在調試程序的過程中,設置一些斷點更好地)斷點設置:在調試程序的過程中,設置一些斷點更好地幫助用戶分析程序的運行情況,有效地提高工作效率。幫助用
55、戶分析程序的運行情況,有效地提高工作效率。 3 3)全速運行:能使)全速運行:能使CPUCPU從指定地址開始連續地全速運行目標從指定地址開始連續地全速運行目標程序。程序。 4 4)單片跟蹤:類似單步運行過程,但可以跟蹤到子程序中)單片跟蹤:類似單步運行過程,但可以跟蹤到子程序中運行。運行。 (2 2)目標系統狀態的讀出修改功能)目標系統狀態的讀出修改功能 當當CPUCPU停止執行目標系統的程序后,允許用戶方便地讀出或停止執行目標系統的程序后,允許用戶方便地讀出或修改目標系統資源的狀態,以便檢查程序運行的結果、設置斷修改目標系統資源的狀態,以便檢查程序運行的結果、設置斷點條件以及設置程序的初始參
56、數。可供用戶讀出點條件以及設置程序的初始參數。可供用戶讀出/ /修改的目標系修改的目標系統資源包括:統資源包括: 1 1)程序存儲器(開發系統中的仿真)程序存儲器(開發系統中的仿真RAMRAM或目標機中的程序或目標機中的程序存儲器)。存儲器)。 2 2)單片機中片內資源(工作寄存器、特殊功能寄存器、)單片機中片內資源(工作寄存器、特殊功能寄存器、I/OI/O、RAMRAM數據存儲器、位單元)。數據存儲器、位單元)。 3 3)系統中擴展的數據存儲器、)系統中擴展的數據存儲器、I/OI/O口。口。 3 3、跟蹤功能、跟蹤功能 高性能的單片機開發系統具有邏輯分析儀的功能,在目標程高性能的單片機開發系
57、統具有邏輯分析儀的功能,在目標程序運行過程中,能跟蹤存儲目標系統總線上的地址、數據和控序運行過程中,能跟蹤存儲目標系統總線上的地址、數據和控制信號的狀態變化,跟蹤存儲器同步地記錄總線上的信息,用制信號的狀態變化,跟蹤存儲器同步地記錄總線上的信息,用戶可以根據需要顯示跟蹤存儲器搜集到的信息,也可以顯示某戶可以根據需要顯示跟蹤存儲器搜集到的信息,也可以顯示某一位總線狀態變化的波形。一位總線狀態變化的波形。 4 4、程序固化功能、程序固化功能 在單片機應用系統中常要擴展在單片機應用系統中常要擴展EPROMEPROM或或EEPROMEEPROM作為存放程序和作為存放程序和常數的程序存儲器,當應用程序尚
58、未調好之前可借用開發系統常數的程序存儲器,當應用程序尚未調好之前可借用開發系統的存儲器,當系統調試完畢,確認軟件無故障時,應把用戶應的存儲器,當系統調試完畢,確認軟件無故障時,應把用戶應用系統的程序固化到用系統的程序固化到EEPROMEEPROM中去,中去,EEPROMEEPROM寫入器就是完成這種寫入器就是完成這種項目的專用設備。項目的專用設備。2.4.2 2.4.2 單片機應用系統設計單片機應用系統設計 隨著單片機的普及,以及硬件技術的發展,用戶自行設計及隨著單片機的普及,以及硬件技術的發展,用戶自行設計及制作一個單片機系統,不論是從技術上還是從制作時間以及元制作一個單片機系統,不論是從技術上還是從制作時間以及元件供應方面看,都已經不成什么問題,所以現在設計一個新的件供應方面看,都已經不成什么問題,所以現在設計一個新的控制系統時,通常都是自行選擇元件,自行設計系統結構,即控制系統時,通常都是自行選擇元件,自行設計系統結構,即所謂從元件開始進行設計。從元件級
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論