96單片機(jī)課程設(shè)計(jì)報(bào)告_第1頁
96單片機(jī)課程設(shè)計(jì)報(bào)告_第2頁
96單片機(jī)課程設(shè)計(jì)報(bào)告_第3頁
96單片機(jī)課程設(shè)計(jì)報(bào)告_第4頁
96單片機(jī)課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、96單片機(jī)課程設(shè)計(jì)報(bào)告一、課程設(shè)計(jì)的目的:這次單片機(jī)課程設(shè)計(jì)布置在暑假到開學(xué)初,暑假大多數(shù)同學(xué)都沒有完成,即使完成了程序的初步構(gòu)想以及編寫,但是如果沒有仿真機(jī)的話還是不能夠完成課程設(shè)計(jì)的。所以在開學(xué)初這三周時(shí)間,才是96單片機(jī)課程設(shè)計(jì)完成的主體時(shí)間。由于暑假的原因,單片機(jī)的內(nèi)容在兩個(gè)月內(nèi)忘記了不少,至少我是這樣。所以在開學(xué)的時(shí)候開始寫程序都是一直翻書,并且尋找原來的實(shí)驗(yàn)參考資料,找回一些記憶,也是為了盡量避免在做課程設(shè)計(jì)的時(shí)候出現(xiàn)過多的錯(cuò)誤:這些事情都讓我逐漸恢復(fù)對mcs-96單片機(jī)的了解,這次課程設(shè)計(jì)期間,我犯過很多錯(cuò)誤,但是每一次的發(fā)現(xiàn)與改正都讓我印象特別深刻;每一步的程序編寫、調(diào)試過程,

2、都讓我對這門課多一點(diǎn)理解,所謂溫故而知新。二、課程設(shè)計(jì)的內(nèi)容:1、在仿真機(jī)的led上顯示自己學(xué)號的后8位2、開平方計(jì)算器:對199999999范圍內(nèi)的數(shù)進(jìn)行開平方操作,精確到6位有效數(shù)據(jù)。鍵盤數(shù)據(jù)輸入,led顯示結(jié)果。(每班一組)三、課程設(shè)計(jì)的原理:等待以及鍵盤循環(huán)掃描程序主體結(jié)構(gòu)框圖:按“1”按“0”顯示學(xué)號,鍵盤按“1”則跳轉(zhuǎn)進(jìn)入開方運(yùn)算開方運(yùn)算程序,鍵盤按“0”則跳轉(zhuǎn)進(jìn)入現(xiàn)實(shí)學(xué)號。按“0”或“1”按“1”則開始開方 sqrt開方的流程圖:延時(shí)等待輸入數(shù)據(jù)循環(huán)八次,輸入數(shù)據(jù)把輸入的數(shù)據(jù)存儲到3000h到300ehxl=0?數(shù)碼帶權(quán)求和把被開方數(shù)兩位兩位分開,并存儲到30023008,之后五

3、個(gè)字節(jié)清零90迭代,計(jì)算每一位有效數(shù)字xx0?bl=0?顯示結(jié)果是否按“0”zz=ww?n yn存儲該位有效數(shù)字 yny ny/顯示學(xué)號課設(shè)的主要內(nèi)容是對199999999范圍內(nèi)的數(shù)進(jìn)行開平方操作,實(shí)驗(yàn)原理主要涉及開方算法;當(dāng)時(shí)想到的有迭代法、手算開方的算法,現(xiàn)在比較兩種算法的思路:1)迭代法。迭代法首先需要尋找最高位,即通過把被開方數(shù)除以100的n次冪,寫成x0000的形式,x可以是199,第一次迭代開始,跌代數(shù)寫成y00形式,y從9迭代到0,比較平方,小于跌代數(shù)的平方則存儲第一位的y值,求取余數(shù),跳出第一層循環(huán),之后重復(fù)操作。其中在個(gè)位數(shù)時(shí)取小數(shù)點(diǎn)。2)手算開方法。這種算法首先把被開方數(shù)從

4、小數(shù)點(diǎn)開始,每兩位兩位地取數(shù),開方時(shí)從最高2位開始,從9迭代到0的xl求出最高位的一位數(shù),存儲該數(shù)xl,以及一次操作的余數(shù)yushu,之后每次開方都需要對xx乘以10加上xl,得到新的xx;xx乘以20,再加上xl,乘以xl,得到y(tǒng)y;余數(shù)乘以100再加上后兩位,得到zz ;yy乘以xl得到ww,比較zz、ww,ww小則存儲xl,推出一次循環(huán)迭代;同樣小數(shù)點(diǎn)需要注意。算法比較:第一種算法比較容易理解,算法簡單,即層層迭代;但是在出現(xiàn)小數(shù)時(shí)就已經(jīng)計(jì)算復(fù)雜,由于96單片機(jī)的乘法mulu,mul等都是對整數(shù)處理,故需要乘以10的幾次冪,轉(zhuǎn)化為整數(shù),另外在取到6位有效數(shù)字時(shí),106106=101224

