版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微機實驗報告實驗名稱 _ 分支程序設計實驗_專業(yè)班級 _姓名 _ 學號 _ 序號聯系方式 _一、任務要求熟練掌握 KeilC 環(huán)境下匯編語言程序的調試方法,加深對匯編語言指令、機器碼、尋址方式等基本內容的理解,掌握分支程序和簡單程序的設計與調試方法,了解并行10 口的使用。1.設有 8bits 符號數 X 存于外部 RAM 單元,按以下方式計算后的結果丫也存于外部 RAM 單元,請按要求編寫程序。X2當 X40丫 X/2當 20X40X當 X202.利用 51 系列單片機設計一個24 小時制電子時鐘,電子時鐘的時、分、秒數值分別通過PO 、P1、P2 端口輸出(以壓縮BCD 碼的 形式)。P3
2、.0 為低電平時開始計時,為高電平時停止計時。提高部分(選做):a. 實現 4 位十進制加、減 1 計數,千位、百位由 P1 口輸出;十位、 個位由P2 口輸出。利用 P3.7 狀態(tài)選擇加、減計數方式。b. 利用 P3 口低四位狀態(tài)控制開始和停止計數,控制方式自定。二、設計思路1. 分段函數設計對于第一個任務,相當于設計一個分段函數程序,根據變量X 的 值所處的區(qū)間進行相應的計算。由學過的知識知道,可利用比較轉移指令CJNE 來判斷 X 是否等于臨界值20,40, 若不等,再根據執(zhí)行CJNE 指令后的進位位 CY 的值來判斷 X 與臨界值的的大小關系,易知CY=0 則 X 大于臨界值, CY
3、二側 X 小于臨界值;如此,再進行相應的計算。另外 , 除法計算中可能產生余數 , 商和余數應該分開存儲 , 若乘方運算結果大于255 , 高八位與低八位應分開存儲。2. 24 小時制時鐘程序本程序須可以構建兩部分循環(huán)。首先構建一個三重循環(huán)實現“一 秒延時” , 循環(huán)體利用 NOP W 令(單字節(jié)指令, 1 g )經多次循環(huán)達到延時一秒的效果。再利用已經構建好的“一秒延時”部分,設計計時系統(tǒng)的三重循環(huán),秒(0-59 )、分(0-59 )、時(0-23 )。需要注意的是,在小時、分、秒達到59 時,下一次應該為零。程序運行時修改P3.0 的值可以實現暫停和繼續(xù)的功能。3.加一減一程序先初始化 P
4、1 和 P2 , 然后當 P3 低四位均為 0 作為開始計數的標志,每次計數中插一個延時程序。P3.7 為 0 時進行加1 計數:先把低 2 位從 P2中取出至 A, 對 A 進行 ADD 加一計數并進行十進制修正,然后存進 P2; 再把高 2 位從 P1 取出至 A, 對 A 進行 ADDC 勺加進位操作并十進行進制修正 , 然后存進 P1。 P3.7 為 1 時進行減一計數:只需改用 ADD 指令加上 1 的補碼即可,高 2 位在第二位為 99 時進行同樣的操作,最后分別用P1 和 P2 輸出高 2 位和低 2 位。即可實現所需功能。三、 資源分配1. 分段函數根據題目的條件,首先,設該8
5、 位無符號數為 30H, 把片外地址4000H分配給它,把片外地址4001H 和 4002H 分配給經分段函數計算得到的結果丫。按位取反計算結果存于4001H 單元,而除法計算結果的商與余數和乘方計算中結果的高、低八位分開存儲于4001H-4002H單元。用寄存器A,B來存放在乘除運算中所得的中間結果。2. 二十四小時制時鐘工作寄存器 R0 R1 、R2 分別用于秒、分、時循環(huán)次數的設定,R3 R4 分別用于分與時的循環(huán)計數,R5-R7 用于“一秒延時”中三重循環(huán)的循環(huán)次數設定。秒、分、時數值分別由P2 、P1、P0 端口輸出。3. 加、減 1 計數程序:將十進制數的千位數和百位數存于P1 ,
6、 將十進制數的十位數和個位數存放于 P2, P3.0 至 P3.3 為是否進行計數的4 個控制位,P3.7 為選擇加一或減一的計數方式的控制位;R3, R4, R5為計數中的延時程序指定循環(huán)次數。四、 流程圖2. 時鐘程序開始PO J0P1 J0P2 J0P3 J0P3.0=0 ?延時 1s秒鐘計數, RO 加 1AJ RO, 并轉換成 BCD 碼P2JAR0=60H ?R0 J0P2 J0分鐘計數, R1 加 1AJ R1, 并轉換為 BCD 碼R1=60H ?P1 J AR1J0P1 J0時鐘計數, R2 加 1AJR2, 并轉換為 BCDP0 JAR2J0PO J0R2=24 ?五.源代
7、碼1. 分段函數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 位無符號數賦給A; 定義數據指針;將 X 存于片外 RAM將進位位清零;將 A 與 14H 比較,若不等于14H, 跳轉至 KIND2;對 A 中內容取反; 定義數據指針; 將計算結果存于片外地址 4001H;判斷進位位 CY 是否為 0,若為 0, 跳轉至 KIND3; 否則跳轉至 OUT1; 將進位位清零;將 A 中內容與 28H 比較,若不等于28H, 跳轉至 KIND4;將 A 中內容賦給B;計算 X 的平方,將結果高八位存于B,低八位存于 A; 定義數據指針; 將結果低八位存于片外地址4001H;
9、數據指針加一;將 B 中內容賦給A; 將結果高八位存于片外地址4002H; 判斷進位位是否為0, 若為0, 跳轉至OUT2; 否則跳轉至 OUT3;計算 X/2 ,將商存于 A,余數存于 BMOV DPTR,#4001H定義數據指針MOVX DPTR,A; 將商存于片外地址 4001HINC DPTR; 數據指針加1MOV A,BMOVX DPTR,A; 將余數存于片外地址4002HSJMP DONEDONE: SJMP $END2. 時鐘程序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; 時鐘位清零; 分鐘位清零; 秒鐘位清零;P3.0 為低電平開始計數,高電平停止計數;P2 的值存入R2秒鐘達到60 繼續(xù),不足60 跳轉; 秒鐘清零; 分鐘位加 1;分鐘位改為BCD 碼;P1 的值存入寄存器R1; 分鐘達到60 繼續(xù),不足60 跳轉; 分鐘清零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; 時鐘位加 1;時鐘位改為BCD 碼; 時鐘達到24 繼續(xù),不足24 跳轉; 時鐘位清零; 延時程序; 秒鐘位加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; 判斷是否開始計時LJMP DELAY; 跳轉到延時子程序MOV R7,#24MOV R6,#61MOV R5,#170NOPNOPDJNZ R5,DEL3DJNZ R6,DEL2DJNZ R7,DEL1; 延時1 秒JB P3.7 ,DOWN;P3.7 為 0 時,力口1 計數; P3.7 為 1 時,減 1 計數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 計數子程序UP: MOV A,P2ADD A,#01HDA AMOV P2,AMOV A,P1ADDC A,#00HDA AMOV P1,ALJMP DELAY; 加 1 計數子程序END六、程序測試方法與結果、軟件性能分析1. 分段函數對于分段函數的問題,可以將X 設為某一值,運行程序,觀察各個寄存器及有關地址中內容,進行驗證。截圖如下:(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經驗證,所有結果正確,且運行程序過程中并未出現任何問題,故源程序正確2.24 小時時鐘程序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 . 實現多分支結構程序的主要方法有哪些?舉例說明。2 . 在編程上,十進制加 1 計數器與十六進制加 1 計數器的區(qū)別是什么?怎樣用十進制加法指令實現減 1 計數?答: 1.一是利用條件轉移指令實現,如DJN Z, JNC 等等例如:例如,判斷兩個單字節(jié)無符號數的大?。ǚ謩e存于片內RAM 的 40H 和 41H 單元)并把大數存入42H 單元??梢杂门袛郈Y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)人力資源管理概念
- 04毛首鞭形線蟲簡稱鞭蟲47課件講解
- 2025年人事代理服務洽談合同
- 2025年實物拍賣交易協議
- 2025年城市規(guī)劃調查勘察合同
- 2025年海事咨詢師職業(yè)責任保險合同
- 2025版二零二五年度智慧城市基礎設施建設合同規(guī)范4篇
- 二零二五版幕墻施工勞務分包合同施工進度監(jiān)控與調整范本4篇
- 2025年度路燈工程照明效果評估與提升合同
- 2025年度高新技術企業(yè)研發(fā)人員競業(yè)限制解除通知
- 垃圾處理廠工程施工組織設計
- 天皰瘡患者護理
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風福滿門模板
- 四川省成都市青羊區(qū)石室聯中學2024年八年級下冊物理期末學業(yè)水平測試試題含解析
- 門診導醫(yī)年終工作總結
- 新生物醫(yī)藥產業(yè)中的人工智能藥物設計研究與應用
- 損失補償申請書范文
- 壓力與浮力的原理解析
- 鐵路損傷圖譜PDF
- 裝修家庭風水學入門基礎
- 移動商務內容運營(吳洪貴)任務二 社群的種類與維護
評論
0/150
提交評論