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

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 微機(jī)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱(chēng) 分支程序設(shè)計(jì)實(shí)驗(yàn) 專(zhuān)業(yè)班級(jí) 姓名 學(xué)號(hào) 序號(hào) 聯(lián)系方式 一、任務(wù)要求 熟練掌握KeilC環(huán)境下匯編語(yǔ)言程序的調(diào)試方法,加深對(duì)匯編語(yǔ)言指令、機(jī)器碼、尋址方式等基本內(nèi)容的理解,掌握分支程序和簡(jiǎn)單程序的設(shè)計(jì)與調(diào)試方法,了解并行IO口的使用。 1. 設(shè)有8bits符號(hào)數(shù)X存于外部RAM單元,按以下方式計(jì)算后的結(jié)果Y也存于外部RAM單元,請(qǐng)按要求編寫(xiě)程序。 2. 利用51系列單片機(jī)設(shè)計(jì)一個(gè)24小時(shí)制電子時(shí)鐘,電子時(shí)鐘的時(shí)、分、秒數(shù)值分別通過(guò)P0、P1、P2端口輸出(以壓縮BCD碼的形式)。P3.0為低電平時(shí)開(kāi)始計(jì)時(shí),為高電平時(shí)停止計(jì)時(shí)。 提高部分(選做)

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