5、0,已經(jīng)超出了雙字的范圍,所以數(shù)字處理比較困難。第二種算法則不存在第一種算法的困難,但是前期處理啰嗦,結(jié)構(gòu)復(fù)雜。 程序設(shè)計(jì)的主體思路,我想到并且比較的就是這兩個(gè),當(dāng)然我相信還有其他的算法,可以實(shí)現(xiàn)課程設(shè)計(jì)要求。由比較可知,我選擇第二種算法。五、程序清單:;-c8255 equ 0c006h ;8255命令口地址p8255a equ 0c000h ;8255 pa口地址p8255b equ 0c002h ;8255 pb口地址p8255c equ 0c004h ;8255 pc口地址;-ax equ 20h al equ 20h ah equ 21hbl equ 22hbhequ 23hbx e

6、qu 22hcx equ 24hdx equ 26hdl equ 26hex equ 28hxl equ 30hxh equ 31hxx equ 34hxxl equ 34hxxh equ 36hyy equ 38hyyl equ 38hyyh equ 3ahzz equ 3chzzl equ 3chzzh equ 3ehww equ 40hwwl equ 40hwwh equ 42hyushu equ 44hyushul equ 44hyushuh equ 46htemp equ 50h;- org 2080h ld sp,#0fch ldb al,#82h ;pb口輸入,pa,pc口輸出

7、stb al,c82550 ldb al,#08h ;使pc3置1stb al,p8255c rd_kb0:ldb al,p8255b0xorb al,#0ffhjbs al,0,stuno;掃描鍵盤按0則跳到輸出學(xué)號,1則跳轉(zhuǎn)sqrtjbs al,1,tiaoqu;sjmp rd_kb0tiaoqu:ljmp sqrt;stuno: ld bx,#00h ldb al,#0e0hstb al,p8255cscall disp0lcall delayldb ah,#07h loop0: subb al,#20hinc bxstb al,p8255clcall disp0lcall delayd

8、jnz ah,loop0ldb al,p8255b0xorb al,#0ffh jbs al,1,sqrt;循環(huán)掃描按1跳到sqrt,否則順序執(zhí)行sjmp stuno;- disp0: ldb dl,dl_dat0bx ;顯示鍵值 stb dl,p8255a ret ;-dl_dat0:db 3fh,3fh,7fh,06h,06h,7fh,5bh,3fh;顯示學(xué)號00811820 ;- delay: ld dx,#0ed0h ;延時(shí)子程序12ms delay1: dec dx jne delay1 ret;-delay2:scall delaydjnz bl,delay2ret;-rd_kb:

9、 ldb bl,#0ah ;鍵盤掃描第一行 stb bl,p8255c0 skip skip ldb al,p8255b0 ;讀鍵值 xorb al,#0ffh jne keyval ;判鍵是否按下 ldb bl,#09h ;掃描第二行 stb bl,p8255c0 skip skip ldb al,p8255b0 xorb al,#0ffh je nokeykeyval: ;計(jì)算鍵碼 andb bl,#01h shl bl,#03h ldb ah,al ldb al,#0ffhshift: incb al shrb ah,#01h jnc shift orb al,bl scall dela

10、y sjmp kbexit nokey: ld al,#10hkbexit: ret;-;-;-sqrt:ldb bl,#100lcall delay2ld cx,#3000hldb xh,#0e0hldb xl,#08hld ax,#00hinput:scall rd_kbjbs al,4,inputst ax,cx+ ;把輸入的數(shù)存到3000h至300ehstb xh,p8255cld bx,axscall displdb bl,#20lcall delay2;延時(shí)subb xh,#20hdjnz xl,input;-ld dx,#0ahldb xl,#07hld cx,#3000hclr

11、 xxlclr xxhld xxl,cx+sum: ld ax,xxhmulu xx,dx ;高字被改寫?低位乘以10mulu yy,ax,dx ;yy是一個(gè)雙字,高位乘以10add xxl,cx+addc xxh,yy;進(jìn)位時(shí)是否已經(jīng)加1?djnz xl,sum ;xx存儲輸入數(shù)據(jù)kf:ld yyl,xxlld yyh,xxhld dx,#100divu yy,#10000divub yyl,#100divub yyh,#100;兩位兩位存儲在yy開始的四個(gè)字節(jié)ldb xl,#0ahld ax,#00h ld cx,#3000hqing0: ;3000h以后10字清零st ax,cx+djn

