




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
了解匯編語言的特點,明確程序設計的基本思路熟悉匯編語言的語句結構,能正確書寫匯編語言程序理解偽指令的功能,能正確使用80C51常用偽指令熟悉幾種基本的程序結構能讀懂教材中的程序實例,學會編寫同等難度的應用程序本章學習目標:2023/7/201
單片機應用系統由硬件系統和應用程序構成匯編語言高級語言
應用程序設計方法
匯編語言,生成的目標程序占內存空間少、運行速度快,具有效率高、實時性強,適合于編寫短小高速的程序。
高級語言,對系統的功能描述與實現簡單,程序閱讀、修改和移植方便,適合于編寫復雜的程序。2023/7/2024.1程序編制的方法和技巧4.1.1程序編制的步驟明確任務:功能要求、技術指標運行環境調研一、任務分析將實際問題轉化為計算機處理的程序算法算法比較與優化(內存需求與運行速度)二、算法設計2023/7/203三、流程描述
流程圖符號“超級循環”框架2023/7/204一、強化模塊觀念使程序占用空間減少、結構清晰注意循環初值和結束條件,避免“死機”現象子程序的現場保護(注意棧平衡、寄存器內容)程序模塊(主程序模塊、各種子程序模塊)模塊化優點:分塊設計、便于閱讀、調試方便4.1.2程序編制的方法和技巧二、采用循環和子程序對中斷子程序還有注意保護PSW的內容2023/7/2054.1.3匯編語言的語句格式標號是指令的符號地址。通常作為轉移指令的操作數。非數字字符開頭,后跟字母、數字、“-”、“?”等不能用已定義的保留字(指令助記符、偽指令等)后跟英文冒號“:”Keil的匯編器A51可以識別的語句形式為:一、標號(即符號地址)[標號:]指令助記符
[操作數1,][操作數2,][操作數3,][;注釋]二、指令助記符是指令功能的英文縮寫,是匯編語句中唯一不能空缺的部分。
2023/7/206操作數用于給指令的操作提供數據或地址。(1)數據:二進制(B)十進制(D或省略D)十六進制(H),注意A~F開頭時要加“0”ASCII碼,如‘A’,‘1245’(2)符號:符號名、標號或“$”(PC的當前值)(3)表達式:由運算符和數據構成(見表4.1)三、操作數四、注釋英文分號“;”開頭2023/7/207表4.12023/7/208程序設計實例引入實例假設一個班有50個人,共有3門選修課:計算機算法服裝CAD設計德語請找出:同時選了三門課的同學;2023/7/209問題的解決第一步
如何在計算機中表示選修某門課的所有同學5122325225392939412252939計算機算法服裝CAD設計德語選修這門人數學生的學號這個過程實際上是設計數據結構的問題2023/7/2010問題的解決第二步設計思路:找出同時選了三門課的同學這個過程實際上是設計算法的過程,既構建模型。計算機算法CAD設計德語2023/7/2011重復該過程第三步:設計流程找出第一個學生他選了德語嗎?他選了CAD嗎?記錄要找的人還有學生嗎?下一個學生NNYNYY結束他選計算機嗎?NY2023/7/2012幾點啟示整體構思;構建整體流程框圖;結構合理,流程清晰,簡單明了;局部模塊化;2023/7/2013為什么要用流程圖?符合人進行邏輯思考的習慣計算機從根本上來說,沒有任何邏輯性,所以,你必須告訴它,先做什么,后做什么,遇到什么情況又該做什么,等等流程圖設計本身是一個逐步求精的過程,最終將任務劃分為若干能由機器指令實現的小模塊2023/7/20144.2.1源程序的編輯和匯編一、源程序的編輯
ORG0000HLJMPMAIN
ORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$
END依據匯編語言規則用好偽指令符號不用中文SJMP$
用于調試以.ASM存盤4.2源程序的編輯和匯編2023/7/2015二、源程序的匯編匯編源程序轉為目標程序的過程叫匯編匯編通常在Windows下的集成開發環境完成用A51.EXE匯編生成.OBJ、.LIB及.LST三、目標程序的連接.OBJ、.LIB經BL51.EXE生成無擴展名的絕對地址目標文件絕對地址目標文件可以用于仿真器調試調試無誤的目標文件用OH51.EXE轉換為.HEX文件.HEX文件經編程器寫入單片機存儲器2023/7/2016
指令格式為:ORGnn該指令的作用是指明后面的程序或數據塊的起始地址,它總是出現在每段源程序或數據塊的開始。式中,nn為16位地址,匯編時nn確定了此語句后面第一條指令或第一個數據的地址,此后的源程序或數據塊就依次連續存放在以后的地址內,直到遇到另一個ORG指令為止。4.2.2偽指令偽指令,也叫匯編命令。僅對匯編過程進行指示偽指令無對應的單片機可執行代碼一、起始地址設定偽指令ORG2023/7/2017
指令格式:字符名稱EQU數字或匯編符號例:PA8155EQU8001H;即給標號PA8155賦值為8001H使指令中的字符名稱等價于給定的數字或匯編符號。如果在程序中要多次使用到某一地址,由EQU指令將其賦值給一個字符名稱,一旦需要對其進行變動,只要改變EQU命令后面的數字即可。注意:由EQU等值的字符名稱必須先賦值后使用,且在同一個源程序中,同一個標號只能賦值一次。二、結束匯編偽指令END2023/7/2018
(3)定義字節指令DB
指令格式: [標號:]DB8位二進制數表
功能:把8位二進制數表依次存入從標號開始的連續的存儲單元中。標號區段可有可無,DB指令之后的8位二進制數表是字節常數或用逗號隔開的字節串,也可以是用引號括起來的ASCII碼字符串(一個ASCII字符相當于一個字節)。2023/7/2019(5)匯編結束指令END
指令格式:[標號:]END地址或標號格式中標號以及END后面的地址或標號可有可無。功能:提供匯編結束標志。匯編程序遇到END后就停止匯編,對END以后的語句不予處理,故END應放在程序的結束處。2023/7/20204.2.2偽指令偽指令,也叫匯編命令。僅對匯編過程進行指示偽指令無對應的單片機可執行代碼一、起始地址設定偽指令ORGORG表達式該命令總是出現在源程序的開始位置。用來規定目標程序的起始地址。表達式通常為十六進制地址,例:ORG8000HSTART:MOV
A,#30H……ORG可多次使用,但地址值的順序要由小到大END該偽指令位于源程序的最后一行。2023/7/2021三、定義字節數據表偽指令DB四、定義字數據表偽指令DW1000H
該命令用于從標號指定的地址開始,連續存放字節數據表,常與查表指令MOVC配合使用。[標號:]DB字節數據表如:ORG1000HDB-2,-4,-6,8,10,181001H[標號:]DW字數據表ORG1400HDATA1:DW324AH,3CH……1400H1401H1402H1403H大端模式2023/7/2022五、定義常值為符號名偽指令EQU該命令用來給標號賦值。賦值以后,其標號值在整個程序中有效。符號名EQU常值表達式
LEN
EQU10
SUM
EQU21HBLOCK
EQU22HCLRAMOVR7,#LENMOVR0,#BLOCKLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOVSUM,A符號名為:地址常數段名字符串寄存器名位名比較:標號只能是地址2023/7/2023六、定義位地址為符號名偽指令BIT符號名BIT位地址表達式如:STBITP1.0;將P1.0的位地址賦給符號名STCFBIT0D7H;將位地址為D7H的位定義為符號名用BIT定義的“符號名”一經定義便不能重新定義和改變其它一些偽指令參見教材表4.22023/7/20244.3基本程序結構一般不影響標志寄存器PSW的狀態。傳送類指令有兩大類
一般傳送(MOV)特殊傳送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP
2023/7/20254.3.1順序程序(無分支、無循環)4.3基本程序結構【例4-1】片內RAM的21H單元存放一個十進制數據十位的ASCII碼,22H單元存放該數據個位的ASCII碼。編寫程序將該數據轉換成壓縮BCD碼存放在20H單元。2023/7/2026ORG0040HSTART:MOVA,21H;取十位ASCII碼ANLA,#0FH;保留低半字節SWAPA;移至高半字節MOV20H,A;存于20H單元MOVA,22H;取個位ASCII碼ANLA,#0FH;保留低半字節ORL20H,A;合并到結果單元SJMP$END2023/7/20274.3.2分支程序(單分支、雙分支、多分支)【例4-2】設變量x以補碼的形式存放在片內RAM的30H單元,變量y與x的關系是:當x大于0時,y=x;當x=0時,y=20H;當x小于0時,y=x+5。編制程序,根據x的大小求y并送回原單元。2023/7/2028
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:SJMPDONEEND2023/7/2029【例4-3】根據R7的內容x(轉移序號)轉向相應的處理程序。設R7內容為0~4,對應的處理程序入口地址分別為PP0~PP4。
2023/7/2030START: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
2023/7/2031TAB: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 2023/7/20324.3.3循環程序(2種:先執行,后判斷;先判斷,后執行)【例4-4】將內部RAM的30H至3FH單元初始化為00H。MAIN:MOVR0,#30H;置初值
MOVA,#00H;MOVR7,#16;LOOP:MOV@R0,A;循環處理
INCR0;DJNZR7,LOOP;循環修改,判結束
SJMP$;結束處理2023/7/2033【例4-5】將內部RAM起始地址為60H的數據串傳送到外部RAM中起始地址為1000H的存儲區域,直到發現‘$’字符停止傳送。MAIN:MOVR0,#60H;置初值
MOVDPTR,#1000HLOOP0:MOVA,@R0;取數據CJNEA,#24H,LOOP1;循環結束?SJMPDONE;是LOOP1:MOVX@DPTR,A;循環處理
INCR0;循環修改
INCDPTRSJMPLOOP0;繼續循環DONE:SJMPDONE;結束處理2023/7/20344.4子程序及其調用完成通用功能、反復使用的程序設計成子程序。使應用程序結構清晰緊湊,便于閱讀和調試
執行要由其它程序來調用,執行完后要返回到調用程序
結構上仍然采用一般程序的3種結構調用時注意:一是現場的保護和恢復;二是主程序與子程序間的參數傳遞。2023/7/20354.4.1現場保護與恢復一、在主程序中實現(結構靈活)PUSHPSW;保護現場(含當前工作寄存器組號)PUSHACC;PUSHB;MOVPSW,#10H;切換當前工作寄存器組LCALLaddr16;子程序調用,POPB;恢復現場POPACC;POPPSW;含當前工作寄存器組切換2023/7/2036二、在子程序中實現(程序規范、清晰)SUB1:PUSHPSW;保護現場(含當前工作寄存器組號)
PUSHACC;PUSHB;MOVPSW,#10H;切換當前工作寄存器組
……POPB;恢復現場
POPACC;POPPSW;內含當前工作寄存器組切換
RET2023/7/2037主程序與子程序的關系子程序SUB主程序MAIN返回LCALLSUB調用子程序子程序入口地址RET2023/7/20384.4.2參數傳遞一、利用累加器或寄存器(簡單、快速,但參數個數不多)【例4-6】實現兩個8位的十六進制無符號數求和的子程序。SADD:MOVA,R3;取加數(在R3中)
CLRCADDA,R4;被加數(在R4中)加AJCPP1MOVR3,#00H;結果小于255時,高字節R3內容為00HSJMPPP2PP1:MOVR3,#01H;結果大于255時,高字節R3內容為01HPP2:MOVR4,A;結果的低字節在R4中
RET入口:(R3)=加數;(R4)=被加數。出口:(R3)=和的高字節;(R4)=和的低字節。2023/7/2039二、利用存儲器(個數多,用R0或R1及DPTR為參數表指針)【例4-7】將內部RAM中兩個4字節無符號整數相加,和的高字節由R0指向。數據采用大端模式存儲。入口:(R0)=加數低字節地址;(R1)=被加數低字節地址。出口:(R0)=和的高字節起始地址。NADD:MOVR7,#4;字節數4送計數器
CLRC;NADD1:MOVA,@R0;利用指針,取加數低字節
ADDCA,@R1;利用指針,被加數低字節加AMOV@R0,A;DECR0DECR1DJNZR7,NADD1INCR0;調整指針,指向出口
RET2023/7/2040三、利用堆棧
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 檳榔主題班會課件
- 專科護理進修培訓體系
- 2025年中國水產專用微生態制劑市場調查研究報告
- 2025年中國廣電網絡器材及倉庫管理軟件市場調查研究報告
- 2025年中國分餾柱市場調查研究報告
- 心衰的循證護理
- 護理查對制度實施要點
- 檢驗員培訓技能課件模板
- 鎮痛藥藥物內容講解
- 2025至2030年中國高級硅橡膠杯墊行業發展研究報告
- 安保工作的多元化發展
- 中學生體育運動損傷的預防和處理
- 經皮內鏡下胃(空腸)造口術臨床應用中國專家共識(2024版)解讀
- 2025年浙江省高中學業水平考試語文試卷試題(含答案詳解)
- 《醫療器械召回管理辦法》培訓2024
- 圍術期肺部超聲的應用
- 英語導游服務能力(現場200問+)
- 中小學-珍愛生命 遠離毒品-課件
- 2024年四川省廣元市中考物理試題(含解析)
- 2023-2024學年江蘇省蘇州市高二下學期6月期末物理試題(解析版)
- 【高效備課】人教版七(上) 3.2 解一元一次方程(一)第1課時 合并同類項 教案
評論
0/150
提交評論