單片機(jī)第二次試驗(yàn)報(bào)告——分支程序設(shè)計(jì)_第1頁
單片機(jī)第二次試驗(yàn)報(bào)告——分支程序設(shè)計(jì)_第2頁
單片機(jī)第二次試驗(yàn)報(bào)告——分支程序設(shè)計(jì)_第3頁
單片機(jī)第二次試驗(yàn)報(bào)告——分支程序設(shè)計(jì)_第4頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微機(jī)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱 _ 分支程序設(shè)計(jì)實(shí)驗(yàn)_專業(yè)班級 _姓名 _ 學(xué)號 _ 序號聯(lián)系方式 _一、任務(wù)要求熟練掌握 KeilC 環(huán)境下匯編語言程序的調(diào)試方法,加深對匯編語言指令、機(jī)器碼、尋址方式等基本內(nèi)容的理解,掌握分支程序和簡單程序的設(shè)計(jì)與調(diào)試方法,了解并行10 口的使用。1.設(shè)有 8bits 符號數(shù) X 存于外部 RAM 單元,按以下方式計(jì)算后的結(jié)果丫也存于外部 RAM 單元,請按要求編寫程序。X2當(dāng) X40丫 X/2當(dāng) 20X40X當(dāng) X202.利用 51 系列單片機(jī)設(shè)計(jì)一個(gè)24 小時(shí)制電子時(shí)鐘,電子時(shí)鐘的時(shí)、分、秒數(shù)值分別通過PO 、P1、P2 端口輸出(以壓縮BCD 碼的 形式)。P3

2、.0 為低電平時(shí)開始計(jì)時(shí),為高電平時(shí)停止計(jì)時(shí)。提高部分(選做):a. 實(shí)現(xiàn) 4 位十進(jìn)制加、減 1 計(jì)數(shù),千位、百位由 P1 口輸出;十位、 個(gè)位由P2 口輸出。利用 P3.7 狀態(tài)選擇加、減計(jì)數(shù)方式。b. 利用 P3 口低四位狀態(tài)控制開始和停止計(jì)數(shù),控制方式自定。二、設(shè)計(jì)思路1. 分段函數(shù)設(shè)計(jì)對于第一個(gè)任務(wù),相當(dāng)于設(shè)計(jì)一個(gè)分段函數(shù)程序,根據(jù)變量X 的 值所處的區(qū)間進(jìn)行相應(yīng)的計(jì)算。由學(xué)過的知識知道,可利用比較轉(zhuǎn)移指令CJNE 來判斷 X 是否等于臨界值20,40, 若不等,再根據(jù)執(zhí)行CJNE 指令后的進(jìn)位位 CY 的值來判斷 X 與臨界值的的大小關(guān)系,易知CY=0 則 X 大于臨界值, CY

3、二側(cè) X 小于臨界值;如此,再進(jìn)行相應(yīng)的計(jì)算。另外 , 除法計(jì)算中可能產(chǎn)生余數(shù) , 商和余數(shù)應(yīng)該分開存儲 , 若乘方運(yùn)算結(jié)果大于255 , 高八位與低八位應(yīng)分開存儲。2. 24 小時(shí)制時(shí)鐘程序本程序須可以構(gòu)建兩部分循環(huán)。首先構(gòu)建一個(gè)三重循環(huán)實(shí)現(xiàn)“一 秒延時(shí)” , 循環(huán)體利用 NOP W 令(單字節(jié)指令, 1 g )經(jīng)多次循環(huán)達(dá)到延時(shí)一秒的效果。再利用已經(jīng)構(gòu)建好的“一秒延時(shí)”部分,設(shè)計(jì)計(jì)時(shí)系統(tǒng)的三重循環(huán),秒(0-59 )、分(0-59 )、時(shí)(0-23 )。需要注意的是,在小時(shí)、分、秒達(dá)到59 時(shí),下一次應(yīng)該為零。程序運(yùn)行時(shí)修改P3.0 的值可以實(shí)現(xiàn)暫停和繼續(xù)的功能。3.加一減一程序先初始化 P