12、z xl,qing0ld cx,#3002hstb yyl,cx;把四個(gè)2位數(shù)存到3002,3004,3006,3008add cx,#02hstb 39h,cxadd cx,#02hstb 3ah,cxadd cx,#02hstb 3bh,cxadd cx,#02h:-ld cx,#3000hld ex,#3200hldb xh,#00hldb bl,#0ahld xxl,#00h;商ld xxh,#00h;ld yyl,#00h;被除數(shù)ld yyh,#00h;ldb zzl,cx;被減數(shù)ld zzh,#00h;ld wwl,#00h;減數(shù)ld wwh,#00h;ld yushul,#00h

13、;余數(shù)ld yushuh,#00hloop01:ld ax,cx+;每次大循環(huán),cx自增一個(gè)2lcall delayldb 5ah,#0ahloop1: ldb xl,5ahdecb xlld yyl,xxl;yy的求解ld ax,xxhmulu yy,#14h ;高字被改寫?低位乘以20mulu temp,ax,#14h ;temp是一個(gè)雙字,高位乘以20addb yyl,xladdc yyh,temp;進(jìn)位時(shí)是否已經(jīng)加1?yy雙字;余數(shù)乘以100加cx+,成為zz,余數(shù)還未處理ld zzl,yushulld ax,yushuhmulu zz,#64hmulu temp,ax,#64hadd

14、 zzl,cx;3000以后一個(gè)字一個(gè)字地取addc zzh,temp;yy乘以xl得到wwld wwl,yylld ax,yyhmulu ww,xlmulu temp,ax,xladd wwh,temp;求xx yushucmp zzh,wwhjlt there;高位小則取消該xljgthere;高位大則取xlldb 54h,3dhldb 55h,#00hldb 56h,41hldb 57h,#00hcmp 54h,56hjlt there;第二字節(jié)小則不要xljgt hereldb 54h,3chldb 55h,#00hldb 56h,40hldb 57h,#00hcmp 54h,56hj

15、ge here; 高位相等,低位大于等于則herethere:djnz 5ah,loop1 here:;zz大于等于ww相減取余數(shù),取xl sub zzl,wwl subc zzh,wwh ld yushul,zzl ld yushuh,zzh;得到每一次的余數(shù);xx乘以10加xl得到xx,ld 48h,xxlld ax,xxhmulu 48h,#0ahmulu temp,ax,#0ahadd 48h,xladd 4ah,temp;進(jìn)位時(shí)是否已經(jīng)加1?yy雙字ld xxl,48hld xxh,4ah;存數(shù)碼,判斷xx大于0,判斷小數(shù)點(diǎn),有效數(shù)字cmp xxh,#00h;只要高位或低位大于0則開

16、始存儲jnehere1;gao-here1cmp xxl,#00h;=0比較低位je there1;仍然=0,則不存儲here1:;有一個(gè)大于零cmpb bl,#07h;第四次加小數(shù)點(diǎn)jne cunaddb xl,#10hstb xl,ex+sjmp there1cun: stb xl,ex+;3200以后六個(gè)數(shù)there1:djnz bl,tiao ;sjmp xianshitiao:ljmp loop01;-;顯示結(jié)果xianshi: ld ex,#3200h ldb al,#0a0h ldb bx,ex+stb al,p8255cscall displcall delayldb ah,#

17、05h loop2: subb al,#20hldb bx,ex+stb al,p8255cscall displcall delaydjnz ah,loop2ldb al,p8255b0xorb al,#0ffh jbs al,0,tiaohui;循環(huán)掃描按0跳到stuno,否則順序執(zhí)行sjmp xianshitiaohui:ljmp stuno;長跳stuno;-disp: ldb dl,dl_datbx ;顯示鍵值 stb dl,p8255a ;p8255aax ret;-org 3100hdl_dat: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;0,1,2

18、,3,4,5,6,7 db 7fh,6fh,77h,7ch,39h,5eh,79h,71h ;8,9,a,b,c,d,e,f db 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h ;0.,1.,2.,3.,4.,5.,6.,7. db 0ffh,0efh,77h,7ch,39h,5eh,79h,71h ;8.,9.,a,b,c,d,e,f;-;-end六、調(diào)試過程錯(cuò)誤記錄(1)按“1”之后,直接就輸出結(jié)果,沒來得及輸入數(shù)據(jù)。在老師的提示下,在輸入存儲部分設(shè)置斷點(diǎn),發(fā)現(xiàn)輸入部分已經(jīng)執(zhí)行,30023008全部顯示0b 00;所以加設(shè)輸入延時(shí)。(2)跳轉(zhuǎn)部分:cmp zzh,wwhjl

溫馨提示

  • 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

提交評論