80C51匯編語言程序設(shè)計(jì)_第1頁
80C51匯編語言程序設(shè)計(jì)_第2頁
80C51匯編語言程序設(shè)計(jì)_第3頁
80C51匯編語言程序設(shè)計(jì)_第4頁
80C51匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、80C51匯編語言程序設(shè)計(jì)第一頁,共44頁。了解匯編語言的特點(diǎn),明確程序設(shè)計(jì)的基本思路 熟悉匯編語言的語句結(jié)構(gòu),能正確書寫匯編語言程序 理解偽指令的功能,能正確使用80C51常用偽指令 熟悉幾種基本的程序結(jié)構(gòu) 能讀懂教材中的程序?qū)嵗?,學(xué)會(huì)編寫同等難度的應(yīng)用程序 本章學(xué)習(xí)目標(biāo) :2022/9/132第二頁,共44頁。 單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)和應(yīng)用程序構(gòu)成 匯編語言 高級(jí)語言 應(yīng)用程序設(shè)計(jì)方法 匯編語言,生成的目標(biāo)程序占內(nèi)存空間少、運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng),適合于編寫短小高速的程序。 高級(jí)語言,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡單,程序閱讀、修改和移植方便,適合于編寫復(fù)雜的程序。 2022/9/1

2、33第三頁,共44頁。4.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ì)2022/9/134第四頁,共44頁。三、流程描述 流程圖符號(hào) “超級(jí)循環(huán)”框架2022/9/135第五頁,共44頁。一、強(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ū)χ袛?/p>

3、子程序還有注意保護(hù)PSW的內(nèi)容2022/9/136第六頁,共44頁。4.1.3 匯編語言的語句格式標(biāo)號(hào)是指令的符號(hào)地址。通常作為轉(zhuǎn)移指令的操作數(shù)。非數(shù)字字符開頭,后跟字母、數(shù)字、“-”、“?”等不能用已定義的保留字(指令助記符、偽指令等)后跟英文冒號(hào)“:”Keil的匯編器A51可以識(shí)別的語句形式為:一、標(biāo)號(hào)(即符號(hào)地址)標(biāo)號(hào): 指令助記符 操作數(shù)1, 操作數(shù)2, 操作數(shù)3, ;注釋二、指令助記符是指令功能的英文縮寫,是匯編語句中唯一不能空缺的部分。2022/9/137第七頁,共44頁。操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。(1)數(shù)據(jù): 二進(jìn)制(B) 十進(jìn)制(D或省略D) 十六進(jìn)制(H),注意A

4、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)“;”開頭2022/9/138第八頁,共44頁。表4.12022/9/139第九頁,共44頁。程序設(shè)計(jì)實(shí)例引入實(shí)例假設(shè)一個(gè)班有50個(gè)人,共有3門選修課:計(jì)算機(jī)算法服裝CAD設(shè)計(jì)德語請(qǐng)找出:同時(shí)選了三門課的同學(xué);2022/9/1310第十頁,共44頁。問題的解決第一步 如何在計(jì)算機(jī)中表示選修某門課的所有同學(xué)5122325225392939412252939計(jì)算機(jī)算法服裝CAD設(shè)計(jì)德語選修這門人數(shù)學(xué)生的學(xué)號(hào)這個(gè)過程實(shí)際上是設(shè)計(jì)數(shù)據(jù)

5、結(jié)構(gòu)的問題2022/9/1311第十一頁,共44頁。問題的解決第二步 設(shè)計(jì)思路:找出同時(shí)選了三門課的同學(xué)這個(gè)過程實(shí)際上是設(shè)計(jì)算法的過程,既構(gòu)建模型。計(jì)算機(jī)算法CAD設(shè)計(jì)德語2022/9/1312第十二頁,共44頁。重復(fù)該過程第三步:設(shè)計(jì)流程找出第一個(gè)學(xué)生他選了德語嗎?他選了CAD嗎?記錄要找的人還有學(xué)生嗎?下一個(gè)學(xué)生NNYNYY結(jié)束他選計(jì)算機(jī)嗎?NY2022/9/1313第十三頁,共44頁。幾點(diǎn)啟示整體構(gòu)思;構(gòu)建整體流程框圖;結(jié)構(gòu)合理,流程清晰,簡單明了;局部模塊化;2022/9/1314第十四頁,共44頁。為什么要用流程圖?符合人進(jìn)行邏輯思考的習(xí)慣計(jì)算機(jī)從根本上來說,沒有任何邏輯性,所以,你

