資源描述:
《分支程序設(shè)計實驗》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、··《單片機實驗》報告實驗名稱分支程序設(shè)計實驗指導(dǎo)教師劉冬生專業(yè)班級電子1103班姓名XXXXXX學(xué)號XXXXXXXXXXX聯(lián)系方式XXXXXXXXXXX·······一、任務(wù)要求熟練掌握KeilC環(huán)境下匯編語言程序的調(diào)試方法,加深對匯編語言指令、機器碼、尋址方式等基本內(nèi)容的理解,掌握分支程序和簡單程序的設(shè)計與調(diào)試方法,了解并行IO口的使用1.設(shè)有8bits符號數(shù)X存于外部RAM單元,按以下方式計算后的結(jié)果Y也存于外部RAM單元,請按要求編寫程序。2.利用51系列單片機設(shè)計一個24小時制電子時鐘,電子時鐘的時、分、秒數(shù)值分別通過P0、P1、P2端口輸出(以壓縮
2、BCD碼的形式)。P3.0為低電平時開始計時,為高電平時停止計時。提高部分(選做):a.實現(xiàn)4位十進制加、減1計數(shù),千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計數(shù)方式。b.利用P3口低四位狀態(tài)控制開始和停止計數(shù),控制方式自定。思考題:1.實現(xiàn)多分支結(jié)構(gòu)程序的主要方法有哪些?舉例說明。2.在編程上,十進制加1計數(shù)器與十六進制加1計數(shù)器的區(qū)別是什么?怎樣用十進制加法指令實現(xiàn)減1計數(shù)?二、設(shè)計思路1.分段函數(shù)設(shè)計?第一個任務(wù)相當于一個分段函數(shù)程序,根據(jù)變量X的值所處的區(qū)間進行相應(yīng)的計算。可利用比較轉(zhuǎn)移指令CJNE來判斷X是否等于臨界值
3、20、40,若不等,再根據(jù)執(zhí)行CJNE指令后的進位位CY的值來判斷X與臨界值的的大小關(guān)系,易知CY=0則X大于臨界值,CY=1則X小于臨界值;如此,再進行相應(yīng)的計算。另外若乘方運算結(jié)果大于255,高八位與低八位應(yīng)分開存儲;本次除法采用右移一位來處理,未考慮余數(shù)。2.?24小時制時鐘程序?首先構(gòu)建一個三重循環(huán)實現(xiàn)“一秒延時”,循環(huán)體利用NOP指令(單字節(jié)指令,1μ·······s)經(jīng)多次循環(huán)達到延時一秒的效果。再利用已經(jīng)構(gòu)建好的“一秒延時”部分,設(shè)計計時系統(tǒng):秒(0-59)、分(0-59)、時(0-23)。需要注意的是,在小時、分、秒達到59時,下一次應(yīng)該為零。
4、程序運行時修改P3.0的值可以實現(xiàn)暫停和繼續(xù)的功能。三、資源分配1.分段函數(shù)????假設(shè)該8位無符號數(shù)的地址2000H分配給它,把片外地址2001H和2002H分配給經(jīng)分段函數(shù)計算得到的結(jié)果Y。按位取反計算結(jié)果存于2001H單元,乘方計算中結(jié)果的高、低八位分開存儲于2001H-2002H單元,除法運算結(jié)果放在2001H中。寄存器A,B存放在乘除運算中所得的中間結(jié)果。????????2.二十四小時制時鐘????工作寄存器R0、R1、R2分別用于秒、分、時循環(huán)次數(shù)的計數(shù),R5-R7用于“一秒延時”循環(huán)中的循環(huán)次數(shù)設(shè)定。秒、分、時數(shù)值分別由P2、P1、P0端口輸出。
5、四、流程圖1.分段函數(shù)·······開始將C置零取出外部數(shù)據(jù)是否大于20取反并存儲結(jié)果是否小于40平方并存儲結(jié)果除以2并存儲結(jié)果結(jié)束否否是是·······?2.二十四小時制時鐘開始P3.0=1?等待端口初始化,輸出端口置0;計數(shù)R0、R1、R2置1延時1秒,P2←R2,R2加1,并轉(zhuǎn)化為十進制R6=60H?R2置1,P2置0,P1←R1R1加1,并轉(zhuǎn)化為十進制R1=60H?R2、R1置1,P2、P1置0,P0←R0,R0加1,并轉(zhuǎn)化為十進制R0=24H?是否否否否是是是·······五、源代碼(含文件頭說明、資源使用說明、語句行注釋)1.分段函數(shù)?clrc;清
6、零movdptr,#2000h;取外部數(shù)據(jù)movxa,@dptr//mova,#1hcjnea,#14h,cmp20;與20比較大小qufan:cpla;incdptrmovx@dptr,asjmpjieshucmp20:jcqufancjnea,#28h,cmp40;與40比較大小sq:movr7,a;平方movb,r7mulabincdptrmovx@dptr,amova,bincdptrmovx@dptr,asjmpjieshucmp40:jncsqchu2:rra;除以2(右移一位)incdptrmovx@dptr,asjmpjieshujieshu:
7、nopend·······?2.二十四小時制時鐘start:movr0,#01h;寄存器初始化movr1,#01hmovr2,#01hmovp0,#00h;端口初始化movp1,#00hmovp2,#00hmova,#0//setbp3.0;設(shè)置、判斷p3.0clrp3.0jbp3.0,$onesec:movr7,#10;1秒延時del1:movr6,#200nopdel2:movr5,#248del3:djnzr5,del3djnzr6,del2djnzr7,del1movp2,r2;把秒數(shù)送入p2mova,r2adda,#01hdaamovr2,acjne
8、r2,#60h,onesec;判斷r2