版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 96單片機課程設(shè)計報告</p><p> 一、課程設(shè)計的目的:</p><p> 這次單片機課程設(shè)計布置在暑假到開學(xué)初,暑假大多數(shù)同學(xué)都沒有完成,即使完成了程序的初步構(gòu)想以及編寫,但是如果沒有仿真機的話還是不能夠完成課程設(shè)計的。所以在開學(xué)初這三周時間,才是96單片機課程設(shè)計完成的主體時間。</p><p> 由于暑假的原因,單片機的內(nèi)容在
2、兩個月內(nèi)忘記了不少,至少我是這樣。所以在開學(xué)的時候開始寫程序都是一直翻書,并且尋找原來的實驗參考資料,找回一些記憶,也是為了盡量避免在做課程設(shè)計的時候出現(xiàn)過多的錯誤:這些事情都讓我逐漸恢復(fù)對MCS-96單片機的了解,這次課程設(shè)計期間,我犯過很多錯誤,但是每一次的發(fā)現(xiàn)與改正都讓我印象特別深刻;每一步的程序編寫、調(diào)試過程,都讓我對這門課多一點理解,所謂溫故而知新。</p><p> 二、課程設(shè)計的內(nèi)容:</p
3、><p> 1、在仿真機的LED上顯示自己學(xué)號的后8位</p><p> 2、開平方計算器:對1~99999999范圍內(nèi)的數(shù)進行開平方操作,精確到6位有效數(shù)據(jù)。鍵盤數(shù)據(jù)輸入,LED顯示結(jié)果。(每班一組)</p><p> 三、課程設(shè)計的原理:</p><p><b> 程序主體結(jié)構(gòu)框圖:</b></p>
4、<p><b> 開方的流程圖:</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p>
5、<p><b> N</b></p><p><b> Y</b></p><p> NY/顯示學(xué)號</p><p> 課設(shè)的主要內(nèi)容是對1~99999999范圍內(nèi)的數(shù)進行開平方操作,實驗原理主要涉及開方算法;當時想到的有迭代法、手算開方的算法,現(xiàn)在比較兩種算法的思路:</p&g
6、t;<p> 1)迭代法。迭代法首先需要尋找最高位,即通過把被開方數(shù)除以100的n次冪,寫成X00…00的形式,X可以是1~99,第一次迭代開始,跌代數(shù)寫成Y0…0形式,Y從9迭代到0,</p><p> 比較平方,小于跌代數(shù)的平方則存儲第一位的Y值,求取余數(shù),跳出第一層循環(huán),之后重復(fù)操作。其中在個位數(shù)時取小數(shù)點。</p><p> 2)手算開方法。這種算法首先把被開方
7、數(shù)從小數(shù)點開始,每兩位兩位地取數(shù),開方時從最高2位開始,從9迭代到0的XL求出最高位的一位數(shù),存儲該數(shù)XL,以及一次操作的余數(shù)YUSHU,之后每次開方都需要對XX乘以10加上XL,得到新的XX;XX乘以20,再加上XL,乘以XL,得到Y(jié)Y;余數(shù)乘以100再加上后兩位,得到ZZ ;YY乘以XL得到WW,比較ZZ、WW,WW小則存儲XL,推出一次循環(huán)迭代;同樣小數(shù)點需要注意。</p><p> 算法比較:第一種算法
8、比較容易理解,算法簡單,即層層迭代;但是在出現(xiàn)小數(shù)時就已經(jīng)計算復(fù)雜,由于96單片機的乘法MULU,MUL等都是對整數(shù)處理,故需要乘以10的幾次冪,轉(zhuǎn)化為整數(shù),另外在取到6位有效數(shù)字時, ,已經(jīng)超出了雙字的范圍,所以數(shù)字處理比較困難。</p><p> 第二種算法則不存在第一種算法的困難,但是前期處理啰嗦,結(jié)構(gòu)復(fù)雜。</p><p> 程序設(shè)計的主體思路,我想到并且比較的就是這兩個,當然
9、我相信還有其他的算法,可以實現(xiàn)課程設(shè)計要求。由比較可知,我選擇第二種算法。</p><p><b> 五、程序清單:</b></p><p> ;--------------------------------------------------------------</p><p> C8255 EQU 0C006H
10、 ;8255命令口地址</p><p> P8255A EQU 0C000H ;8255 PA口地址</p><p> P8255B EQU 0C002H ;8255 PB口地址</p><p>
11、; P8255C EQU 0C004H ;8255 PC口地址</p><p> ;---------------------------------------------------------------</p><p> AX EQU 20H </p><p> AL
12、 EQU 20H </p><p> AH EQU 21H</p><p> BL EQU 22H</p><p> BHEQU 23H</p><p> BX EQU 22H</p><p> CX EQU 24H
13、</p><p> DX EQU 26H</p><p> DL EQU 26H</p><p> EX EQU 28H</p><p> XL EQU 30H</p><p> XH EQU 31H</p>
14、<p> XX EQU 34H</p><p> XXL EQU 34H</p><p> XXH EQU 36H</p><p> YY EQU 38H</p><p> YYL EQU 38H</p><p
15、> YYH EQU 3AH</p><p> ZZ EQU 3CH</p><p> ZZL EQU 3CH</p><p> ZZH EQU 3EH</p><p> WW EQU 40H</p><p> W
16、WL EQU 40H</p><p> WWH EQU 42H</p><p> YUSHU EQU 44H</p><p> YUSHUL EQU 44H</p><p> YUSHUH EQU 46H</p><p>
17、 TEMP EQU 50H</p><p> ;---------------------------------------------------------------</p><p> ORG 2080H</p><p> LD SP,#0FCH</p><p> LDB AL
18、,#82H ;PB口輸入,PA,PC口輸出</p><p> STB AL,C8255[0] </p><p> LDB AL,#08H ;使PC3置1</p><p> STB AL,P8255C </p>
19、;<p><b> RD_KB0:</b></p><p> LDB AL,P8255B[0]</p><p> XORB AL,#0FFH</p><p> JBS AL,0,STUNO;掃描鍵盤按0則跳到輸出學(xué)號,1則跳轉(zhuǎn)SQRT</p><p> JBS AL,1,TIAOQU;&l
20、t;/p><p> SJMP RD_KB0</p><p> TIAOQU:LJMP SQRT</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> STUNO: LD BX,#00H</p><p> LDB
21、 AL,#0E0H</p><p> STB AL,P8255C</p><p> SCALL DISP0</p><p> LCALL DELAY</p><p> LDB AH,#07H</p><p> LOOP0: SUBB AL,#20H</p><p>
22、;<b> INC BX</b></p><p> STB AL,P8255C</p><p> LCALL DISP0</p><p> LCALL DELAY</p><p> DJNZ AH,LOOP0</p><p> LDB AL,P8255B[
23、0]</p><p> XORB AL,#0FFH </p><p> JBS AL,1,SQRT;循環(huán)掃描按‘1’跳到SQRT,否則順序執(zhí)行</p><p> SJMP STUNO</p><p> ;------------------------------------------------------------
24、--- </p><p><b> DISP0:</b></p><p> LDB DL,DL_DAT0[BX] ;顯示鍵值</p><p> STB DL,P8255A</p><p><b> RET</b></p>
25、<p> ;-----------------------------------------------------------------------</p><p> DL_DAT0:DB 3FH,3FH,7FH,06H,06H,7FH,5BH,3FH;顯示學(xué)號00811820</p><p> ;---------------------------------
26、------------------------------ </p><p> DELAY: LD DX,#0ED0H ;延時子程序12MS</p><p> DELAY1: DEC DX</p><p> JNE DELAY1</p><p>&
27、lt;b> RET</b></p><p> ;-----------------------------------------------------------------</p><p><b> DELAY2:</b></p><p> SCALL DELAY</p><p> DJ
28、NZ BL,DELAY2</p><p><b> RET</b></p><p> ;---------------------------------------------------------------</p><p><b> RD_KB:</b></p><p> LDB
29、 BL,#0AH ;鍵盤掃描第一行</p><p> STB BL,P8255C[0]</p><p><b> SKIP</b></p><p><b> SKIP</b></p><p> LDB AL,P8255B
30、[0] ;讀鍵值</p><p> XORB AL,#0FFH</p><p> JNE KEYVAL ;判鍵是否按下</p><p> LDB BL,#09H ;掃描第二行</p>
31、;<p> STB BL,P8255C[0]</p><p><b> SKIP</b></p><p><b> SKIP</b></p><p> LDB AL,P8255B[0]</p><p> XORB AL,#0FFH</p>
32、<p> JE NOKEY</p><p> KEYVAL: ;計算鍵碼</p><p> ANDB BL,#01H</p><p> SHL BL,#03H</p><p> LDB AH,AL</p
33、><p> LDB AL,#0FFH</p><p> SHIFT: INCB AL</p><p> SHRB AH,#01H</p><p> JNC SHIFT</p><p> ORB AL,BL</p><p> SCALL DELAY
34、</p><p> SJMP KBEXIT</p><p> NOKEY: LD AL,#10H</p><p><b> KBEXIT:</b></p><p><b> RET</b></p><p> ;-------------------
35、--------------------------------------------</p><p> ;--------------------------------------------------------------</p><p> ;-----------------------------------------------------------------&
36、lt;/p><p><b> SQRT:</b></p><p> LDB BL,#100</p><p> LCALL DELAY2</p><p> LD CX,#3000H</p><p> LDB XH,#0E0H</p><p> LDB XL,#08H&
37、lt;/p><p> LD AX,#00H</p><p><b> INPUT:</b></p><p> SCALL RD_KB</p><p> JBS AL,4,INPUT</p><p> ST AX,[CX]+ ;把輸入的數(shù)存到3000H至300EH</p>
38、;<p> STB XH,P8255C</p><p><b> LD BX,AX</b></p><p> SCALL DISP</p><p> LDB BL,#20</p><p> LCALL DELAY2;延時</p><p> SUBB XH,#20H<
39、/p><p> DJNZ XL,INPUT</p><p> ;---------------------------------------------------------------</p><p> LD DX,#0AH</p><p> LDB XL,#07H</p><p> LD CX,#3000
40、H</p><p><b> CLR XXL</b></p><p><b> CLR XXH</b></p><p> LD XXL,[CX]+</p><p><b> SUM: </b></p><p><b> LD AX,X
41、XH</b></p><p> MULU XX,DX ;高字被改寫???低位乘以10</p><p> MULU YY,AX,DX ;YY是一個雙字,高位乘以10</p><p> ADD XXL,[CX]+</p><p> ADDC XXH,YY;進位時是否已經(jīng)加1???</p>
42、;<p> DJNZ XL,SUM ;XX存儲輸入數(shù)據(jù)</p><p><b> KF:</b></p><p> LD YYL,XXL</p><p> LD YYH,XXH</p><p> LD DX,#100</p><p> DIVU YY,#10
43、000</p><p> DIVUB YYL,#100</p><p> DIVUB YYH,#100;兩位兩位存儲在YY開始的四個字節(jié)</p><p> LDB XL,#0AH</p><p> LD AX,#00H</p><p> LD CX,#3000H</p><p>
44、 QING0: ;3000H以后10字清零</p><p> ST AX,[CX]+</p><p> DJNZ XL,QING0</p><p> LD CX,#3002H</p><p> STB YYL,[CX];把四個2位數(shù)存到3002,3004,3006,3008&l
45、t;/p><p> ADD CX,#02H</p><p> STB 39H,[CX]</p><p> ADD CX,#02H</p><p> STB 3AH,[CX]</p><p> ADD CX,#02H</p><p> STB 3BH
46、,[CX]</p><p> ADD CX,#02H</p><p> :-----------------------------------------------------------------------------------------------------</p><p> LD CX,#3000H</p>&
47、lt;p> LD EX,#3200H</p><p> LDB XH,#00H</p><p> LDB BL,#0AH</p><p> LD XXL,#00H;商</p><p> LD XXH,#00H;</p><p> LD YYL,#00H;被除數(shù)</p><
48、;p> LD YYH,#00H;</p><p> LDB ZZL,[CX];被減數(shù)</p><p> LD ZZH,#00H;</p><p> LD WWL,#00H;減數(shù)</p><p> LD WWH,#00H;</p><p> LD YUSHUL,#00H;余數(shù)&l
49、t;/p><p> LD YUSHUH,#00H</p><p><b> LOOP01:</b></p><p> LD AX,[CX]+;每次大循環(huán),CX自增一個2</p><p> LCALL DELAY</p><p> LDB 5AH,#0AH</p><
50、p><b> LOOP1: </b></p><p> LDB XL,5AH</p><p><b> DECB XL</b></p><p> LD YYL,XXL;yy的求解</p><p> LD AX,XXH</p><p> MULU
51、YY,#14H ;高字被改寫???低位乘以20</p><p> MULU TEMP,AX,#14H ;temp是一個雙字,高位乘以20</p><p> ADDB YYL,XL</p><p> ADDC YYH,TEMP;進位時是否已經(jīng)加1???YY雙字</p><p> ;余數(shù)乘以100加[CX]+,
52、成為ZZ,余數(shù)還未處理</p><p> LD ZZL,YUSHUL</p><p> LD AX,YUSHUH</p><p> MULU ZZ,#64H</p><p> MULU TEMP,AX,#64H</p><p> ADD ZZL,[CX];3000以后一個字一個字地取</p>
53、;<p> ADDC ZZH,TEMP</p><p> ;YY乘以XL得到WW</p><p> LD WWL,YYL</p><p><b> LD AX,YYH</b></p><p> MULU WW,XL</p><p> MULU TEMP,AX,XL<
54、/p><p> ADD WWH,TEMP</p><p> ;求XX YUSHU</p><p> CMP ZZH,WWH</p><p> JLT THERE;高位小則取消該XL</p><p> JGTHERE;高位大則取XL</p><p> LDB
55、54H,3DH</p><p> LDB 55H,#00H</p><p> LDB 56H,41H</p><p> LDB 57H,#00H</p><p> CMP 54H,56H</p><p> JLT THERE;第二字節(jié)小則不要XL</p><p> JGT
56、 HERE</p><p> LDB 54H,3CH</p><p> LDB 55H,#00H</p><p> LDB 56H,40H</p><p> LDB 57H,#00H</p><p> CMP 54H,56H</p><p> JGE HERE; 高位相等
57、,低位大于等于則HERE</p><p> THERE:DJNZ 5AH,LOOP1</p><p> HERE:;ZZ大于等于WW相減取余數(shù),取XL</p><p> SUB ZZL,WWL</p><p> SUBC ZZH,WWH</p><p> LD YUSHUL,ZZL</p>
58、;<p> LD YUSHUH,ZZH;得到每一次的余數(shù)</p><p> ;XX乘以10加XL得到XX,</p><p> LD 48H,XXL</p><p><b> LD AX,XXH</b></p><p> MULU 48H,#0AH</p><p>
59、MULU TEMP,AX,#0AH</p><p> ADD 48H,XL</p><p> ADD 4AH,TEMP;進位時是否已經(jīng)加1???YY雙字</p><p> LD XXL,48H</p><p> LD XXH,4AH</p><p> ;存數(shù)碼,判斷XX大于0,判斷小數(shù)點,有效數(shù)字&
60、lt;/p><p> CMP XXH,#00H;只要高位或低位大于0則開始存儲</p><p> JNEHERE1;GAO->HERE1</p><p> CMP XXL,#00H;=0比較低位</p><p> JE THERE1;仍然=0,則不存儲</p><p> HERE1
61、:;有一個大于零</p><p> CMPB BL,#07H;第四次加小數(shù)點</p><p><b> JNE CUN</b></p><p> ADDB XL,#10H</p><p> STB XL,[EX]+</p><p> SJMP THERE1</p>
62、<p> CUN: STB XL,[EX]+;3200以后六個數(shù)</p><p><b> THERE1:</b></p><p> DJNZ BL,TIAO ;</p><p> SJMP XIANSHI</p><p> TIAO:LJMP LOOP01</p>
63、<p> ;----------------------------------------------------------</p><p><b> ;顯示結(jié)果</b></p><p><b> XIANSHI:</b></p><p> LD EX,#3200H</p><p
64、> LDB AL,#0A0H</p><p> LDB BX,[EX]+</p><p> STB AL,P8255C</p><p> SCALL DISP</p><p> LCALL DELAY</p><p> LDB AH,#05H</p><p
65、> LOOP2: SUBB AL,#20H</p><p> LDB BX,[EX]+</p><p> STB AL,P8255C</p><p> SCALL DISP</p><p> LCALL DELAY</p><p> DJNZ AH,LOOP2</p&
66、gt;<p> LDB AL,P8255B[0]</p><p> XORB AL,#0FFH </p><p> JBS AL,0,TIAOHUI;循環(huán)掃描按‘0’跳到STUNO,否則順序執(zhí)行</p><p> SJMP XIANSHI</p><p> TIAOHUI:LJMP STUNO;長
67、跳STUNO</p><p> ;---------------------------------------------------------------</p><p><b> DISP:</b></p><p> LDB DL,DL_DAT[BX] ;顯示鍵值</p>
68、<p> STB DL,P8255A ;P8255A[AX]</p><p><b> RET</b></p><p> ;---------------------------------------------------------------</p><p>&
69、lt;b> ORG 3100H</b></p><p> DL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7</p><p> DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F</p><p&g
70、t; DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H ;0.,1.,2.,3.,4.,5.,6.,7.</p><p> DB 0FFH,0EFH,77H,7CH,39H,5EH,79H,71H ;8.,9.,A,B,C,D,E,F</p><p> ;---------------------------------
71、------------------------------</p><p> ;---------------------------------------------------------------------</p><p><b> END</b></p><p> 六、調(diào)試過程錯誤記錄</p><p&g
72、t; ?。?)按“1”之后,直接就輸出結(jié)果,沒來得及輸入數(shù)據(jù)。</p><p> 在老師的提示下,在輸入存儲部分設(shè)置斷點,發(fā)現(xiàn)輸入部分已經(jīng)執(zhí)行,3002~3008全部顯示0B 00;所以加設(shè)輸入延時。</p><p><b> (2)跳轉(zhuǎn)部分:</b></p><p> CMP ZZH,WWH</p><p>
73、JLT THERE;高位小則取消該XL</p><p> JGTHERE;高位大則取XL</p><p> LDB 54H,3DH</p><p> LDB 55H,#00H</p><p> LDB 56H,41H</p><p> LDB 57H,#00H</p>&
74、lt;p> CMP 54H,56H</p><p> JLT THERE;第二字節(jié)小則不要XL</p><p> JGT HERE</p><p> LDB 54H,3CH</p><p> LDB 55H,#00H</p><p> LDB 56H,40H</p><
75、;p> LDB 57H,#00H</p><p> CMP 54H,56H</p><p> JGE HERE; 高位相等,低位大于等于則HERE</p><p> 開始寫的程序低位比較是CMPB ZZL,WWL</p><p><b> JGE HERE</b></p>&l
76、t;p> 輸入11111111后,小數(shù)位出現(xiàn)錯誤,手算過應(yīng)該在這一步XL=9時發(fā)生跳轉(zhuǎn),即ZZL是C3 56,WWL是75 EA,顯然WWL的高位大,但是JGE是有符號的比較,故后者為負數(shù),所以會順序執(zhí)行。我的解決方案是拆成直接比較,在擴展成字,高位字節(jié)清零。運行正常。</p><p> (3)再輸入“00000002”時,千位出線非零值。發(fā)現(xiàn)第一次內(nèi)循環(huán)時,XL=1時的余數(shù)溢出(ZZ—WW=0—1=F
77、F FF),原因是第一次DJNZ 操作之后XL為0,循序執(zhí)行,故XL等于零并沒有執(zhí)行一遍,故改為:</p><p> LDB 5AH,#0AH</p><p><b> LOOP1: </b></p><p> LDB XL,5AH</p><p><b> DECB XL</b></
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計報告
- 《單片機課程設(shè)計》報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告---單片機數(shù)字時鐘
- 單片機課程設(shè)計報告---單片機秒表系統(tǒng)設(shè)計
- 單片機課程設(shè)計報告——單片機控制步進電機
- 單片機課程設(shè)計報告---單片機控制秒表系統(tǒng)
- 單片機課程設(shè)計報告doc
- 單片機課程設(shè)計課題報告
- btec單片機課程設(shè)計報告
- 單片機應(yīng)用課程設(shè)計報告
- 單片機課程設(shè)計報告 (2)
- 單片機課程設(shè)計報告-日歷
- 單片機課程設(shè)計報告蜂鳴器
- 單片機課程設(shè)計報告 (2)
評論
0/150
提交評論