版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第 六 講 51單片機言程序設(shè)計1微機原理及應(yīng)用Principle and Applications of Micro-Computers教學目的:掌握MCS-51單片機匯編程序設(shè)計方法要求: 掌握MCS-51單片機匯編程序設(shè)計結(jié)構(gòu)和設(shè)計方法掌握程序設(shè)計的模塊化思路和分層設(shè)計思路;掌握如何使用高級語言訪問MCU的片上資源難點: 掌握程序設(shè)計的模塊化思路和分層設(shè)計思路 MCS-51單片機匯編程序的結(jié)構(gòu)單片機匯編程序的結(jié)構(gòu) MCS-51單片機匯編程序設(shè)計方法單片機匯編程序設(shè)計方法 例例1, 循環(huán)程序設(shè)計循環(huán)程序設(shè)計 包含的主要指令包含的主要指令: DJNZ 包含的主要包含的主要C語言:語言:for
2、 ;whiledo內(nèi)容匯編語言程序 定義定義匯編語言程序是多條指令陳述語句的有序組合匯編語言程序是多條指令陳述語句的有序組合, 并且是為并且是為了實現(xiàn)某個特定的控制目標和算法目的了實現(xiàn)某個特定的控制目標和算法目的特點指令的有序組合指令的有序組合為了特定的控制目標或算法目的為了特定的控制目標或算法目的從功能上看, 由下面幾部分組成啟動和初始化程序啟動和初始化程序(僅執(zhí)行一次僅執(zhí)行一次)主程序主程序(一個一個“死循環(huán)死循環(huán)”)子程序子程序(某些特定子功能的陳述單元某些特定子功能的陳述單元)和中斷程序和中斷程序一個簡單的匯編語言程序源碼(見p.60) 功能 定時定時(周期性地周期性地)將一個變量從將
3、一個變量從05H增加到增加到FFH, 之后再重復(fù)之后再重復(fù)該過程該過程 代碼見教材p.60的3.3.1節(jié)0100H 75815F MOV SP, #5FH ; 堆棧底部位于堆棧底部位于60H 存放指令碼存放指令碼的首地址的首地址指令碼指令碼指令指令(指令助記符和操指令助記符和操作碼作碼)指令注釋指令注釋2022-3-195定時(周期性地)將一個變量從05H增加到FFH, 之后再重復(fù)該過程ORG 0000HLJMP main_entry ; 啟動程序入口啟動程序入口ORG 0003HLJMP INT0_svr ; 外部中斷外部中斷0程序入口程序入口 ; 其它中斷程序入口其它中斷程序入口ORG 0
4、100Hmain_entry: ; 啟動程序和主程序啟動程序和主程序MOV SP, #57HMOV PSW, #00HLCALL init_8051 ; 初始化程序初始化程序main_loop:LCALL Task1 ; 子程序或子任務(wù)子程序或子任務(wù)LJMP main_loopTask1: END以一個跳轉(zhuǎn)語句開始以一個跳轉(zhuǎn)語句開始中斷程序的入口地址是固定的中斷程序的入口地址是固定的(簡單解釋中斷的響應(yīng)簡單解釋中斷的響應(yīng))討論幾個問題討論幾個問題:(1) 為什么首句是一個跳轉(zhuǎn)語句為什么首句是一個跳轉(zhuǎn)語句?(2) 幾個幾個ORG偽指令的作用是什么偽指令的作用是什么?(3) 如果沒有任何中斷程序如
5、果沒有任何中斷程序, 必須采必須采用這樣的程序結(jié)構(gòu)用這樣的程序結(jié)構(gòu)?2022-3-196定時(周期性地)將一個變量從05H增加到FFH, 之后再重復(fù)該過程counter DATA 30HInitValue EQU 5 ORG 000H LJMP main ORG 100Hmain: MOV sp,#5FH MOV PSW,#00H MOV A,#0AH LCALL delay MOV couner,#InitValueForeverRun: ORG 0200Hdelay: #define InitValue 5unsigned char Counter;void delay(unsigned
6、char times) unsigned char i,j; for (i=time;i0;i- -) for(j=100;j0;j+);main(void) delay(10); Counter=InitValue; while(1) delay(100);Counter+; if (Counter=0 xFF) Counet=InitValue; 程序存儲器中的代碼形態(tài)見教材見教材p.62圖圖3-1內(nèi)容 MCS-51單片機匯編程序的結(jié)構(gòu)單片機匯編程序的結(jié)構(gòu) MCS-51單片機匯編程序設(shè)計方法單片機匯編程序設(shè)計方法 例例1, 循環(huán)程序設(shè)計循環(huán)程序設(shè)計 包含的主要指令包含的主要指令: DJNZ
7、 包含的主要包含的主要C語言:語言:for ;whiledo匯編語言程序設(shè)計方法軟件功能分析, 根據(jù)功能合理劃分成若干模塊分別編寫下面程序模塊 根據(jù)資源根據(jù)資源, 確定堆棧確定堆棧, 寄存器組等初始位置寄存器組等初始位置, 編寫啟動程序編寫啟動程序 根據(jù)需要配置相關(guān)功能單元以及變量的初始狀態(tài)根據(jù)需要配置相關(guān)功能單元以及變量的初始狀態(tài), 編寫初始化程序編寫初始化程序 編寫硬件相關(guān)的驅(qū)動程序編寫硬件相關(guān)的驅(qū)動程序 編寫中斷程序編寫中斷程序 編寫功能模塊對應(yīng)的子程序編寫功能模塊對應(yīng)的子程序 根據(jù)各子功能模塊根據(jù)各子功能模塊(和任務(wù)和任務(wù))之間關(guān)系之間關(guān)系, 編寫主程序編寫主程序重點和難點: 編寫功能
8、模塊對應(yīng)的子程序2022-3-1910模塊化程序設(shè)計基本思想:將一個大的程序按功能分割成一些小模塊特點:各模塊相對獨立、功能單一、結(jié)構(gòu)清晰、接口簡單控制了程序設(shè)計的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動易于維護和功能擴充開發(fā)方法: 自上向下,逐步分解,分而治之2022-3-1911模塊設(shè)計原則 模塊獨立 每個模塊完成一個相對獨立的特定功能。模塊之間的關(guān)系力求簡單。例如:模塊之間最好只通過數(shù)據(jù)傳遞發(fā)生聯(lián)系,而不發(fā)生控制關(guān)系。使用與模塊獨立的變量。模塊內(nèi)的數(shù)據(jù),對于不需要這些數(shù)據(jù)的其他模塊來說,應(yīng)該不允許使用;對一個模塊內(nèi)的變量的修改不會影響其他模塊的數(shù)據(jù),即模塊的私有數(shù)據(jù)只屬于
9、這個模塊。 模塊規(guī)模適當 分解模塊要注意層次要多層次的分解任務(wù),注意對問題的抽象化,開始不要過于注意細節(jié),以后再細化求精。2022-3-1912源程序文件1預(yù)編譯命令說明部分執(zhí)行部分函數(shù)1函數(shù)n源程序文件i源程序文件nC程序C程序結(jié)構(gòu)模塊化程序設(shè)計內(nèi)容 MCS-51單片機匯編程序的結(jié)構(gòu)單片機匯編程序的結(jié)構(gòu) MCS-51單片機匯編程序設(shè)計方法單片機匯編程序設(shè)計方法 例例1, 循環(huán)程序設(shè)計循環(huán)程序設(shè)計 包含的主要指令包含的主要指令: DJNZ 包含的主要包含的主要C語言:語言:for ;whiledo2022-3-1914程序設(shè)計 示例1功能 計算n個無符號整型數(shù)之和要求寫成子程序形式子程序的輸入
10、和輸出參數(shù)輸入: 數(shù)據(jù)個數(shù)存放在R4中, 數(shù)據(jù)的起始地址在R0中輸出: 和存放在R4(高8位)和R5(低8位)中2022-3-1915程序設(shè)計 示例1的源碼Sum: PUSH Acc ; 保存保存A的內(nèi)容在堆棧區(qū)的內(nèi)容在堆棧區(qū)PUSH B ; 保存保存B的內(nèi)容在堆棧區(qū)的內(nèi)容在堆棧區(qū)PUSH PSW ; 保存保存PSW的內(nèi)容在堆棧區(qū)的內(nèi)容在堆棧區(qū)MOV A, #00H ; 首先將和的低首先將和的低8位清零位清零MOV B, #00H ; 首先將和的高首先將和的高8位清零位清零CLR C ; 將進位位清零將進位位清零MOV R5, #00H ; R5寄存器清零寄存器清零Sum1:ADDC A, R
11、0 ; 將一個字節(jié)的數(shù)據(jù)加到和的低字節(jié)中將一個字節(jié)的數(shù)據(jù)加到和的低字節(jié)中MOV R5, A ; 保存和的低字節(jié)到保存和的低字節(jié)到R5中中CLR A ; 累加器累加器A清零清零ADDC A, B ; 將進位位加到和的高將進位位加到和的高8位中位中 MOV B, A ; 將和的高將和的高8位仍保存在位仍保存在B中中MOV A, R5 ; 將臨時保存在將臨時保存在R5中的和的低中的和的低8位位傳送到傳送到A中中INC R0 ; 數(shù)據(jù)緩沖區(qū)指針加數(shù)據(jù)緩沖區(qū)指針加1, 指向下一個字節(jié)指向下一個字節(jié)DJNZ R4, Sum1 ; 累加是否繼續(xù)累加是否繼續(xù)? ; 累加完成,和存放在累加完成,和存放在B(高高
12、8位位)和和A(低低8位位)中中MOV R4, B ; 將和的高將和的高8位傳送到位傳送到R4中中POP PSW ; 從堆棧區(qū)恢復(fù)從堆棧區(qū)恢復(fù)PSW的內(nèi)容的內(nèi)容POP B ; 從堆棧區(qū)恢復(fù)從堆棧區(qū)恢復(fù)B的內(nèi)容的內(nèi)容POP Acc ; 從堆棧區(qū)恢復(fù)從堆棧區(qū)恢復(fù)A的內(nèi)容的內(nèi)容RET#define xDataPt (unsighned char*)0 x00)#define pR4 = (char *)0 x03;unsigned int DataSum(void) unsigned int i,result; CY=0; for (i=0;i*pR4;i+) result+=*(xDataPt+i
13、); *pR4 = result;2022-3-1916程序設(shè)計 課內(nèi)練習1功能 將片外擴展的數(shù)據(jù)存儲器中的10個無符號整型數(shù)轉(zhuǎn)移到片內(nèi)數(shù)據(jù)存儲器中要求寫成子程序形式子程序的輸入和輸出參數(shù)輸入: 保存原數(shù)據(jù)的起始地址為8000H輸出: 片內(nèi)數(shù)據(jù)存儲器的起始地址為80H2022-3-1917程序設(shè)計 課內(nèi)練練習1續(xù)續(xù) MOV R6,#20;LOOP: MOV DPTR, #8000H; MOV R0,#80H; MOVX A, DPTR; MOV R0, A; INC DPTR INC R0 DJNZ R6, LOOP RET void DataMove(void) unsigned int i
14、,result; char idata *DTo = (char *)0 x80; char xdata *DFrom; *DFrom= (char *)0 x8000; for (i=0;i20;i+) *(DTo+i)=*(DFrom+i); MCS-51單片機匯編程序仿真和編譯器一個簡單易用的MCS-51單片機匯編程序編輯, 仿真和編譯器Proview 32 (from Frinklin Software Inc.)Version 3.3.4Build number 8.63獲取方法網(wǎng)絡(luò)上搜索網(wǎng)絡(luò)上搜索總結(jié)MCS-51單片機匯編程序的結(jié)構(gòu)單片機匯編程序的結(jié)構(gòu)MCS-51單片機匯編程序設(shè)計方單片機匯編程序設(shè)計方法法例例1, 循環(huán)程序設(shè)計循環(huán)程序設(shè)計包含的主要指令包含的主要指令: DJNZ包含的主要包含的主要C語言:語言:for ;whiledo問題和討論子程序的調(diào)用和返回過程都涉及堆子程序的調(diào)用和返回過程都涉及堆棧的操作棧
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《豬姜片吸蟲病》課件
- 地理(內(nèi)蒙古)-【八省聯(lián)考】河南、山西、陜西、內(nèi)蒙古、四川、云南、寧夏、青海八省2025年高考綜合改革適應(yīng)性演練聯(lián)考試題和答案
- 《知識大考驗》課件
- 小學一年級10以內(nèi)連加連減口算練習題
- 出凝血疾病的實驗診斷學思路-2019年華醫(yī)網(wǎng)繼續(xù)教育答案
- 作業(yè)姿勢的分類分析及抗疲勞方案
- 2019工程倫理慕課答案(2019秋)習題及期末答案
- 2022年合肥幼兒師范高等專科學校單招面試題庫及答案解析
- 小學數(shù)學二年級數(shù)學加減法練習題
- 物流運輸客服工作經(jīng)驗
- 醫(yī)療機構(gòu)資產(chǎn)負債表(通用模板)
- 廢舊鋰離子電池高值資源化回收利用項目環(huán)評報告書
- 審計英語詞匯大全講課教案
- JIS G3507-1-2021 冷鐓用碳素鋼.第1部分:線材
- 初二家長會ppt通用PPT課件
- 小學生家庭作業(yè)布置存在的誤區(qū)及改進策略論文1
- 一元一次含參不等式教學設(shè)計83
- 生物醫(yī)學研究的統(tǒng)計學方法課后習題答案 2014 主編 方積乾
- 牛仔面料成本核算
- 加拿大礦業(yè)政策
- 客情關(guān)系的建立和維護
評論
0/150
提交評論