《微處理器與接口技術》課件第9章 80C51程序設計_第1頁
《微處理器與接口技術》課件第9章 80C51程序設計_第2頁
《微處理器與接口技術》課件第9章 80C51程序設計_第3頁
《微處理器與接口技術》課件第9章 80C51程序設計_第4頁
《微處理器與接口技術》課件第9章 80C51程序設計_第5頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

9.1匯編語言的語句格式非數字字符開頭,后跟字母、數字、“-”、“?”等不能用已定義的保留字(指令助記符、偽指令等)后跟英文冒號“:”Keil的匯編器A51可以識別的語句形式為:標號(即符號地址)[標號:]指令助記符

[操作數1,][操作數2,][操作數3,][;注釋]指令助記符是指令功能的英文縮寫。數據:二進制(B)十進制(D或省略D)十六進制(H),注意A~F開頭時要加“0”ASCII碼,如‘A’,‘1245’符號:符號名、標號或“$”(PC的當前值)表達式:由運算符和數據構成(見表4.1)操作數注釋英文分號“;”開頭9.2偽指令偽指令,也叫匯編命令。僅對匯編過程進行指示偽指令無對應的單片機可執行代碼起始地址設定偽指令ORGORG表達式表達式通常為十六進制地址,例:

ORG2000HSTART:MOVA,#20H

…ORG可多次使用,但地址值的順序要由小到大結束匯編偽指令ENDEND該偽指令位于源程序的最后一行。定義字節數據表偽指令DB定義字數據表偽指令DW[標號:]DB字節數據表如:DB 30H,2*3,‘A’,-2[標號:]DW字數據表ORG2000HDATA1:DW1234H,56H

…則匯編后,(2000H)=12H,(2001)=34H,(2002H)=00H,(2003H)=56H定義常值為符號名偽指令EQU符號名EQU常值表達式符號名為:地址常數段名字符串寄存器名位名比較:標號只能是地址定義位地址為符號名偽指令BIT符號名BIT位地址表達式如:STBITP1.0;將P1.0的位地址賦給符號名STCFBIT0D7H;將位地址為D7H的位定義為符號名用BIT定義的“符號名”一經定義便不能重新定義和改變其它一些偽指令參見教材表4.29.3

80C51匯編語言設計步驟源程序的編輯依據匯編語言規則用好偽指令符號不用中文SJMP$

用于調試以.ASM存盤源程序的匯編匯編源程序轉為目標程序的過程叫匯編匯編通常在Windows下的集成開發環境完成用A51.EXE匯編生成.OBJ、.LIB及.LST目標程序的連接.OBJ、.LIB經BL51.EXE生成無擴展名的絕對地址目標文件絕對地址目標文件可以用于仿真器調試調試無誤的目標文件用OH51.EXE轉換為.HEX文件.HEX文件經編程器寫入單片機存儲器1順序程序(無分支、無循環)9.4

80C51匯編語言程序結構【例】設存放在RAM的50H單元的兩個BCD十進制數拆開并轉換成相應的ASCII碼,并分別存入兩個RAM單元中。 MOV A,50H ;將兩個BCD碼放入A MOV R1,#52H ;(R1)52H MOV @R1,#00H ;52H單元內容清0 XCHD A,@R1 ;將低位BCD碼送入52H單元 ORL 52H,#30H ;將低位BCD碼轉換為ASCII碼 SWAP A ;高位BCD碼交換到低4位 ORL A,#30H ;將高位BCD碼轉換為ASCII碼 MOV 51H,A ;高位數存入51H單元,即按照 ;字數據的大端模式存儲2分支程序(單分支、雙分支、多分支)【例】設變量x以補碼的形式存放在片內RAM的30H單元,變量y與x的關系是:當x大于0時,y=x;當x=0時,y=20H;當x小于0時,y=x+5。編制程序,根據x的大小求y并送回原單元。

ORG0040HSTART:MOVA,30H;取x至累加器

JZNEXT;x=0,轉NEXTANLA,#80H;否,保留符號位

JZDONE;x>0,轉結束

MOVA,#05H;x<0處理

ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND【例】根據R7的內容x(轉移序號)轉向相應的處理程序。設R7內容為0~4,對應的處理程序入口地址分別為PP0~PP4。

START:MOVR7,#3;以轉移序號3為例

ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址

MOVA,R7

ADDA,R7;乘2,調整偏移量

MOVR3,AMOVCA,@A+DPTR;取地址高字節,暫存于R3XCHA,R3INCAMOVCA,@A+DPTR;取地址低字節

MOVDPL,A;處理程序入口地址低8位送DPLMOVDPH,R3;處理程序入口地址高8位送DPHCLRA

JMP@A+DPTR

2024/3/19TAB:DWPP0DWPP1DWPP2

DWPP3DWPP4PP0:MOV30H,#0;轉移序號為0時,置功能號“0”于30H單元

RETPP1:MOV30H,#1;轉移序號為1時,置功能號“1”于30H單元

RETPP2:MOV30H,#2;轉移序號為2時,置功能號“2”于30H單元

RET

PP3:MOV30H,#3;轉移序號為3時,置功能號“3”于30H單元

RETPP4:MOV30H,#4;轉移序號為4時,置功能號“4”于30H單元

RET

3循環程序(2種:先執行,后判斷;先判斷,后執行)【例】將內部RAM的50H至5FH單元初始化為00H。MAIN:MOVR0,#50H;置初值

MOVA,#00H;MOVR3,#16;LOOP:MOV@R0,A;循環處理

INCR0;DJNZR3,LOOP;循環修改,判結束

SJMP$;結束處理【例】把內部RAM以BUFFER開始的區域存有一個字符串,其最后一個字符為“$”(ASCII碼為24H),統計該字符串的字符數,并將結果存入NUM單元。

CLR A ;用A來計數,先清0

MOV R1,#BUFFER ;將首地址送R1LOOP0: CJNE @R1,24H,LOOP1

;與“$”比較,不等轉移 SJMP LOOP2 ;遇到“$”,結束循環LOOP1: INC A ;計數加1 INC R0 ;修改地址指針 SJMP LOOP0LOOP2: INC A ;字符總個數計入$字符 MOV NUM,A ;存入結果4子程序完成通用功能、反復使用的程序設計成子程序。使應用程序結構清晰緊湊,便于閱讀和調試

執行要由其它程序來調用,執行完后要返回到調用程序

結構上仍然采用一般程序的3種結構調用時注意:一是現場的保護和恢復;二是主程序與子程序間的參數傳遞。

現場保護與恢復在主程序中實現(結構靈活)PUSHPSW;保護現場(含當前工作寄存器組號)PUSHACC;PUSHB;MOVPSW,#10H;切換當前工作寄存器組LCALLaddr16;子程序調用,POPB;恢復現場POPACC;POPPSW;含當前工作寄存器組切換在子程序中實現(程序規范、清晰)SUB1:PUSHPSW;保護現場(含當前工作寄存器組號)

PUSHACC;PUSHB;MOVPSW,#10H;切換當前工作寄存器組

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論