4、1 和 P2 , 然后當(dāng) P3 低四位均為 0 作為開始計(jì)數(shù)的標(biāo)志,每次計(jì)數(shù)中插一個(gè)延時(shí)程序。P3.7 為 0 時(shí)進(jìn)行加1 計(jì)數(shù):先把低 2 位從 P2中取出至 A, 對 A 進(jìn)行 ADD 加一計(jì)數(shù)并進(jìn)行十進(jìn)制修正,然后存進(jìn) P2; 再把高 2 位從 P1 取出至 A, 對 A 進(jìn)行 ADDC 勺加進(jìn)位操作并十進(jìn)行進(jìn)制修正 , 然后存進(jìn) P1。 P3.7 為 1 時(shí)進(jìn)行減一計(jì)數(shù):只需改用 ADD 指令加上 1 的補(bǔ)碼即可,高 2 位在第二位為 99 時(shí)進(jìn)行同樣的操作,最后分別用P1 和 P2 輸出高 2 位和低 2 位。即可實(shí)現(xiàn)所需功能。三、 資源分配1. 分段函數(shù)根據(jù)題目的條件,首先,設(shè)該8

5、 位無符號數(shù)為 30H, 把片外地址4000H分配給它,把片外地址4001H 和 4002H 分配給經(jīng)分段函數(shù)計(jì)算得到的結(jié)果丫。按位取反計(jì)算結(jié)果存于4001H 單元,而除法計(jì)算結(jié)果的商與余數(shù)和乘方計(jì)算中結(jié)果的高、低八位分開存儲于4001H-4002H單元。用寄存器A,B來存放在乘除運(yùn)算中所得的中間結(jié)果。2. 二十四小時(shí)制時(shí)鐘工作寄存器 R0 R1 、R2 分別用于秒、分、時(shí)循環(huán)次數(shù)的設(shè)定,R3 R4 分別用于分與時(shí)的循環(huán)計(jì)數(shù),R5-R7 用于“一秒延時(shí)”中三重循環(huán)的循環(huán)次數(shù)設(shè)定。秒、分、時(shí)數(shù)值分別由P2 、P1、P0 端口輸出。3. 加、減 1 計(jì)數(shù)程序:將十進(jìn)制數(shù)的千位數(shù)和百位數(shù)存于P1 ,

6、 將十進(jìn)制數(shù)的十位數(shù)和個(gè)位數(shù)存放于 P2, P3.0 至 P3.3 為是否進(jìn)行計(jì)數(shù)的4 個(gè)控制位,P3.7 為選擇加一或減一的計(jì)數(shù)方式的控制位;R3, R4, R5為計(jì)數(shù)中的延時(shí)程序指定循環(huán)次數(shù)。四、 流程圖2. 時(shí)鐘程序開始PO J0P1 J0P2 J0P3 J0P3.0=0 ?延時(shí) 1s秒鐘計(jì)數(shù), RO 加 1AJ RO, 并轉(zhuǎn)換成 BCD 碼P2JAR0=60H ?R0 J0P2 J0分鐘計(jì)數(shù), R1 加 1AJ R1, 并轉(zhuǎn)換為 BCD 碼R1=60H ?P1 J AR1J0P1 J0時(shí)鐘計(jì)數(shù), R2 加 1AJR2, 并轉(zhuǎn)換為 BCDP0 JAR2J0PO J0R2=24 ?五.源代

7、碼1. 分段函數(shù)ORG 0000HLJMP MAINORG 0100HMAIN: MOV A, #30H ;MOV DPTR, #4000HMOVX DPTR, ACLRC;KIND1:CJNE A, #14H, KIND2OUT1: CPL AMOV DPTR, #4001HMOVX DPTR, ASJMP DONEKIND2:JNC KIND3SJMP OUT1KIND3:CLR CCJNE A,#28H, KIND4OUT2: MOV B,AMUL ABMOV DPTR, #4001HMOVX DPTR,AINC DPTRMOV A,BMOVX DPTR,ASJMP DONEKIND4:

8、JNC OUT2SJMP OUT3OUT3: MOV B,#02HDIV AB將 8 位無符號數(shù)賦給A; 定義數(shù)據(jù)指針;將 X 存于片外 RAM將進(jìn)位位清零;將 A 與 14H 比較,若不等于14H, 跳轉(zhuǎn)至 KIND2;對 A 中內(nèi)容取反; 定義數(shù)據(jù)指針; 將計(jì)算結(jié)果存于片外地址 4001H;判斷進(jìn)位位 CY 是否為 0,若為 0, 跳轉(zhuǎn)至 KIND3; 否則跳轉(zhuǎn)至 OUT1; 將進(jìn)位位清零;將 A 中內(nèi)容與 28H 比較,若不等于28H, 跳轉(zhuǎn)至 KIND4;將 A 中內(nèi)容賦給B;計(jì)算 X 的平方,將結(jié)果高八位存于B,低八位存于 A; 定義數(shù)據(jù)指針; 將結(jié)果低八位存于片外地址4001H;

