微機(jī)原理及應(yīng)用06程序設(shè)計基礎(chǔ)I2015_第1頁
微機(jī)原理及應(yīng)用06程序設(shè)計基礎(chǔ)I2015_第2頁
微機(jī)原理及應(yīng)用06程序設(shè)計基礎(chǔ)I2015_第3頁
微機(jī)原理及應(yīng)用06程序設(shè)計基礎(chǔ)I2015_第4頁
微機(jī)原理及應(yīng)用06程序設(shè)計基礎(chǔ)I2015_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六講51單片機(jī)言程序設(shè)計1微機(jī)原理及應(yīng)用

PrincipleandApplicationsofMicro-Computers教學(xué)目的:

掌握MCS-51單片機(jī)匯編程序設(shè)計方法要求: 掌握MCS-51單片機(jī)匯編程序設(shè)計結(jié)構(gòu)和設(shè)計方法掌握程序設(shè)計的模塊化思路和分層設(shè)計思路;掌握如何使用高級語言訪問MCU的片上資源難點(diǎn): 掌握程序設(shè)計的模塊化思路和分層設(shè)計思路MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計方法例1,循環(huán)程序設(shè)計包含的主要指令:DJNZ包含的主要C語言:for;while…do內(nèi)容匯編語言程序定義定義匯編語言程序是多條指令陳述語句的有序組合,并且是為了實(shí)現(xiàn)某個特定的控制目標(biāo)和算法目的特點(diǎn)指令的有序組合為了特定的控制目標(biāo)或算法目的從功能上看,由下面幾部分組成啟動和初始化程序(僅執(zhí)行一次)主程序(一個“死循環(huán)”)子程序(某些特定子功能的陳述單元)和中斷程序一個簡單的匯編語言程序源碼(見p.60)功能

定時(周期性地)將一個變量從05H增加到FFH,之后再重復(fù)該過程代碼見教材p.60的3.3.1節(jié)0100H75815FMOVSP,#5FH;堆棧底部位于60H存放指令碼的首地址指令碼指令(指令助記符和操作碼)指令注釋2023/10/115定時(周期性地)將一個變量從05H增加到FFH,之后再重復(fù)該過程ORG0000HLJMPmain_entry;啟動程序入口ORG0003HLJMPINT0_svr;外部中斷0程序入口…;其它中斷程序入口ORG0100Hmain_entry:;啟動程序和主程序 MOVSP,#57H MOVPSW,#00H LCALLinit_8051;初始化程序main_loop: … LCALLTask1;子程序或子任務(wù)

… LJMPmain_loopTask1:…END以一個跳轉(zhuǎn)語句開始中斷程序的入口地址是固定的(簡單解釋中斷的響應(yīng))討論幾個問題:(1)為什么首句是一個跳轉(zhuǎn)語句?(2)幾個ORG偽指令的作用是什么?(3)如果沒有任何中斷程序,必須采用這樣的程序結(jié)構(gòu)?2023/10/116定時(周期性地)將一個變量從05H增加到FFH,之后再重復(fù)該過程counter DATA30HInitValueEQU5 ORG000HLJMPmain

ORG100Hmain:MOVsp,#5FHMOVPSW,#00HMOVA,#0AHLCALLdelayMOVcouner,#InitValueForeverRun:……

ORG0200Hdelay:……#defineInitValue5unsignedcharCounter;voiddelay(unsignedchartimes){unsignedchari,j;for(i=time;i>0;i--)for(j=100;j>0;j++);}main(void){delay(10);Counter=InitValue;while(1){delay(100);Counter++;if(Counter==0xFF)Counet=InitValue;}}程序存儲器中的代碼形態(tài)見教材p.62圖3-1內(nèi)容MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計方法例1,循環(huán)程序設(shè)計包含的主要指令:DJNZ包含的主要C語言:for;while…do匯編語言程序設(shè)計方法軟件功能分析,根據(jù)功能合理劃分成若干模塊分別編寫下面程序模塊根據(jù)資源,確定堆棧,寄存器組等初始位置,編寫啟動程序根據(jù)需要配置相關(guān)功能單元以及變量的初始狀態(tài),編寫初始化程序編寫硬件相關(guān)的驅(qū)動程序編寫中斷程序編寫功能模塊對應(yīng)的子程序根據(jù)各子功能模塊(和任務(wù))之間關(guān)系,編寫主程序重點(diǎn)和難點(diǎn):編寫功能模塊對應(yīng)的子程序2023/10/1110模塊化程序設(shè)計基本思想:將一個大的程序按功能分割成一些小模塊特點(diǎn):各模塊相對獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡單控制了程序設(shè)計的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動易于維護(hù)和功能擴(kuò)充開發(fā)方法:自上向下,逐步分解,分而治之2023/10/1111模塊設(shè)計原則模塊獨(dú)立每個模塊完成一個相對獨(dú)立的特定功能。模塊之間的關(guān)系力求簡單。例如:模塊之間最好只通過數(shù)據(jù)傳遞發(fā)生聯(lián)系,而不發(fā)生控制關(guān)系。使用與模塊獨(dú)立的變量。模塊內(nèi)的數(shù)據(jù),對于不需要這些數(shù)據(jù)的其他模塊來說,應(yīng)該不允許使用;對一個模塊內(nèi)的變量的修改不會影響其他模塊的數(shù)據(jù),即模塊的私有數(shù)據(jù)只屬于這個模塊。模塊規(guī)模適當(dāng)分解模塊要注意層次要多層次的分解任務(wù),注意對問題的抽象化,開始不要過于注意細(xì)節(jié),以后再細(xì)化求精。2023/10/1112C程序結(jié)構(gòu)模塊化程序設(shè)計內(nèi)容MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計方法例1,循環(huán)程序設(shè)計包含的主要指令:DJNZ包含的主要C語言:for;while…do2023/10/1114程序設(shè)計示例1功能

