




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、da及ad轉(zhuǎn)換實驗報告sil自03張馳昱20100120281、d/a轉(zhuǎn)換用dac0832實現(xiàn)d/a轉(zhuǎn)換,使產(chǎn)生的模擬電壓波形分別為鋸齒波,三角波和正弦波要求:程序運行后等待鍵入(1) 若鍵入'1',則產(chǎn)生鋸齒波(2) 若鍵入'2',則產(chǎn)生三角波(3) 若鍵入'3',則產(chǎn)生正弦波(4) 若鍵入'4',則返回dos程序運行過程屮沒有新鍵入別的數(shù)字,則維持原狀不變,用示波器能觀測到連續(xù)的電壓波形。解決思路:先寫三個用于波形發(fā)生的過程,分別發(fā)出鋸齒波、三角波和正眩波。再寫一個每次從dac0832輸 出數(shù)據(jù)前都會調(diào)用的產(chǎn)生延遲的過程,在這
2、個過程中進行有無按鍵的判斷和分辨按鍵的判斷。主程序 先調(diào)用這個延遲的過程,這樣程序一旦運行起來就相當(dāng)于不斷的在檢測按鍵了。正弦波的值我是通過matlab生成和寫入文件,并保存在數(shù)據(jù)段里的。以下是生成一個周期256 個采樣sin值的matlab代碼:clear;clc;fid=fopen(1 sine.txt1z 1w1);s=round(sin(2*pi/256*1:256)*127.5+127.5); s=reshape(sa1616);for i=l:16fprintf(fid,1db 1);fprintf(fid, '%03xh, 'z s(:z i);fprintf(f
3、id, *n*);end源代碼:datas segmentdnumdb01hcsadddw0280hhint1db'teeth wave,0dh,0ah,'$'hint2db'triangle wave:0dh,0ah,$'hint3db'sine wave',0dh,0ah,$sinedb083h,086h,089h,08ch,08fh,092h,095h,098h,09bh,09eh,0a2h,0a5h,0a7h,0aah,0adh,0b0hdb0b3h,0b6h,0b9h,0bch,0beh,0clh,0c4h,0c6h,0c9h,
4、0cbh,0ceh,0d0h,0d3h,0d5h,0d7h,0dahdb0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0eeh,0f0h,0flh,0f3h,0f4h,0f5hdb0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh,0ffhdb0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h,0f5hdb0f4h,0f3h,0f:lh,0f0h,
5、0eeh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch,0dahdb0d7h,0d5h,0d3h,0d0h,0ceh,0cbh,0c9h,0c6h,0c4h,0clh,0beh,0bch,0b9h,0b6h,0b3h,0b0hdb0adh,0aah,0a7h,0a5h,0a2h,09eh,09bh,098h,095h,092h,08fh,08ch,089h,086h,083h,080hdb07ch,079h,076h/073h/070hz06dh,06ah,067h/064h,061h,05dh/05ah/058h,055h,052h,04
6、fhdb04ch,049h,046h/043hz041hz03eh/03bh,039h,036h,034h/031h,02fh,02ch,02ahz028h,025hdb023h,021h,01fh,01dh,01bh,019h,017h,015h,014h,012h,011h,00fh,00eh,00ch,00bh,00ahdb009h,007h/006h,005h,005h,004h/003h,002h/002h,001h/001h,001h,000h/000h/000h,000hdb000h/000h/000h,001h,001h,001h,002h,002h,003h,004h,005
7、hz005h/006h,007h,009h,00ahdb00bh,00chz00eh,00fh,011h,012h,014hz015h,017h,019h,01bh/01dh,01fh/021hz023h,025hdb028h,02ah,02ch,02fh,031h,034h,036h,039h,03bh,03eh,041h/043hz046h,049h,04ch/04fhdb052h,055h/058h/05ah/05dh,061h/064h/067h,06ah,06dh,070h/073hz076h,079h,07ch/07fhdatas endsstacksstackssegmentdw
8、endsstack100 dup(?)codes segmentassume cs:codes,ds:datas,ss:stacksdelay proc ;延時子程序push dxpush axmov ah,0bh ;檢測鍵盤有無按鍵,不等待int21hcmpal,offh;如果沒有按鍵,繼續(xù)jnz continuemov ah,01h ;如果有按鍵,讀取鍵盤緩沖區(qū)的值并回顯int21hcmp al;1'jnz duecall teeth;如果是1,調(diào)用鋸齒波due: cmp al;2'jnztrecall tri;如果是2,調(diào)用三角波tre: cmp al,3jnz quac
9、all sin;如果是3,調(diào)用正弦波qua: cmp dl;4'如果是4,退出jz exitexit: mov ax,4c00hint 21hcontinue:mov dl,dnum;如果無按鍵,那么哪里調(diào)用的就返回到哪里去l:dec dljnzlpop axpop dxretdelay endptri proc;三角波子程序push axpush dxlea dx,hint1mov ah,09hint21hmovah,offhdown: call delay ;三角波下降過程mov al,ahmov dx,0280hout dx,alcmp ah,1je upsub ah,2jmp
10、downup:call delay;三角波上升過程mov al,ahmov dx,0280hout dx,alcmp ah,offhje downadd ah,2jmpuppop dxpop axrettri endpteeth proc ;鋸齒波子程序push axpush dxlea dx,hint2movah,09hint21hpeak: mov ah,offh ;我寫的是一個下降的鋸齒波z : call delaymov al,ahmov dxz0280hout dx,alcmp ah,0je peakdecahjmpzpop dxpop axretteeth endpsin proc
11、 ;正弦波子程序push dipush sipush axpush dxlea dx,hint3mov ah,09hint21hlea di,sineadd dloffh ;相當(dāng)于用一個指針収順序的掃描數(shù)據(jù)段里的數(shù)據(jù) head: lea si,sine ;掃描到結(jié)尾了再返回到開頭tail: call delaymovaljsimov dx,0280hout dx,alcmpsldije headinc sijmptailpop dxpop axpop sipop diretsin endpstart: mov ax,datasmov ds,axcall delay;主程序一開始就不斷調(diào)用del
12、ay檢查有無按鍵jmp startcodes endsendstart2、a/d轉(zhuǎn)換用adc0809實現(xiàn)a/d轉(zhuǎn)換,用匯編語言程序口動對一個模擬信號重復(fù)采集20組不同的數(shù)據(jù),在crt 上將每組數(shù)據(jù)對應(yīng)顯示成如下形式:d/a a/dxxxx 然后等待鍵盤輸入,若鍵入字母c則接著往下再做20組數(shù)據(jù);若鍵入字母e則退冋dos。輸入字母 大小寫應(yīng)能兼容。源代碼:datas segmentdnum dwoffffht db0dh,0ah;d/a a/dodhah,' d/a a/dblank db1 *;$';三個空格,為了與上面標題對對齊entdb 0dh,0ah;$*;回車加換行da
13、tasendsstackssegmentstackdw20dup(?)stacksendscodessegmentassumecs:codes,ds:datas,ss:stacksdelay macro ;延時子程序localnpush dxmov dx,dnumn : dec dxjnznpop dxendmplay macro seg 濕示al寄存器十六進制值的子程序,這個子程序我在實驗三中寫過local a2local alpush cxpush dxpush axmov dlzsegand dl,ofoh ;取前四位mov cl,4shr dl,clcmp dl,09hjbe alad
14、d dl,07ha1:add dl,3ohpush axmovah,02h;輸出前四位int21hpop axmov dl,segand dl,ofh ;取后四位cmp dl,09hjbe a2add dl,07ha2:add dl,3ohmovah,02h;輸出后四位int21hpop axpop dxpopcxendmstart: mov ax,datasmov ds,axmov ch,0again:movcl,20lea dx,tmovah,09hint21hnext: play ch濕示轉(zhuǎn)換前的數(shù)字值mov al,ch擻模轉(zhuǎn)換mov dx,280hout dx,allea dx,bla
15、nk;輸岀空格movah,09hint21hdelaymov al,0 ;模數(shù)轉(zhuǎn)換mov dx,0289hout dx,aldelayjmpgo ;這里三行只是一個中途的跳板,因為程序過長,jmp超出限度jumpjmp nextaga: jmp againgo: mov dx,0289h ;讀入 ad 結(jié)果in al,dxplay al ;輸出ad結(jié)果lea dx,ent ;輸出回車movah,09hint21hadd ch,ofh ;每兩個值相隔ofhdec cljnzjumpread: mov ah,01h ;檢查鍵盤int21hcmp al,'e* ;e 退出je exitcmp
16、 al,'e'je exitcmpal;c ;c繼續(xù)讀jne readcmp al上jne readjmp agaexit: movax,4c00hint21hcodes endsendstart計算機原理應(yīng)用綜合實驗報告自03張馳昱20100120281方式01/0將tpc實驗臺上的8255電路a 口設(shè)置成方式0輸入,檢測8只開關(guān)的狀態(tài);將c 口設(shè)置成方 式0輸岀,控制8只led燈。程序運行后不斷地讀入8只開關(guān)的狀態(tài),送往對應(yīng)的led燈顯示,直至 在計算機鍵盤上敲入空格鍵退回dosc源代碼:code segmentassume cs:codestart:mov alz1oo1
17、oooob ;寫控制字mov dx,0283hout dx,alagain:mov dx,0280h ;從 a 口輸入in al,dxmov dx,0282h ;c 口輸出out dx,almov ah,obh;檢查鍵盤有無按鍵,不等待int21hcmp al,offh ;如果有按鍵,去檢查是不是空格je exitjmp again ;如果無按鍵,繼續(xù)exit:movahz01hint21hcmp al; *jne againmov ax,4c00hint21hcode endsend start2、選作內(nèi)容a 口仍保持方式0輸入開關(guān)狀態(tài),c 口仍以方式0輸出led燈顯示,滿足如下條件:(1)
18、 若僅k7=l, 8只led的狀態(tài)循環(huán)左移(2) 若僅k6=l, 8只led的狀態(tài)循環(huán)右移(3) 若僅k6=k7, 8只led 起閃爍。源代碼:code segmentassume cs:codedelay macro ;延時子程序localnpush dxmov dx,offffhn : dec dxjnznpop dxendmhold macro ;發(fā)現(xiàn)一次offffh的計數(shù)不夠長,卩4次夠長了,五次的話jmp就超限了delaydelaydelaydelayendmleft macro ;向左亮燈子程序locallpush cxmov cl,8moval,00000001bl:holdmo
19、v dx,0282hout dx,alshl al,1;向左亮燈的本質(zhì)就是寄存器的移位dec cljne lpopcxendmright macro;向左亮燈子程序,與向左兒乎一樣,指示寄存器向右移位localrpush cxmov cl,8mov al,1ooooooobr:holdmov dx,0282hout dx,alshr aldec cljne rpop cxendmblink macro;閃爍子程序,本質(zhì)就是全亮停片刻,全滅停片刻moval,offhmov dx,0282hout dx,alholdmov al,0mov dx,0282hout dx,alholdendmstar
20、t:moval,10010000b注程序,寫控制字mov dx,0283hout dx,alagain:mov dx,0280h ;讀入 a 口狀態(tài)in al,dxcmpal,10000000b;如果僅k7開,則調(diào)用向左亮燈子程序jne a1leftjmp again ;向左一遍馬上回去繼續(xù)檢測a 口狀態(tài)a1:cmpal,01000000b; to果僅k6開,則調(diào)用向右亮燈子程序jne a2rightjmp againa2:cmpal,h000000b;to果僅k7、k6開,則調(diào)用向閃燈子程序jne againblinkjmp againexit:mov ax,4c00hint21hcode
21、endsend start3、方式11/0實驗中每按一次單脈沖按鍵,通過8255電路發(fā)一次中斷請求。crt±顯示一個a 口的ascii碼字 符,直到a 口數(shù)據(jù)為ffh退出。4、選作內(nèi)容修改主程序?qū)崿F(xiàn)密碼檢測功能,連續(xù)兩次從a 口撥入數(shù)據(jù),與計算機內(nèi)部事先存放的兩字節(jié)數(shù)比 較,相符則在crt±顯示“0k”,否則重新輸入。以下代碼已把3、4兩個程序合并在一起。源代碼:datas segmentpassword db 38h,38h;密碼寫在數(shù)據(jù)段中,定位88hint db odh,oah,'ok',odh,oah,$ ;提示語句0kdatas endscode
22、segmentassume cs:code,ds:datascheckpass macro bla ;檢驗密碼子程序,入口參數(shù)為8位寄存器“bla”local badlocal goodlocal nextcmp bla,;如果對了第一位密碼,si向后走一個字節(jié),一旦有錯,si回到password頭jne badcmp si,di ;di指向password尾,如果正確,則可以顯示“0k” 了jnegoodlea dx,hintmovah,09hint21hgoodjncsijmp nextbad :lea si,passwordnext:endmserv proc ;屮斷服務(wù)程序mov dx
23、,0280h ;讀入 a 口數(shù)據(jù)in al,dxcmp al,offh ;如果是ff那么退出jne gomov ax,4c00hint21hgo: push ax;這里保護axmov dl,al ;顯示 a 口 ascii 碼值mov ah,o2hint21hpop axcheckpass al ;順便檢驗一下是不是密碼mov al,20h ;eoi命令退出屮斷out 20h,aliretservendpstart:mov ax,datasmov ds,axlea si,password ;si 指向 password 頭mov di,siinc di ;di 指向 password 尾pus
24、h ds;置屮斷矢量mov dx,offsetservmov ax,seg servmov ds,axmovahz25hmoval,obhint21hpop dsin al,21h ;消除中斷屏蔽and al,1h1o111bout21h,almov al4o111o11b ;寫 8255 方式控制字mov dxzo283hout dx,almov al,oooo1oo1b ;消除8255的屮斷屏蔽,這里好像沒有明確講mov dx,0283hout dx,alsti;允許中斷過程w:jmp wmov ax,4c00hint21hcode endsend start這個實驗主要的問題就是一開始沒
25、有消除8255的屮斷屏蔽,我在書上也沒有找到有關(guān)內(nèi)容,希望如 果教科書再版的話,加入詳細的8255方式1輸入輸出的中斷說明。5、選作內(nèi)容將8255電路a 口改成方式1輸出(僅將pa7接一只led示范即可),修改前面的程序?qū)崿F(xiàn)每次中 斷后,通過a 口輸出數(shù)據(jù)控制led狀態(tài)在0,1之間翻轉(zhuǎn)。源代碼:stacks segmentdb20 dup(?)stacks endscode segmentassume cs:code,ss:stacksserv procmov al,cl;cl相當(dāng)于一個全局的控制燈翻轉(zhuǎn)的變量mov dx,0280h ;輸出給 a 口out dx,alnot cl;每次輸出完,
26、把cl反向一下,下一次輸出的就是反向值了mov al,20h ;eoi 命令out 20hzaliretservendpstart:mov dx,offset serv;置屮斷矢量mov ax,seg servmov ds,axmovah,25hmov al,obhint21hin al,21h ;消除中斷屏蔽and al,1h1o111bout21h.almoval,10100000b ;寫 8255 方式控制字mov dx,0283hout dx,almov al,oooo1oo1b 除 8255 屮斷屏蔽mov dx,0283hout dx,almov cl,offhstiw:jmp w
27、mov ax,4c00hint21hcode endsend start6、掃描顯示接口電路8255電路a 口以方式0輸出,c 口也初始化成方式0輸出且僅用其最低兩位:pci接數(shù)碼管位碼 輸入端si, pco接位碼輸入端soo程序?qū)崿F(xiàn)當(dāng)a 口輸出字形“0”的段碼時,c 口輸出01h,第一個 數(shù)碼管顯示“0”,當(dāng)a 口輸出字形“1”的段碼時,c 口輸出02h,于是第二個數(shù)碼管顯示“1”。每一 位顯示z后調(diào)用一段延時程序,選擇恰當(dāng)?shù)难訒r程序,使“01”幾乎同時顯示在兩位數(shù)碼管上。源代碼:code segmentassume cs:codedelay macrolocal gopush dxmov
28、dx,01hgo:dec dxjnegopop dxendmhold macro ;與之前一樣,四次delay才夠長delaydelaydelaydelayendmstart:movamooooooob ;寫8255方式控制字mov dx,0283hout dx,alagain:mov alzo;這里尤其關(guān)鍵,先要輸出全暗,在輸出所需值,這是為了消除重影mov dx,0280hout dx,almov al,o1h ;選通 somov dx,0282hout dx,almoval,3fh ;輸出 0mov dx,0280hout dx,alholdmoval,0;如果不清零的話,之前“0”的值
29、3f還保留在a 口里,mov dx,0280h;這樣一選通s】首先輸出的是0而非1,即有重影out dx,almoval,02h;選通 simov dx,0282hout dxzalmov al,06h;輸出 1mov dx,0280hout dx,alholdmovah,obh;檢測有無按鍵,不等待,之前已反復(fù)用到,不再贅述int21hcmp al,offhjnz againmovah,01hint21hcmp al;'jnz againmov ax,4c00hint21hcode endsend start7、選作內(nèi)容當(dāng)程序運行后,從計算機鍵盤上輸入兩位十進制數(shù),分別在兩個數(shù)碼管上
30、顯示。若繼續(xù)輸入數(shù)字 則更新顯示。若發(fā)現(xiàn)輸入了非數(shù)字鍵則退回dos。解決思路:把每次鍵盤輸入的數(shù)字按鍵都放在一個緩存temp中,如果發(fā)現(xiàn)已經(jīng)有兩個數(shù)字鍵輸入了,那么 把這片緩存復(fù)制給名為play的緩存,七段管每次只輸出play緩存的值,這樣就可以實現(xiàn)每按兩個鍵 才改變七段管的值了。源代碼:datas segmentled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,07fh,06fh ;七段管 0 到 9 的 ag 的取值 playdb3fhz3fh ;數(shù)碼管當(dāng)前顯示值緩存器,默認值設(shè)為“00”temp db 3fh,3fh ;鍵盤兩位十進制數(shù)緩存器datas end
31、sstacks segmentdb 100dup(?)stacks endscode segmentassume cs:code,ss:stacks,ds:datastrans macro bla ;鍵盤的ascii碼到七段管值的譯碼宏,入口參數(shù)為ascii的八位寄存器blalocal oklocal exitlocalnpush dxmov dl,blasub dl,30hcmp dl,09h ;首先要判斷鍵盤輸入的是不是一個數(shù)字ja exit;如果不是就退出leaslledn: cmpdl,0;如果是,就去找到這個數(shù)字對應(yīng)的七段管的值jzokincsidec dljmp nexit:mov
32、 ax,4c00hint21hok: movblajsi;出口參數(shù)述是bla,此時譯碼己完成,它表示的是七段管的值pop dxendmdelay macro涎時子程序local gopush dxmov dx,offffhgo:dec dxjnegopop dxendmstart:mov ax,datasmov ds,axmov al,1ooooooob ;寫 8255 方式控制字mov dx,0283hout dx,almov cl,0;cl用來對鍵盤按鍵計數(shù)lea bxjempagain:cmp cl,2jne nmov cl,o;如果之前已經(jīng)有兩個鍵輸入了,那么一切從頭開始n:cmpcl
33、,1jeonemov ah,obh ;不等待的檢測按鍵,這個功能z前已反復(fù)用到int21hcmp al,offhjnzonemovah,01hint21htrans al 譯碼為七段管值,再寫入緩存tempmov bx,alinc clone:movah,obhint21hcmp al,offhjnzshowmov ah,01hint21htrans almovbx+1zal;之前已經(jīng)有過一次按鍵了,所以寫入bx+1位置inc clshow:cmp cl,2 ;檢驗是不是己有兩次按鍵jne forwardleasi,play;如果已有兩次,就把temp緩存復(fù)制到play緩存,即更新待顯示的值m
34、ov ax,bxmov si,axinc simov ax,bx+1mov si,axforward:moval,0;先清除a 口的輸出值mov dx,0280hout dx,almov al,02h ;選通 simov dx,0282hout dx,allea dizplay;輸出緩存play的第一個值mov al,dimov dxz0280hout dx,aldelaymov al,0 ;清除a 口的輸岀值mov dxz0280hout dx,almov al,o1h;選通 somov dx,0282hout dx,alinc di ;輸出緩存play的第二個值mov al,dimov dx,0280hout dx,aldelayjmp againcode endsend start 8、選作內(nèi)容使用tpc實驗臺上的8253定時計數(shù)電路來代替前面的軟件
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 論文的英文標紅怎么處理
- 教師心理健康教育方案
- 中班養(yǎng)成教育:如廁習(xí)慣培養(yǎng)
- 早產(chǎn)兒護理疑難病例討論
- 瑪麗艷產(chǎn)品課件
- 洗胃的禁忌癥及護理常規(guī)
- 誘導(dǎo)透析健康宣教
- 柴油單軌吊培訓(xùn)課件
- 綜合圖審培訓(xùn)課件
- 神經(jīng)外科常用藥物的護理
- 2022年河南項城市事業(yè)單位引進緊缺高層次人才16名筆試備考題庫及答案解析
- 社會醫(yī)學(xué)-健康治理(終)
- 2023年無錫宜興市小升初英語考試模擬試題及答案解析
- 沃爾瑪收貨規(guī)定
- 2022年丹東市元寶區(qū)社區(qū)工作者招聘筆試題庫及答案解析
- 小學(xué)道德與法治人教五年級上冊(統(tǒng)編)第三單元我們的國土我們的家園-愛國教案
- 藝術(shù)欣賞完整版課件全套ppt教程(最新)
- GB∕T 2518-2019 連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 土地項目測算表_模板
- 教育培訓(xùn)機構(gòu)輔導(dǎo)老師月度績效考核表(KPI)
- 立式水輪機組軸線調(diào)整及導(dǎo)軸承的間隙分配ppt課件
評論
0/150
提交評論