9、數(shù)據(jù)指針加一;將 B 中內(nèi)容賦給A; 將結(jié)果高八位存于片外地址4002H; 判斷進(jìn)位位是否為0, 若為0, 跳轉(zhuǎn)至OUT2; 否則跳轉(zhuǎn)至 OUT3;計(jì)算 X/2 ,將商存于 A,余數(shù)存于 BMOV DPTR,#4001H定義數(shù)據(jù)指針MOVX DPTR,A; 將商存于片外地址 4001HINC DPTR; 數(shù)據(jù)指針加1MOV A,BMOVX DPTR,A; 將余數(shù)存于片外地址4002HSJMP DONEDONE: SJMP $END2. 時(shí)鐘程序ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0,#00HMOV P0,#00HMOV P1,#00HMOV P2,#00

10、HSTART: JB P3.0,STARTMOV R2,P2CJNE R2,#60H,DELMOV P2,#00HMOV A,P1ADD A,#01HDA AMOV P1,AMOV R1,P1CJNE R1,#60H,DELMOV P1,#00H; 時(shí)鐘位清零; 分鐘位清零; 秒鐘位清零;P3.0 為低電平開始計(jì)數(shù),高電平停止計(jì)數(shù);P2 的值存入R2秒鐘達(dá)到60 繼續(xù),不足60 跳轉(zhuǎn); 秒鐘清零; 分鐘位加 1;分鐘位改為BCD 碼;P1 的值存入寄存器R1; 分鐘達(dá)到60 繼續(xù),不足60 跳轉(zhuǎn); 分鐘清零MOV A,R0ADD A,#01HDA AMOV R0,AMOV P0,ACJNE R

11、0,#24H,DELMOV P0,#00HMOV R0,#00HDEL: MOV R7,#24LOOP1: MOV R6,#61LOOP2: MOV R5,#170LOOP3: NOPNOPDJNZ R5,LOOP3DJNZ R6,LOOP2DJNZ R7,LOOP1MOV A,P2ADD A,#01HDA AMOV P2,ASJMP STARTEND; 時(shí)鐘位加 1;時(shí)鐘位改為BCD 碼; 時(shí)鐘達(dá)到24 繼續(xù),不足24 跳轉(zhuǎn); 時(shí)鐘位清零; 延時(shí)程序; 秒鐘位加13. 加一減一程序ORG 0000HLJMP MAINORG 0100HMOV P1,#00HMAIN:;P1 端口置零MOV P

12、2,#00H;P2 端口置零START:DELAY:DEL1:DEL2:DEL3:DOWN:MOV P3,#7FH;P3 端口置#7FHJB P3.0,STARTJB P3.1,STARTJB P3.2,STARTJB P3.3,START; 判斷是否開始計(jì)時(shí)LJMP DELAY; 跳轉(zhuǎn)到延時(shí)子程序MOV R7,#24MOV R6,#61MOV R5,#170NOPNOPDJNZ R5,DEL3DJNZ R6,DEL2DJNZ R7,DEL1; 延時(shí)1 秒JB P3.7 ,DOWN;P3.7 為 0 時(shí),力口1 計(jì)數(shù); P3.7 為 1 時(shí),減 1 計(jì)數(shù)LJMP UPMOV A,P2CLR C

13、SUBB A,#01HMOV R1,AANL A,#0FHMOV R7,AMOV A,R1ANL A,#0F0HMOV R1,AMOV A,P1SUBB A,#00HMOV R0,AANL A,#0FHMOV R6,AMOV A,R0ANL A,#0F0HMOV R0,ACJNE R7,#0FH,LOOP1MOV R7,#09HLOOP1: CJNE R1,#0F0H,LOOP2MOV R1,#90HLOOP2: CJNE R6,#0FH,LOOP3MOV R6,#09HLOOP3: CJNE R0,#0F0H,LOOP4MOV R0,#90HLOOP4: MOV A,R1ADD A,R7DA