3、55,高八位與低八位應(yīng)分開(kāi)存儲(chǔ)。 2. 24小時(shí)制時(shí)鐘程序 本程序須可以構(gòu)建兩部分循環(huán)。首先構(gòu)建一個(gè)三重循環(huán)實(shí)現(xiàn)“一秒延時(shí)”,循環(huán)體利用NOP指令(單字節(jié)指令,1µs)經(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.加一減一程序 先初始化P1和P2,然后當(dāng)P3低四位均為0作為開(kāi)始計(jì)數(shù)的標(biāo)志,每次計(jì)數(shù)中插一個(gè)延時(shí)程序。P3.7為0時(shí)進(jìn)行加1計(jì)數(shù):先把低2位從P2中取出至A,對(duì)A進(jìn)行AD

4、D加一計(jì)數(shù)并進(jìn)行十進(jìn)制修正,然后存進(jìn)P2;再把高2位從P1取出至A,對(duì)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位無(wú)符號(hào)數(shù)為30H,把片外地址4000H分配給它,把片外地址4001H和4002H分配給經(jīng)分段函數(shù)計(jì)算得到的結(jié)果Y。按位取反計(jì)算結(jié)果存于4001H單元,而除法計(jì)算結(jié)果的商與余數(shù)和乘方計(jì)算中結(jié)果的高、低八位分開(kāi)存儲(chǔ)于4001H-4002H單元。用寄存器A,B

5、來(lái)存放在乘除運(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,將十進(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ù)。   &

6、#160;      4、 流程圖 1.分段函數(shù) (DPTR)A 存X于片外RAM 設(shè)置數(shù)據(jù)指針 X賦值 AX 開(kāi)始 A20 N Y Y=/XCY1? N(4001H)A CY0 YY=X/2CY1?A40? N Y Y=X² Y N (4001H)A (4002H)B 結(jié)束2. 時(shí)鐘程序 開(kāi)始 PO0 P10 P20 P30 P3.0=0 ?N Y 延時(shí)1s 秒鐘計(jì)數(shù),R0加1AR0,并轉(zhuǎn)換成BCD碼 P2A R0=60H ?Y N R00 P20 分鐘計(jì)數(shù),R1加1AR1, 并轉(zhuǎn)換為BCD碼NR1=60H ? P1A R

7、10 P10 Y 時(shí)鐘計(jì)數(shù),R2加1AR2,并轉(zhuǎn)換為BCDR20 P00 P0A R2=24 ? N Y 5 源代碼1.分段函數(shù) ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV A, #30H ;將8位無(wú)符號(hào)數(shù)賦給A MOV DPTR, #4000H ;定義數(shù)據(jù)指針 MOVX DPTR, A ;將X存于片外RAM CLR C ;將進(jìn)位位清零KIND1:CJNE A, #14H, KIND2 ;將A與14H比較,若不等于14H,跳轉(zhuǎn)至KIND2OUT1: CPL A ;對(duì)A中內(nèi)容取反 MOV DPTR, #4001H ;定義數(shù)據(jù)指針 MOVX DPTR, A ;將計(jì)

8、算結(jié)果存于片外地址4001H SJMP DONEKIND2:JNC KIND3 ;判斷進(jìn)位位CY是否為0,若為0,跳轉(zhuǎn)至KIND3 SJMP OUT1 ;否則跳轉(zhuǎn)至OUT1KIND3:CLR C ;將進(jìn)位位清零 CJNE A,#28H, KIND4 ;將A中內(nèi)容與28H比較,若不等于28H,跳轉(zhuǎn)至KIND4OUT2: MOV B,A ;將A中內(nèi)容賦給B MUL AB ;計(jì)算X的平方,將結(jié)果高八位存于B,低八位存于A MOV DPTR, #4001H ;定義數(shù)據(jù)指針 MOVX DPTR,A ;將結(jié)果低八位存于片外地址4001H INC DPTR ;數(shù)據(jù)指針加一 MOV A,B ;將B中內(nèi)容賦給A

9、 MOVX DPTR,A ;將結(jié)果高八位存于片外地址4002H SJMP DONEKIND4:JNC OUT2 ;判斷進(jìn)位位是否為0,若為0,跳轉(zhuǎn)至OUT2 SJMP OUT3 ;否則跳轉(zhuǎn)至OUT3OUT3: MOV B,#02H DIV AB ;計(jì)算X/2,將商存于A,余數(shù)存于B MOV DPTR,#4001H ;定義數(shù)據(jù)指針 MOVX DPTR,A ;將商存于片外地址4001H INC DPTR ;數(shù)據(jù)指針加1 MOV A,B MOVX DPTR,A ;將余數(shù)存于片外地址4002H SJMP DONEDONE: SJMP $ END2. 時(shí)鐘程序 ORG 0000H LJMP MAIN O

10、RG 0100HMAIN:MOV R0,#00HMOV P0,#00H ;時(shí)鐘位清零MOV P1,#00H ;分鐘位清零MOV P2,#00H ;秒鐘位清零START:JB P3.0,START ;P3.0為低電平開(kāi)始計(jì)數(shù),高電平停止計(jì)數(shù) MOV R2,P2 ;P2的值存入R2 CJNE R2,#60H,DEL ;秒鐘達(dá)到60繼續(xù),不足60跳轉(zhuǎn) MOV P2,#00H ;秒鐘清零MOV A,P1ADD A,#01H ;分鐘位加1 DA A ;分鐘位改為BCD碼 MOV P1,A MOV R1,P1 ;P1的值存入寄存器R1 CJNE R1,#60H,DEL;分鐘達(dá)到60繼續(xù),不足60跳轉(zhuǎn) MO

11、V P1,#00H;分鐘清零 MOV A,R0 ADD A,#01H;時(shí)鐘位加1 DA A;時(shí)鐘位改為BCD碼 MOV R0,A MOV P0,A CJNE R0,#24H,DEL;時(shí)鐘達(dá)到24繼續(xù),不足24跳轉(zhuǎn) MOV P0,#00H ;時(shí)鐘位清零 MOV R0,#00HDEL: MOV R7,#24 ;延時(shí)程序LOOP1: MOV R6,#61LOOP2: MOV R5,#170LOOP3: NOP NOP DJNZ R5,LOOP3 DJNZ R6,LOOP2 DJNZ R7,LOOP1 MOV A,P2 ADD A,#01H;秒鐘位加1 DA A MOV P2,A SJMP START

12、END3. 加一減一程序 ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV P1,#00H ;P1端口置零MOV P2,#00H;P2端口置零MOV P3,#7FH ;P3端口置#7FHSTART:JB P3.0,STARTJB P3.1,STARTJB P3.2,STARTJB P3.3,START;判斷是否開(kāi)始計(jì)時(shí)LJMP DELAY;跳轉(zhuǎn)到延時(shí)子程序DELAY:MOV R7,#24DEL1: MOV R6,#61DEL2: MOV R5,#170DEL3: NOP NOP DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1;延時(shí)1秒J

13、B P3.7 ,DOWN;P3.7為0時(shí),加1計(jì)數(shù);P3.7為1時(shí),減1計(jì)數(shù)LJMP UP DOWN:MOV A,P2CLR CSUBB A,#01HMOV R1,AANL A,#0FHMOV R7,AMOV A,R1ANL A,#0F0HMOV R1,AMOVA,P1SUBB A,#00HMOV R0,AANLA,#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,#09HLO

14、OP3:CJNE R0,#0F0H,LOOP4MOV R0,#90HLOOP4:MOV A,R1ADD A,R7DA 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ù)子程序END6、 程序測(cè)試方法與結(jié)果、軟件性能分析1.分段函數(shù)對(duì)于分段函數(shù)的問(wèn)題,可以將X設(shè)為某一值,運(yùn)行程序,觀察各個(gè)寄存器及有關(guān)地址中內(nèi)容,進(jìn)行驗(yàn)證。截圖如下: (1)X=30H (2)X=0AH (3)X

15、=18H經(jīng)驗(yàn)證,所有結(jié)果正確,且運(yùn)行程序過(guò)程中并未出現(xiàn)任何問(wèn)題,故源程序正確 2.24小時(shí)時(shí)鐘程序 附加:思考題 1實(shí)現(xiàn)多分支結(jié)構(gòu)程序的主要方法有哪些?舉例說(shuō)明。 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),如DJNZ,JNC等等 例如:例如,判斷兩個(gè)單字節(jié)無(wú)符號(hào)數(shù)的大?。ǚ謩e存于片內(nèi) RAM 的 40H 和 41H 單元)并把大數(shù)存入 42H 單元??梢杂门袛?CY 的轉(zhuǎn)移指令 JNC 來(lái)實(shí)現(xiàn),程序如下:JUDGE:MOV A,40H CLR C SUBB A,41H JNC LP MOV 42H,41H

16、RETLP: MOV 42H,40H RET 二是利用分支表來(lái)實(shí)現(xiàn),如分支地址表、轉(zhuǎn)移指令表、地址偏移量表。例如:根據(jù) R3 的值控制轉(zhuǎn)向 8 個(gè)分支程序。采用分支地址表實(shí)現(xiàn):MOV DPTR,#BRATAB ;取表首地址MOV A,R3ADD A,R3 ;AR3×2JNC NADDINC DPH ;R3×2 進(jìn)位加到 DPHNADD:MOV A,R4 ;暫存 AMOVC A,A+DPTR ;取分支地址高 8 位XCH A,R4INC AMOVC A,A+DPTR ;取分支地址低 8 位MOV DPL,A ;分支地址低 8 位送 DPLMOV DPH,R4 ;分支地址高 8 位送 DPHCLR AJMP A+DPTR ;轉(zhuǎn)相應(yīng)分支程序BRATAB: DW SUBR0 ;分支地址表DW SUBRDW

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論