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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

… LJMPmain_loopTask1:…END以一個(gè)跳轉(zhuǎn)語(yǔ)句開(kāi)始中斷程序的入口地址是固定的(簡(jiǎn)單解釋中斷的響應(yīng))討論幾個(gè)問(wèn)題:(1)為什么首句是一個(gè)跳轉(zhuǎn)語(yǔ)句?(2)幾個(gè)ORG偽指令的作用是什么?(3)如果沒(méi)有任何中斷程序,必須采用這樣的程序結(jié)構(gòu)?2023/10/116定時(shí)(周期性地)將一個(gè)變量從05H增加到FFH,之后再重復(fù)該過(guò)程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;}}程序存儲(chǔ)器中的代碼形態(tài)見(jiàn)教材p.62圖3-1內(nèi)容MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計(jì)方法例1,循環(huán)程序設(shè)計(jì)包含的主要指令:DJNZ包含的主要C語(yǔ)言:for;while…do匯編語(yǔ)言程序設(shè)計(jì)方法軟件功能分析,根據(jù)功能合理劃分成若干模塊分別編寫(xiě)下面程序模塊根據(jù)資源,確定堆棧,寄存器組等初始位置,編寫(xiě)啟動(dòng)程序根據(jù)需要配置相關(guān)功能單元以及變量的初始狀態(tài),編寫(xiě)初始化程序編寫(xiě)硬件相關(guān)的驅(qū)動(dòng)程序編寫(xiě)中斷程序編寫(xiě)功能模塊對(duì)應(yīng)的子程序根據(jù)各子功能模塊(和任務(wù))之間關(guān)系,編寫(xiě)主程序重點(diǎn)和難點(diǎn):編寫(xiě)功能模塊對(duì)應(yīng)的子程序2023/10/1110模塊化程序設(shè)計(jì)基本思想:將一個(gè)大的程序按功能分割成一些小模塊特點(diǎn):各模塊相對(duì)獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡(jiǎn)單控制了程序設(shè)計(jì)的復(fù)雜性提高元件的可靠性縮短開(kāi)發(fā)周期避免程序開(kāi)發(fā)的重復(fù)勞動(dòng)易于維護(hù)和功能擴(kuò)充開(kāi)發(fā)方法:自上向下,逐步分解,分而治之2023/10/1111模塊設(shè)計(jì)原則模塊獨(dú)立每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定功能。模塊之間的關(guān)系力求簡(jiǎn)單。例如:模塊之間最好只通過(guò)數(shù)據(jù)傳遞發(fā)生聯(lián)系,而不發(fā)生控制關(guān)系。使用與模塊獨(dú)立的變量。模塊內(nèi)的數(shù)據(jù),對(duì)于不需要這些數(shù)據(jù)的其他模塊來(lái)說(shuō),應(yīng)該不允許使用;對(duì)一個(gè)模塊內(nèi)的變量的修改不會(huì)影響其他模塊的數(shù)據(jù),即模塊的私有數(shù)據(jù)只屬于這個(gè)模塊。模塊規(guī)模適當(dāng)分解模塊要注意層次要多層次的分解任務(wù),注意對(duì)問(wèn)題的抽象化,開(kāi)始不要過(guò)于注意細(xì)節(jié),以后再細(xì)化求精。2023/10/1112C程序結(jié)構(gòu)模塊化程序設(shè)計(jì)內(nèi)容MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計(jì)方法例1,循環(huán)程序設(shè)計(jì)包含的主要指令:DJNZ包含的主要C語(yǔ)言:for;while…do2023/10/1114程序設(shè)計(jì)示例1功能

計(jì)算n個(gè)無(wú)符號(hào)整型數(shù)之和要求寫(xiě)成子程序形式子程序的輸入和輸出參數(shù)輸入:數(shù)據(jù)個(gè)數(shù)存放在R4中,數(shù)據(jù)的起始地址在R0中輸出:和存放在R4(高8位)和R5(低8位)中2023/10/1115程序設(shè)計(jì)示例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

;將一個(gè)字節(jié)的數(shù)據(jù)加到和的低字節(jié)中 MOVR5,A;保存和的低字節(jié)到R5中 CLRA;累加器A清零 ADDCA,B;將進(jìn)位位加到和的高8位中MOVB,A;將和的高8位仍保存在B中 MOVA,R5;將臨時(shí)保存在R5中的和的低8位傳送到A中 INCR0;數(shù)據(jù)緩沖區(qū)指針加1,指向下一個(gè)字節(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è)計(jì)課內(nèi)練習(xí)1功能

將片外擴(kuò)展的數(shù)據(jù)存儲(chǔ)器中的10個(gè)無(wú)符號(hào)整型數(shù)轉(zhuǎn)移到片內(nèi)數(shù)據(jù)存儲(chǔ)器中要求寫(xiě)成子程序形式子程序的輸入和輸出參數(shù)輸入:保存原數(shù)據(jù)的起始地址為8000H輸出:片內(nèi)數(shù)據(jù)存儲(chǔ)器的起始地址為80H2023/10/1117程序設(shè)計(jì)課內(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ī)匯編程序仿真和編譯器一個(gè)簡(jiǎn)單易用的MCS-51單片機(jī)匯編程序編輯,仿真和編譯器Proview32(fromFrinklinSoftwareInc.)Version3.3.4Buildnumber8.63獲取方法網(wǎng)絡(luò)上搜索總結(jié)MCS-51單片機(jī)匯編程序的結(jié)構(gòu)MCS-51單片機(jī)匯編程序設(shè)計(jì)方法例1,循環(huán)程序設(shè)計(jì)包含的主要指令:DJNZ包含的主要C語(yǔ)言:for;while…do問(wèn)題和討論子程序的調(diào)用和返回過(guò)程都涉及堆棧的操作

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論