6、必須告訴它,先做什么,后做什么,遇到什么情況又該做什么,等等流程圖設(shè)計(jì)本身是一個(gè)逐步求精的過程,最終將任務(wù)劃分為若干能由機(jī)器指令實(shí)現(xiàn)的小模塊2022/9/1315第十五頁,共44頁。4.2.1 源程序的編輯和匯編一、源程序的編輯 ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END依據(jù)匯編語言規(guī)則用好偽指令符號(hào)不用中文SJMP $ 用于調(diào)試以 .ASM存盤4.2 源程序的編輯和匯編2022/9/1316第十六頁,共44頁。二、

7、源程序的匯編匯編源程序轉(zhuǎn)為目標(biāo)程序的過程叫匯編匯編通常在Windows下的集成開發(fā)環(huán)境完成用A51.EXE匯編生成.OBJ、.LIB及.LST三、目標(biāo)程序的連接.OBJ、.LIB經(jīng)BL51.EXE生成無擴(kuò)展名的絕對(duì)地址目標(biāo)文件絕對(duì)地址目標(biāo)文件可以用于仿真器調(diào)試調(diào)試無誤的目標(biāo)文件用OH51.EXE轉(zhuǎn)換為.HEX文件.HEX文件經(jīng)編程器寫入單片機(jī)存儲(chǔ)器2022/9/1317第十七頁,共44頁。 指令格式為: ORG nn 該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址, 它總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始。 式中, nn為 16 位地址, 匯編時(shí)nn確定了此語句后面第一條指令或第一個(gè)數(shù)據(jù)的地址,

8、此后的源程序或數(shù)據(jù)塊就依次連續(xù)存放在以后的地址內(nèi), 直到遇到另一個(gè)ORG指令為止。 4.2.2 偽指令偽指令,也叫匯編命令。僅對(duì)匯編過程進(jìn)行指示偽指令無對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼一、起始地址設(shè)定偽指令ORG2022/9/1318第十八頁,共44頁。 指令格式: 字符名稱 EQU 數(shù)字或匯編符號(hào) 例: PA8155 EQU 8001H ;即給標(biāo)號(hào)PA8155賦值為8001H 使指令中的字符名稱等價(jià)于給定的數(shù)字或匯編符號(hào)。 如果在程序中要多次使用到某一地址,由EQU指令將其賦值給一個(gè)字符名稱, 一旦需要對(duì)其進(jìn)行變動(dòng), 只要改變EQU命令后面的數(shù)字即可。 注意:由 EQU等值的字符名稱必須先賦值后使用,

9、 且在同一個(gè)源程序中, 同一個(gè)標(biāo)號(hào)只能賦值一次。二、結(jié)束匯編偽指令END2022/9/1319第十九頁,共44頁。 (3)定義字節(jié)指令DB 指令格式: 標(biāo)號(hào): DB 8位二進(jìn)制數(shù)表 功能: 把 8 位二進(jìn)制數(shù)表依次存入從標(biāo)號(hào)開始的連續(xù)的存儲(chǔ)單元中。 標(biāo)號(hào)區(qū)段可有可無,DB指令之后的 8 位二進(jìn)制數(shù)表是字節(jié)常數(shù)或用逗號(hào)隔開的字節(jié)串,也可以是用引號(hào)括起來的ASCII碼字符串 (一個(gè) ASCII字符相當(dāng)于一個(gè)字節(jié))。2022/9/1320第二十頁,共44頁。 (5)匯編結(jié)束指令END 指令格式: 標(biāo)號(hào): END 地址或標(biāo)號(hào) 格式中標(biāo)號(hào)以及END后面的地址或標(biāo)號(hào)可有可無。 功能: 提供匯編結(jié)束標(biāo)志。匯

10、編程序遇到 END后就停止匯編, 對(duì) END以后的語句不予處理, 故 END應(yīng)放在程序的結(jié)束處。 2022/9/1321第二十一頁,共44頁。4.2.2 偽指令偽指令,也叫匯編命令。僅對(duì)匯編過程進(jìn)行指示偽指令無對(duì)應(yīng)的單片機(jī)可執(zhí)行代碼一、起始地址設(shè)定偽指令ORGORG 表達(dá)式 該命令總是出現(xiàn)在源程序的開始位置。用來規(guī)定目標(biāo)程序的起始地址。表達(dá)式通常為十六進(jìn)制地址,例:ORG 8000HSTART:MOV A,#30H ORG可多次使用,但地址值的順序要由小到大END該偽指令位于源程序的最后一行。2022/9/1322第二十二頁,共44頁。三、定義字節(jié)數(shù)據(jù)表偽指令DB四、定義字?jǐn)?shù)據(jù)表偽指令DW10