14、 AMOV P2,AMOV A,R0ADD A,R6DA AMOV P1,ALJMP DELAY; 減 1 計(jì)數(shù)子程序UP: MOV A,P2ADD A,#01HDA AMOV P2,AMOV A,P1ADDC A,#00HDA AMOV P1,ALJMP DELAY; 加 1 計(jì)數(shù)子程序END六、程序測試方法與結(jié)果、軟件性能分析1. 分段函數(shù)對于分段函數(shù)的問題,可以將X 設(shè)為某一值,運(yùn)行程序,觀察各個(gè)寄存器及有關(guān)地址中內(nèi)容,進(jìn)行驗(yàn)證。截圖如下:(1) X=30Ht R色超MrOrl r2r5r6r7匕 3蟲t?SPdp trFC wt 研筈誓? C!-1 pswpflQY-rs accyVs

15、lu&OfeMOK OO0x00DxOO血 00OsOO0x00OnOO血 09DHO90070070x4002C:DxOl3a51O.OOOC1665 0K O40010oD01Memory 1Address.0x4001X:5x004001:3009000000oc00DO0000X:DK00400F= OO000000DO00000000X:0x0Q401D; CO00000000cc00000000:QO QO0000oc00000000X OxOG4Q2S 00X:0x004035: 00000000000000DO0000X: 0x0010i7: 0000000000000

16、0DODO 001.| 圍上sh |詢二 -b : 1 Memory 1|- 1 -(2) X=0AHAddiess:XlOxOCiODl :F5 0000000000000000000000000Q0000X: 0x004011!OQ 00000000000000DO 000000000000XtCix004021:00 0000000000000000 00000000oa00Xi 031004031!00 000000000000000000DO00000000X:0x004041:00 000000DO000000000000DO00000000pC;CUc004dSl:00 0000

17、00000000000000000000000000x:oxoo4a6i:oa oooo00ao0000DO OO OO00oo00000000: TAII:11 jWatfh 11Mpmarv 1 ISsvmhfFK(3) X=18HAddress' |x (k4D01K:0xO0031:0?000000 00000000000000000000000X:0x004011:00000000000000000000DO0000co0000x:axQa402i :QOQ000000QOQ00Q0QO00000000000000x; ajtoa-? o3i ;000000000000000

18、0000000OO00cocoooX: 0x001041 : 000 0 000oa00000000ao 0000000X:OK 00405丄:000000 00 GO00oa00ao000000co0000X!Q K 004061!00000000 00000000000000000000000X:0x004071:000000000000000000OD000000co00oo經(jīng)驗(yàn)證,所有結(jié)果正確,且運(yùn)行程序過程中并未出現(xiàn)任何問題,故源程序正確2.24 小時(shí)時(shí)鐘程序PnklPortlParallel Port 2Prald Port!I 7 ft! JrrrrTTTTRni l&O

19、O1 1 1 1 1 11 1Parallel P(rtOrhxtOI_ &t=- u即:阿 I1【IIIIIPI|P啡TParallel Port 1FM:O|I(IT 恥刈 IJI IIIII7 脈屮MI鏟忖PTS : wi rn r 帀Para Id Port 2Para el Port 31並0IHIPiBits ;H PT升 JRns FzrTTTTTFT1 2*rOrlr2r3r4r5r6rT.c誰 *bSPtip trPC 歩st atesse cJi1owrsaccy| VallieOHOOOxtJO0x01OHWCfeOOOnt?QH QO0x00L/L0x00Oxcrr0x07OM IDOOC:0x0149200000L2. 000001000x011000000L附加:思考題1 . 實(shí)現(xiàn)多分支結(jié)構(gòu)程序的主要方法有哪些?舉例說明。2 . 在編程上,十進(jìn)制加 1 計(jì)數(shù)器與十六進(jìn)制加 1 計(jì)數(shù)器的區(qū)別是什么?怎樣用十進(jìn)制加法指令實(shí)現(xiàn)減 1 計(jì)數(shù)?答: 1.一是利用條件轉(zhuǎn)移指令實(shí)現(xiàn),如DJN Z, JNC 等等例如:例如,判斷兩個(gè)單字節(jié)無符號數(shù)的大?。ǚ謩e存于片內(nèi)RAM 的 40H 和 41H 單元)并把大數(shù)存入42H 單元??梢杂门袛郈Y

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論