計算n個無符號整型數(shù)之和要求寫成子程序形式子程序的輸入和輸出參數(shù)輸入:數(shù)據(jù)個數(shù)存放在R4中,數(shù)據(jù)的起始地址在R0中輸出:和存放在R4(高8位)和R5(低8位)中2023/10/1115程序設(shè)計示例1的源碼Sum:

PUSHAcc

;保存A的內(nèi)容在堆棧區(qū)

PUSHB

;保存B的內(nèi)容在堆棧區(qū)

PUSHPSW

;保存PSW的內(nèi)容在堆棧區(qū) MOVA,#00H;首先將和的低8位清零 MOVB,#00H;首先將和的高8位清零 CLRC;將進(jìn)位位清零 MOVR5,#00H;R5寄存器清零Sum1: ADDCA,@R0

;將一個字節(jié)的數(shù)據(jù)加到和的低字節(jié)中 MOVR5,A;保存和的低字節(jié)到R5中 CLRA;累加器A清零 ADDCA,B;將進(jìn)位位加到和的高8位中MOVB,A;將和的高8位仍保存在B中 MOVA,R5;將臨時保存在R5中的和的低8位傳送到A中 INCR0;數(shù)據(jù)緩沖區(qū)指針加1,指向下一個字節(jié)

DJNZR4,Sum1

;累加是否繼續(xù)?

;累加完成,和存放在B(高8位)和A(低8位)中 MOVR4,B;將和的高8位傳送到R4中

POPPSW

;從堆棧區(qū)恢復(fù)PSW的內(nèi)容

POPB

;從堆棧區(qū)恢復(fù)B的內(nèi)容

POPAcc

;從堆棧區(qū)恢復(fù)A的內(nèi)容

RET#definexDataPt((unsighnedchar*)0x00 )#definepR4=(char*)0x03;unsignedintDataSum(void){unsignedinti,result;CY=0;for(i=0;i<*pR4;i++)result+=*(xDataPt+i);*pR4=result;}2023/10/1116程序設(shè)計課內(nèi)練習(xí)1功能

將片外擴(kuò)展的數(shù)據(jù)存儲器中的10個無符號整型數(shù)轉(zhuǎn)移到片內(nèi)數(shù)據(jù)存儲器中要求寫成子程序形式子程序的輸入和輸出參數(shù)輸入:保存原數(shù)據(jù)的起始地址為8000H輸出:片內(nèi)數(shù)據(jù)存儲器的起始地址為80H2023/10/1117程序設(shè)計課內(nèi)練習(xí)1續(xù)MOVR6,#20;LOOP:MOVDPTR,#8000H;MOVR0,#80H;MOVXA,@DPTR;MOV@R0,A;INCDPTRINCR0DJNZR6,LOOPRET

voidDataMove(void){unsignedinti,result;charidata*DTo=(char*)0x80;charxdata*DFrom;*DFrom=(char*)0x8000;for(i=0;i<20;i++)*(DTo+i)=*(DFrom+i);}MCS-51單片機(jī)匯編程序仿真和編譯器一個簡單易用的MCS-51單片機(jī)匯編程序編輯,仿真和編譯器Proview32(fromFrinklinSoftwareInc.)Version3.3.4Buildnumber8.63獲取方法網(wǎng)絡(luò)上搜索總結(jié)MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計方法例1,循環(huán)程序設(shè)計包含的主要指令:DJNZ包含的主要C語言:for;while…do問題和討論子程序的調(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論