版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
了解匯編語(yǔ)言的特點(diǎn),明確程序設(shè)計(jì)的基本思路熟悉匯編語(yǔ)言的語(yǔ)句結(jié)構(gòu),能正確書寫匯編語(yǔ)言程序理解偽指令的功能,能正確使用80C51常用偽指令熟悉幾種基本的程序結(jié)構(gòu)能讀懂教材中的程序?qū)嵗?,學(xué)會(huì)編寫同等難度的應(yīng)用程序本章學(xué)習(xí)目標(biāo):2023/7/201
單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)和應(yīng)用程序構(gòu)成匯編語(yǔ)言高級(jí)語(yǔ)言
應(yīng)用程序設(shè)計(jì)方法
匯編語(yǔ)言,生成的目標(biāo)程序占內(nèi)存空間少、運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng),適合于編寫短小高速的程序。
高級(jí)語(yǔ)言,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡(jiǎn)單,程序閱讀、修改和移植方便,適合于編寫復(fù)雜的程序。2023/7/2024.1程序編制的方法和技巧4.1.1程序編制的步驟明確任務(wù):功能要求、技術(shù)指標(biāo)運(yùn)行環(huán)境調(diào)研一、任務(wù)分析將實(shí)際問題轉(zhuǎn)化為計(jì)算機(jī)處理的程序算法算法比較與優(yōu)化(內(nèi)存需求與運(yùn)行速度)二、算法設(shè)計(jì)2023/7/203三、流程描述
流程圖符號(hào)“超級(jí)循環(huán)”框架2023/7/204一、強(qiáng)化模塊觀念使程序占用空間減少、結(jié)構(gòu)清晰注意循環(huán)初值和結(jié)束條件,避免“死機(jī)”現(xiàn)象子程序的現(xiàn)場(chǎng)保護(hù)(注意棧平衡、寄存器內(nèi)容)程序模塊(主程序模塊、各種子程序模塊)模塊化優(yōu)點(diǎn):分塊設(shè)計(jì)、便于閱讀、調(diào)試方便4.1.2程序編制的方法和技巧二、采用循環(huán)和子程序?qū)χ袛嘧映绦蜻€有注意保護(hù)PSW的內(nèi)容2023/7/2054.1.3匯編語(yǔ)言的語(yǔ)句格式標(biāo)號(hào)是指令的符號(hào)地址。通常作為轉(zhuǎn)移指令的操作數(shù)。非數(shù)字字符開頭,后跟字母、數(shù)字、“-”、“?”等不能用已定義的保留字(指令助記符、偽指令等)后跟英文冒號(hào)“:”Keil的匯編器A51可以識(shí)別的語(yǔ)句形式為:一、標(biāo)號(hào)(即符號(hào)地址)[標(biāo)號(hào):]指令助記符
[操作數(shù)1,][操作數(shù)2,][操作數(shù)3,][;注釋]二、指令助記符是指令功能的英文縮寫,是匯編語(yǔ)句中唯一不能空缺的部分。
2023/7/206操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。(1)數(shù)據(jù):二進(jìn)制(B)十進(jìn)制(D或省略D)十六進(jìn)制(H),注意A~F開頭時(shí)要加“0”ASCII碼,如‘A’,‘1245’(2)符號(hào):符號(hào)名、標(biāo)號(hào)或“$”(PC的當(dāng)前值)(3)表達(dá)式:由運(yùn)算符和數(shù)據(jù)構(gòu)成(見表4.1)三、操作數(shù)四、注釋英文分號(hào)“;”開頭2023/7/207表4.12023/7/208程序設(shè)計(jì)實(shí)例引入實(shí)例假設(shè)一個(gè)班有50個(gè)人,共有3門選修課:計(jì)算機(jī)算法服裝CAD設(shè)計(jì)德語(yǔ)請(qǐng)找出:同時(shí)選了三門課的同學(xué);2023/7/209問題的解決第一步
如何在計(jì)算機(jī)中表示選修某門課的所有同學(xué)5122325225392939412252939計(jì)算機(jī)算法服裝CAD設(shè)計(jì)德語(yǔ)選修這門人數(shù)學(xué)生的學(xué)號(hào)這個(gè)過程實(shí)際上是設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的問題2023/7/2010問題的解決第二步設(shè)計(jì)思路:找出同時(shí)選了三門課的同學(xué)這個(gè)過程實(shí)際上是設(shè)計(jì)算法的過程,既構(gòu)建模型。計(jì)算機(jī)算法CAD設(shè)計(jì)德語(yǔ)2023/7/2011重復(fù)該過程第三步:設(shè)計(jì)流程找出第一個(gè)學(xué)生他選了德語(yǔ)嗎?他選了CAD嗎?記錄要找的人還有學(xué)生嗎?下一個(gè)學(xué)生NNYNYY結(jié)束他選計(jì)算機(jī)嗎?NY2023/7/2012幾點(diǎn)啟示整體構(gòu)思;構(gòu)建整體流程框圖;結(jié)構(gòu)合理,流程清晰,簡(jiǎn)單明了;局部模塊化;2023/7/2013為什么要用流程圖?符合人進(jìn)行邏輯思考的習(xí)慣計(jì)算機(jī)從根本上來(lái)說(shuō),沒有任何邏輯性,所以,你必須告訴它,先做什么,后做什么,遇到什么情況又該做什么,等等流程圖設(shè)計(jì)本身是一個(gè)逐步求精的過程,最終將任務(wù)劃分為若干能由機(jī)器指令實(shí)現(xiàn)的小模塊2023/7/20144.2.1源程序的編輯和匯編一、源程序的編輯
ORG0000HLJMPMAIN
ORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$
END依據(jù)匯編語(yǔ)言規(guī)則用好偽指令符號(hào)不用中文SJMP$
用于調(diào)試以.ASM存盤4.2源程序的編輯和匯編2023/7/2015二、源程序的匯編匯編源程序轉(zhuǎn)為目標(biāo)程序的過程叫匯編匯編通常在Windows下的集成開發(fā)環(huán)境完成用A51.EXE匯編生成.OBJ、.LIB及.LST三、目標(biāo)程序的連接.OBJ、.LIB經(jīng)BL51.EXE生成無(wú)擴(kuò)展名的絕對(duì)地址目標(biāo)文件絕對(duì)地址目標(biāo)文件可以用于仿真器調(diào)試調(diào)試無(wú)誤的目標(biāo)文件用OH51.EXE轉(zhuǎn)換為.HEX文件.HEX文件經(jīng)編程器寫入單片機(jī)存儲(chǔ)器2023/7/2016
指令格式為:ORGnn該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址,它總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始。式中,nn為16位地址,匯編時(shí)nn確定了此語(yǔ)句后面第一條指令或第一個(gè)數(shù)據(jù)的地址,此后的源程序或數(shù)據(jù)塊就依次連續(xù)存放在以后的地址內(nèi),直到遇到另一個(gè)ORG指令為止。4.2.2偽指令偽指令,也叫匯編命令。僅對(duì)匯編過程進(jìn)行指示偽指令無(wú)對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼一、起始地址設(shè)定偽指令ORG2023/7/2017
指令格式:字符名稱EQU數(shù)字或匯編符號(hào)例:PA8155EQU8001H;即給標(biāo)號(hào)PA8155賦值為8001H使指令中的字符名稱等價(jià)于給定的數(shù)字或匯編符號(hào)。如果在程序中要多次使用到某一地址,由EQU指令將其賦值給一個(gè)字符名稱,一旦需要對(duì)其進(jìn)行變動(dòng),只要改變EQU命令后面的數(shù)字即可。注意:由EQU等值的字符名稱必須先賦值后使用,且在同一個(gè)源程序中,同一個(gè)標(biāo)號(hào)只能賦值一次。二、結(jié)束匯編偽指令END2023/7/2018
(3)定義字節(jié)指令DB
指令格式: [標(biāo)號(hào):]DB8位二進(jìn)制數(shù)表
功能:把8位二進(jìn)制數(shù)表依次存入從標(biāo)號(hào)開始的連續(xù)的存儲(chǔ)單元中。標(biāo)號(hào)區(qū)段可有可無(wú),DB指令之后的8位二進(jìn)制數(shù)表是字節(jié)常數(shù)或用逗號(hào)隔開的字節(jié)串,也可以是用引號(hào)括起來(lái)的ASCII碼字符串(一個(gè)ASCII字符相當(dāng)于一個(gè)字節(jié))。2023/7/2019(5)匯編結(jié)束指令END
指令格式:[標(biāo)號(hào):]END地址或標(biāo)號(hào)格式中標(biāo)號(hào)以及END后面的地址或標(biāo)號(hào)可有可無(wú)。功能:提供匯編結(jié)束標(biāo)志。匯編程序遇到END后就停止匯編,對(duì)END以后的語(yǔ)句不予處理,故END應(yīng)放在程序的結(jié)束處。2023/7/20204.2.2偽指令偽指令,也叫匯編命令。僅對(duì)匯編過程進(jìn)行指示偽指令無(wú)對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼一、起始地址設(shè)定偽指令ORGORG表達(dá)式該命令總是出現(xiàn)在源程序的開始位置。用來(lái)規(guī)定目標(biāo)程序的起始地址。表達(dá)式通常為十六進(jìn)制地址,例:ORG8000HSTART:MOV
A,#30H……ORG可多次使用,但地址值的順序要由小到大END該偽指令位于源程序的最后一行。2023/7/2021三、定義字節(jié)數(shù)據(jù)表偽指令DB四、定義字?jǐn)?shù)據(jù)表偽指令DW1000H
該命令用于從標(biāo)號(hào)指定的地址開始,連續(xù)存放字節(jié)數(shù)據(jù)表,常與查表指令MOVC配合使用。[標(biāo)號(hào):]DB字節(jié)數(shù)據(jù)表如:ORG1000HDB-2,-4,-6,8,10,181001H[標(biāo)號(hào):]DW字?jǐn)?shù)據(jù)表ORG1400HDATA1:DW324AH,3CH……1400H1401H1402H1403H大端模式2023/7/2022五、定義常值為符號(hào)名偽指令EQU該命令用來(lái)給標(biāo)號(hào)賦值。賦值以后,其標(biāo)號(hào)值在整個(gè)程序中有效。符號(hào)名EQU常值表達(dá)式
LEN
EQU10
SUM
EQU21HBLOCK
EQU22HCLRAMOVR7,#LENMOVR0,#BLOCKLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOVSUM,A符號(hào)名為:地址常數(shù)段名字符串寄存器名位名比較:標(biāo)號(hào)只能是地址2023/7/2023六、定義位地址為符號(hào)名偽指令BIT符號(hào)名BIT位地址表達(dá)式如:STBITP1.0;將P1.0的位地址賦給符號(hào)名STCFBIT0D7H;將位地址為D7H的位定義為符號(hào)名用BIT定義的“符號(hào)名”一經(jīng)定義便不能重新定義和改變其它一些偽指令參見教材表4.22023/7/20244.3基本程序結(jié)構(gòu)一般不影響標(biāo)志寄存器PSW的狀態(tài)。傳送類指令有兩大類
一般傳送(MOV)特殊傳送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP
2023/7/20254.3.1順序程序(無(wú)分支、無(wú)循環(huán))4.3基本程序結(jié)構(gòu)【例4-1】片內(nèi)RAM的21H單元存放一個(gè)十進(jìn)制數(shù)據(jù)十位的ASCII碼,22H單元存放該數(shù)據(jù)個(gè)位的ASCII碼。編寫程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓縮BCD碼存放在20H單元。2023/7/2026ORG0040HSTART:MOVA,21H;取十位ASCII碼ANLA,#0FH;保留低半字節(jié)SWAPA;移至高半字節(jié)MOV20H,A;存于20H單元MOVA,22H;取個(gè)位ASCII碼ANLA,#0FH;保留低半字節(jié)ORL20H,A;合并到結(jié)果單元SJMP$END2023/7/20274.3.2分支程序(單分支、雙分支、多分支)【例4-2】設(shè)變量x以補(bǔ)碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當(dāng)x大于0時(shí),y=x;當(dāng)x=0時(shí),y=20H;當(dāng)x小于0時(shí),y=x+5。編制程序,根據(jù)x的大小求y并送回原單元。2023/7/2028
ORG0040HSTART:MOVA,30H;取x至累加器
JZNEXT;x=0,轉(zhuǎn)NEXTANLA,#80H;否,保留符號(hào)位
JZDONE;x>0,轉(zhuǎn)結(jié)束
MOVA,#05H;x<0處理
ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND2023/7/2029【例4-3】根據(jù)R7的內(nèi)容x(轉(zhuǎn)移序號(hào))轉(zhuǎn)向相應(yīng)的處理程序。設(shè)R7內(nèi)容為0~4,對(duì)應(yīng)的處理程序入口地址分別為PP0~PP4。
2023/7/2030START:MOVR7,#3;以轉(zhuǎn)移序號(hào)3為例
ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址
MOVA,R7
ADDA,R7;乘2,調(diào)整偏移量
MOVR3,AMOVCA,@A+DPTR;取地址高字節(jié),暫存于R3XCHA,R3INCAMOVCA,@A+DPTR;取地址低字節(jié)
MOVDPL,A;處理程序入口地址低8位送DPLMOVDPH,R3;處理程序入口地址高8位送DPHCLRA
JMP@A+DPTR
2023/7/2031TAB:DWPP0DWPP1DWPP2
DWPP3DWPP4PP0:MOV30H,#0;轉(zhuǎn)移序號(hào)為0時(shí),置功能號(hào)“0”于30H單元
RETPP1:MOV30H,#1;轉(zhuǎn)移序號(hào)為1時(shí),置功能號(hào)“1”于30H單元
RETPP2:MOV30H,#2;轉(zhuǎn)移序號(hào)為2時(shí),置功能號(hào)“2”于30H單元
RET
PP3:MOV30H,#3;轉(zhuǎn)移序號(hào)為3時(shí),置功能號(hào)“3”于30H單元
RETPP4:MOV30H,#4;轉(zhuǎn)移序號(hào)為4時(shí),置功能號(hào)“4”于30H單元
RET 2023/7/20324.3.3循環(huán)程序(2種:先執(zhí)行,后判斷;先判斷,后執(zhí)行)【例4-4】將內(nèi)部RAM的30H至3FH單元初始化為00H。MAIN:MOVR0,#30H;置初值
MOVA,#00H;MOVR7,#16;LOOP:MOV@R0,A;循環(huán)處理
INCR0;DJNZR7,LOOP;循環(huán)修改,判結(jié)束
SJMP$;結(jié)束處理2023/7/2033【例4-5】將內(nèi)部RAM起始地址為60H的數(shù)據(jù)串傳送到外部RAM中起始地址為1000H的存儲(chǔ)區(qū)域,直到發(fā)現(xiàn)‘$’字符停止傳送。MAIN:MOVR0,#60H;置初值
MOVDPTR,#1000HLOOP0:MOVA,@R0;取數(shù)據(jù)CJNEA,#24H,LOOP1;循環(huán)結(jié)束?SJMPDONE;是LOOP1:MOVX@DPTR,A;循環(huán)處理
INCR0;循環(huán)修改
INCDPTRSJMPLOOP0;繼續(xù)循環(huán)DONE:SJMPDONE;結(jié)束處理2023/7/20344.4子程序及其調(diào)用完成通用功能、反復(fù)使用的程序設(shè)計(jì)成子程序。使應(yīng)用程序結(jié)構(gòu)清晰緊湊,便于閱讀和調(diào)試
執(zhí)行要由其它程序來(lái)調(diào)用,執(zhí)行完后要返回到調(diào)用程序
結(jié)構(gòu)上仍然采用一般程序的3種結(jié)構(gòu)調(diào)用時(shí)注意:一是現(xiàn)場(chǎng)的保護(hù)和恢復(fù);二是主程序與子程序間的參數(shù)傳遞。2023/7/20354.4.1現(xiàn)場(chǎng)保護(hù)與恢復(fù)一、在主程序中實(shí)現(xiàn)(結(jié)構(gòu)靈活)PUSHPSW;保護(hù)現(xiàn)場(chǎng)(含當(dāng)前工作寄存器組號(hào))PUSHACC;PUSHB;MOVPSW,#10H;切換當(dāng)前工作寄存器組LCALLaddr16;子程序調(diào)用,POPB;恢復(fù)現(xiàn)場(chǎng)POPACC;POPPSW;含當(dāng)前工作寄存器組切換2023/7/2036二、在子程序中實(shí)現(xiàn)(程序規(guī)范、清晰)SUB1:PUSHPSW;保護(hù)現(xiàn)場(chǎng)(含當(dāng)前工作寄存器組號(hào))
PUSHACC;PUSHB;MOVPSW,#10H;切換當(dāng)前工作寄存器組
……POPB;恢復(fù)現(xiàn)場(chǎng)
POPACC;POPPSW;內(nèi)含當(dāng)前工作寄存器組切換
RET2023/7/2037主程序與子程序的關(guān)系子程序SUB主程序MAIN返回LCALLSUB調(diào)用子程序子程序入口地址RET2023/7/20384.4.2參數(shù)傳遞一、利用累加器或寄存器(簡(jiǎn)單、快速,但參數(shù)個(gè)數(shù)不多)【例4-6】實(shí)現(xiàn)兩個(gè)8位的十六進(jìn)制無(wú)符號(hào)數(shù)求和的子程序。SADD:MOVA,R3;取加數(shù)(在R3中)
CLRCADDA,R4;被加數(shù)(在R4中)加AJCPP1MOVR3,#00H;結(jié)果小于255時(shí),高字節(jié)R3內(nèi)容為00HSJMPPP2PP1:MOVR3,#01H;結(jié)果大于255時(shí),高字節(jié)R3內(nèi)容為01HPP2:MOVR4,A;結(jié)果的低字節(jié)在R4中
RET入口:(R3)=加數(shù);(R4)=被加數(shù)。出口:(R3)=和的高字節(jié);(R4)=和的低字節(jié)。2023/7/2039二、利用存儲(chǔ)器(個(gè)數(shù)多,用R0或R1及DPTR為參數(shù)表指針)【例4-7】將內(nèi)部RAM中兩個(gè)4字節(jié)無(wú)符號(hào)整數(shù)相加,和的高字節(jié)由R0指向。數(shù)據(jù)采用大端模式存儲(chǔ)。入口:(R0)=加數(shù)低字節(jié)地址;(R1)=被加數(shù)低字節(jié)地址。出口:(R0)=和的高字節(jié)起始地址。NADD:MOVR7,#4;字節(jié)數(shù)4送計(jì)數(shù)器
CLRC;NADD1:MOVA,@R0;利用指針,取加數(shù)低字節(jié)
ADDCA,@R1;利用指針,被加數(shù)低字節(jié)加AMOV@R0,A;DECR0DECR1DJNZR7,NADD1INCR0;調(diào)整指針,指向出口
RET2023/7/2040三、利用堆棧
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《傳感器與檢測(cè)技術(shù)》練習(xí)題集
- 【初中物理】光的折射單元測(cè)試(培優(yōu)卷)2024-2025學(xué)年蘇科版物理八年級(jí)上冊(cè)
- 2023年標(biāo)準(zhǔn)員之基礎(chǔ)知識(shí)練習(xí)題(二)及答案
- 唐山-PEP-2024年11版小學(xué)三年級(jí)英語(yǔ)第1單元真題
- 2024年07版小學(xué)5年級(jí)上冊(cè)英語(yǔ)第二單元期末試卷
- 收納箱生產(chǎn)企業(yè)的賬務(wù)處理-記賬實(shí)操
- 中建信息化管理手冊(cè)
- 強(qiáng)化研究-團(tuán)結(jié)協(xié)作-共創(chuàng)佳績(jī)
- 經(jīng)濟(jì)數(shù)學(xué) 課件 ch01 函數(shù)、極限及其應(yīng)用
- 2024年高考語(yǔ)文二輪復(fù)習(xí):語(yǔ)言的表達(dá)效果類新題型(練習(xí))(解析版)
- 論柳永與李清照詞中的女性形象
- 雙胎妊娠 PPT課件
- 大氣物理學(xué)題庫(kù)
- 反家庭暴力法 精美(課堂PPT)
- 方陣問題教學(xué)設(shè)計(jì)_北京小學(xué)大興分校_臧燕萍
- 沙市中學(xué)李昌坤等高中化學(xué)競(jìng)賽輔導(dǎo)經(jīng)驗(yàn)淺談
- 計(jì)算機(jī)圖形學(xué)文獻(xiàn)綜述
- 話說(shuō)溫州計(jì)劃及其教案
- QC080000-2017標(biāo)準(zhǔn)講解培訓(xùn)教材
- 人教版四年級(jí)數(shù)學(xué)上冊(cè)《角的度量復(fù)習(xí)課》復(fù)習(xí)教案
- 通達(dá)OA基本功能及使用課件
評(píng)論
0/150
提交評(píng)論