11、00H 該命令用于從標(biāo)號(hào)指定的地址開始,連續(xù)存放字節(jié)數(shù)據(jù)表,常與查表指令MOVC配合使用。標(biāo)號(hào): DB 字節(jié)數(shù)據(jù)表如:ORG 1000HDB -2,-4,-6,8,10,181001H標(biāo)號(hào): DW 字?jǐn)?shù)據(jù)表 ORG 1400HDATA1:DW 324AH,3CH 1400H1401H1402H1403H大端模式2022/9/1323第二十三頁,共44頁。五、定義常值為符號(hào)名偽指令EQU該命令用來給標(biāo)號(hào)賦值。賦值以后,其標(biāo)號(hào)值在整個(gè)程序中有效。符號(hào)名 EQU 常值表達(dá)式 LEN EQU 10 SUM EQU 21HBLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLO

12、CK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A 符號(hào)名為:地址常數(shù)段名字符串寄存器名位名比較:標(biāo)號(hào)只能是地址2022/9/1324第二十四頁,共44頁。六、定義位地址為符號(hào)名偽指令BIT符號(hào)名 BIT 位地址表達(dá)式如:ST BIT P1.0 ;將P1.0的位地址賦給符號(hào)名STCF BIT 0D7H ;將位地址為D7H的位定義為符號(hào)名用BIT定義的“符號(hào)名”一經(jīng)定義便不能重新定義和改變其它一些偽指令參見教材表4.2 2022/9/1325第二十五頁,共44頁。4.3 基本程序結(jié)構(gòu)一般不影響標(biāo)志寄存器PSW的狀態(tài)。 傳送類指令有兩大類 一般傳送( MO

13、V ) 特殊傳送,如: MOVC MOVX PUSH、POP XCH、XCHD SWAP 2022/9/1326第二十六頁,共44頁。4.3.1 順序程序(無分支、無循環(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單元。2022/9/1327第二十七頁,共44頁。 ORG 0040HSTART:MOV A,21H ;取十位ASCII碼 ANL A,#0FH ;保留低半字節(jié) SWAP A ;移至高半字節(jié) MOV 20H,A ;存于20H單元 MOV A,22H

14、;取個(gè)位ASCII碼 ANL A,#0FH ;保留低半字節(jié) ORL 20H,A ;合并到結(jié)果單元 SJMP $ END2022/9/1328第二十八頁,共44頁。4.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并送回原單元。2022/9/1329第二十九頁,共44頁。 ORG 0040HSTART:MOV A,30H ;取x至累加器 JZ NEXT ;x = 0,轉(zhuǎn)NEXT ANL A,#80H ;否,保留符號(hào)位 JZ

15、 DONE ;x 0,轉(zhuǎn)結(jié)束 MOV A,#05H ;x 0處理 ADD A,30H MOV 30H,A ;X+05H送Y SJMP DONE NEXT:MOV 30H,#20H ;x = 0,20H送Y DONE:SJMP DONE END 2022/9/1330第三十頁,共44頁?!纠?-3】根據(jù)R7的內(nèi)容x(轉(zhuǎn)移序號(hào))轉(zhuǎn)向相應(yīng)的處理程序。設(shè)R7內(nèi)容為04,對(duì)應(yīng)的處理程序入口地址分別為PP0PP4。 2022/9/1331第三十一頁,共44頁。 START:MOV R7,#3 ;以轉(zhuǎn)移序號(hào)3為例 ACALL JPNUM AJMP START JPNUM:MOV DPTR,#TAB ;置分支

16、入口地址表首址 MOV A,R7 ADD A,R7 ;乘2,調(diào)整偏移量 MOV R3,A MOVC A,A+DPTR ;取地址高字節(jié),暫存于R3 XCH A,R3 INC A MOVC A,A+DPTR ;取地址低字節(jié) MOV DPL,A ;處理程序入口地址低8位送DPL MOV DPH,R3 ;處理程序入口地址高8位送DPH CLR A JMP A+DPTR 2022/9/1332第三十二頁,共44頁。 TAB:DW PP0 DW PP1 DW PP2 DW PP3 DW PP4 PP0:MOV 30H,#0 ;轉(zhuǎn)移序號(hào)為0時(shí),置功能號(hào)“0”于30H單元 RET PP1:MOV 30H,#1

17、 ;轉(zhuǎn)移序號(hào)為1時(shí),置功能號(hào)“1”于30H單元 RET PP2:MOV 30H,#2 ;轉(zhuǎn)移序號(hào)為2時(shí),置功能號(hào)“2”于30H單元 RET PP3:MOV 30H,#3 ;轉(zhuǎn)移序號(hào)為3時(shí),置功能號(hào)“3”于30H單元 RET PP4:MOV 30H,#4 ;轉(zhuǎn)移序號(hào)為4時(shí),置功能號(hào)“4”于30H單元 RET 2022/9/1333第三十三頁,共44頁。4.3.3 循環(huán)程序(2種:先執(zhí)行,后判斷;先判斷,后執(zhí)行)【例4-4】將內(nèi)部RAM的30H至3FH單元初始化為00H。MAIN:MOV R0,#30H ;置初值 MOV A,#00H ; MOV R7,#16 ; LOOP:MOV R0,A ;循

18、環(huán)處理 INC R0 ; DJNZ R7,LOOP ;循環(huán)修改,判結(jié)束 SJMP $ ;結(jié)束處理2022/9/1334第三十四頁,共44頁。【例4-5】將內(nèi)部RAM起始地址為60H的數(shù)據(jù)串傳送到外部RAM中起始地址為1000H的存儲(chǔ)區(qū)域,直到發(fā)現(xiàn)$ 字符停止傳送。 MAIN:MOV R0,#60H ;置初值 MOV DPTR,#1000HLOOP0:MOV A,R0 ;取數(shù)據(jù) CJNE A,#24H,LOOP1 ;循環(huán)結(jié)束? SJMP DONE ;是LOOP1:MOVX DPTR,A ;循環(huán)處理 INC R0 ;循環(huán)修改 INC DPTR SJMP LOOP0 ;繼續(xù)循環(huán) DONE:SJMP

19、DONE ;結(jié)束處理2022/9/1335第三十五頁,共44頁。4.4 子程序及其調(diào)用 完成通用功能、反復(fù)使用的程序設(shè)計(jì)成子程序。使應(yīng)用程序結(jié)構(gòu)清晰緊湊,便于閱讀和調(diào)試 執(zhí)行要由其它程序來調(diào)用,執(zhí)行完后要返回到調(diào)用程序 結(jié)構(gòu)上仍然采用一般程序的3種結(jié)構(gòu) 調(diào)用時(shí)注意:一是現(xiàn)場(chǎng)的保護(hù)和恢復(fù);二是主程序與子程序間的參數(shù)傳遞。2022/9/1336第三十六頁,共44頁。4.4.1 現(xiàn)場(chǎng)保護(hù)與恢復(fù)一、在主程序中實(shí)現(xiàn)(結(jié)構(gòu)靈活) PUSH PSW ;保護(hù)現(xiàn)場(chǎng)( 含當(dāng)前工作寄存器組號(hào))PUSH ACC ;PUSH B ;MOV PSW,#10H ;切換當(dāng)前工作寄存器組LCALL addr16 ;子程序調(diào)用,

20、 POP B ;恢復(fù)現(xiàn)場(chǎng)POP ACC ;POP PSW ;含當(dāng)前工作寄存器組切換2022/9/1337第三十七頁,共44頁。二、在子程序中實(shí)現(xiàn)(程序規(guī)范、清晰)SUB1:PUSH PSW ;保護(hù)現(xiàn)場(chǎng)( 含當(dāng)前工作寄存器組號(hào)) PUSH ACC ; PUSH B ; MOV PSW,#10H ;切換當(dāng)前工作寄存器組 POP B ;恢復(fù)現(xiàn)場(chǎng) POP ACC ; POP PSW ;內(nèi)含當(dāng)前工作寄存器組切換 RET2022/9/1338第三十八頁,共44頁。主程序與子程序的關(guān)系 子程序SUB 主程序MAIN返回 LCALL SUB 調(diào)用子程序子程序入口地址RET2022/9/1339第三十九頁,共4

21、4頁。4.4.2 參數(shù)傳遞一、利用累加器或寄存器(簡單、快速,但參數(shù)個(gè)數(shù)不多)【例4-6】實(shí)現(xiàn)兩個(gè)8位的十六進(jìn)制無符號(hào)數(shù)求和的子程序。SADD:MOV A,R3 ;取加數(shù)(在R3中) CLR C ADD A,R4 ;被加數(shù)(在R4中)加A JC PP1 MOV R3,#00H ;結(jié)果小于255時(shí),高字節(jié)R3內(nèi)容為00H SJMP PP2 PP1:MOV R3,#01H ;結(jié)果大于255時(shí),高字節(jié)R3內(nèi)容為01H PP2:MOV R4,A ;結(jié)果的低字節(jié)在R4中 RET入口:(R3)=加數(shù); (R4)=被加數(shù)。出口:(R3)=和的高字節(jié); (R4)=和的低字節(jié)。2022/9/1340第四十頁,共44頁。二、利用存儲(chǔ)器(個(gè)數(shù)多,用R0或R1及DPTR為參數(shù)表指針)【例4-7】將內(nèi)部RAM 中兩個(gè)4字節(jié)無符號(hào)整數(shù)相加,和的高字節(jié)由R0指向。數(shù)據(jù)采用大端模式存儲(chǔ)。入口:(R0)=加數(shù)低字節(jié)地址; (R1)=被加數(shù)低字節(jié)地址。出口:(R0)=和的高字節(jié)起始地址。 NADD:MOV R7,#4 ;字節(jié)數(shù)4送計(jì)數(shù)器 CLR C ;NADD1:MOV A,R0 ;利用指針,取加數(shù)低字節(jié) ADDC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論