




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、da及ad轉換實驗報告sil自03張馳昱20100120281、d/a轉換用dac0832實現d/a轉換,使產生的模擬電壓波形分別為鋸齒波,三角波和正弦波要求:程序運行后等待鍵入(1) 若鍵入'1',則產生鋸齒波(2) 若鍵入'2',則產生三角波(3) 若鍵入'3',則產生正弦波(4) 若鍵入'4',則返回dos程序運行過程屮沒有新鍵入別的數字,則維持原狀不變,用示波器能觀測到連續的電壓波形。解決思路:先寫三個用于波形發生的過程,分別發出鋸齒波、三角波和正眩波。再寫一個每次從dac0832輸 出數據前都會調用的產生延遲的過程,在這
2、個過程中進行有無按鍵的判斷和分辨按鍵的判斷。主程序 先調用這個延遲的過程,這樣程序一旦運行起來就相當于不斷的在檢測按鍵了。正弦波的值我是通過matlab生成和寫入文件,并保存在數據段里的。以下是生成一個周期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;如果沒有按鍵,繼續jnz continuemov ah,01h ;如果有按鍵,讀取鍵盤緩沖區的值并回顯int21hcmp al;1'jnz duecall teeth;如果是1,調用鋸齒波due: cmp al;2'jnztrecall tri;如果是2,調用三角波tre: cmp al,3jnz quac
9、all sin;如果是3,調用正弦波qua: cmp dl;4'如果是4,退出jz exitexit: mov ax,4c00hint 21hcontinue:mov dl,dnum;如果無按鍵,那么哪里調用的就返回到哪里去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 ;相當于用一個指針収順序的掃描數據段里的數據 head: lea si,sine ;掃描到結尾了再返回到開頭tail: call delaymovaljsimov dx,0280hout dx,alcmpsldije headinc sijmptailpop dxpop axpop sipop diretsin endpstart: mov ax,datasmov ds,axcall delay;主程序一開始就不斷調用del
12、ay檢查有無按鍵jmp startcodes endsendstart2、a/d轉換用adc0809實現a/d轉換,用匯編語言程序口動對一個模擬信號重復采集20組不同的數據,在crt 上將每組數據對應顯示成如下形式:d/a a/dxxxx 然后等待鍵盤輸入,若鍵入字母c則接著往下再做20組數據;若鍵入字母e則退冋dos。輸入字母 大小寫應能兼容。源代碼: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濕示轉換前的數字值mov al,ch擻模轉換mov dx,280hout dx,allea dx,bla
15、nk;輸岀空格movah,09hint21hdelaymov al,0 ;模數轉換mov dx,0289hout dx,aldelayjmpgo ;這里三行只是一個中途的跳板,因為程序過長,jmp超出限度jumpjmp nextaga: jmp againgo: mov dx,0289h ;讀入 ad 結果in al,dxplay al ;輸出ad結果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繼續讀jne readcmp al上jne readjmp agaexit: movax,4c00hint21hcodes endsendstart計算機原理應用綜合實驗報告自03張馳昱20100120281方式01/0將tpc實驗臺上的8255電路a 口設置成方式0輸入,檢測8只開關的狀態;將c 口設置成方 式0輸岀,控制8只led燈。程序運行后不斷地讀入8只開關的狀態,送往對應的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 ;如果無按鍵,繼續exit:movahz01hint21hcmp al; *jne againmov ax,4c00hint21hcode endsend start2、選作內容a 口仍保持方式0輸入開關狀態,c 口仍以方式0輸出led燈顯示,滿足如下條件:(1)
18、 若僅k7=l, 8只led的狀態循環左移(2) 若僅k6=l, 8只led的狀態循環右移(3) 若僅k6=k7, 8只led 起閃爍。源代碼:code segmentassume cs:codedelay macro ;延時子程序localnpush dxmov dx,offffhn : dec dxjnznpop dxendmhold macro ;發現一次offffh的計數不夠長,卩4次夠長了,五次的話jmp就超限了delaydelaydelaydelayendmleft macro ;向左亮燈子程序locallpush cxmov cl,8moval,00000001bl:holdmo
19、v dx,0282hout dx,alshl al,1;向左亮燈的本質就是寄存器的移位dec cljne lpopcxendmright macro;向左亮燈子程序,與向左兒乎一樣,指示寄存器向右移位localrpush cxmov cl,8mov al,1ooooooobr:holdmov dx,0282hout dx,alshr aldec cljne rpop cxendmblink macro;閃爍子程序,本質就是全亮停片刻,全滅停片刻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 口狀態in al,dxcmpal,10000000b;如果僅k7開,則調用向左亮燈子程序jne a1leftjmp again ;向左一遍馬上回去繼續檢測a 口狀態a1:cmpal,01000000b; to果僅k6開,則調用向右亮燈子程序jne a2rightjmp againa2:cmpal,h000000b;to果僅k7、k6開,則調用向閃燈子程序jne againblinkjmp againexit:mov ax,4c00hint21hcode
21、endsend start3、方式11/0實驗中每按一次單脈沖按鍵,通過8255電路發一次中斷請求。crt±顯示一個a 口的ascii碼字 符,直到a 口數據為ffh退出。4、選作內容修改主程序實現密碼檢測功能,連續兩次從a 口撥入數據,與計算機內部事先存放的兩字節數比 較,相符則在crt±顯示“0k”,否則重新輸入。以下代碼已把3、4兩個程序合并在一起。源代碼:datas segmentpassword db 38h,38h;密碼寫在數據段中,定位88hint db odh,oah,'ok',odh,oah,$ ;提示語句0kdatas endscode
22、segmentassume cs:code,ds:datascheckpass macro bla ;檢驗密碼子程序,入口參數為8位寄存器“bla”local badlocal goodlocal nextcmp bla,;如果對了第一位密碼,si向后走一個字節,一旦有錯,si回到password頭jne badcmp si,di ;di指向password尾,如果正確,則可以顯示“0k” 了jnegoodlea dx,hintmovah,09hint21hgoodjncsijmp nextbad :lea si,passwordnext:endmserv proc ;屮斷服務程序mov dx
23、,0280h ;讀入 a 口數據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的屮斷屏蔽,我在書上也沒有找到有關內容,希望如 果教科書再版的話,加入詳細的8255方式1輸入輸出的中斷說明。5、選作內容將8255電路a 口改成方式1輸出(僅將pa7接一只led示范即可),修改前面的程序實現每次中 斷后,通過a 口輸出數據控制led狀態在0,1之間翻轉。源代碼:stacks segmentdb20 dup(?)stacks endscode segmentassume cs:code,ss:stacksserv procmov al,cl;cl相當于一個全局的控制燈翻轉的變量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接數碼管位碼 輸入端si, pco接位碼輸入端soo程序實現當a 口輸出字形“0”的段碼時,c 口輸出01h,第一個 數碼管顯示“0”,當a 口輸出字形“1”的段碼時,c 口輸出02h,于是第二個數碼管顯示“1”。每一 位顯示z后調用一段延時程序,選擇恰當的延時程序,使“01”幾乎同時顯示在兩位數碼管上。源代碼: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;這里尤其關鍵,先要輸出全暗,在輸出所需值,這是為了消除重影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;檢測有無按鍵,不等待,之前已反復用到,不再贅述int21hcmp al,offhjnz againmovah,01hint21hcmp al;'jnz againmov ax,4c00hint21hcode endsend start7、選作內容當程序運行后,從計算機鍵盤上輸入兩位十進制數,分別在兩個數碼管上
30、顯示。若繼續輸入數字 則更新顯示。若發現輸入了非數字鍵則退回dos。解決思路:把每次鍵盤輸入的數字按鍵都放在一個緩存temp中,如果發現已經有兩個數字鍵輸入了,那么 把這片緩存復制給名為play的緩存,七段管每次只輸出play緩存的值,這樣就可以實現每按兩個鍵 才改變七段管的值了。源代碼:datas segmentled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,07fh,06fh ;七段管 0 到 9 的 ag 的取值 playdb3fhz3fh ;數碼管當前顯示值緩存器,默認值設為“00”temp db 3fh,3fh ;鍵盤兩位十進制數緩存器datas end
31、sstacks segmentdb 100dup(?)stacks endscode segmentassume cs:code,ss:stacks,ds:datastrans macro bla ;鍵盤的ascii碼到七段管值的譯碼宏,入口參數為ascii的八位寄存器blalocal oklocal exitlocalnpush dxmov dl,blasub dl,30hcmp dl,09h ;首先要判斷鍵盤輸入的是不是一個數字ja exit;如果不是就退出leaslledn: cmpdl,0;如果是,就去找到這個數字對應的七段管的值jzokincsidec dljmp nexit:mov
32、 ax,4c00hint21hok: movblajsi;出口參數述是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用來對鍵盤按鍵計數lea bxjempagain:cmp cl,2jne nmov cl,o;如果之前已經有兩個鍵輸入了,那么一切從頭開始n:cmpcl
33、,1jeonemov ah,obh ;不等待的檢測按鍵,這個功能z前已反復用到int21hcmp al,offhjnzonemovah,01hint21htrans al 譯碼為七段管值,再寫入緩存tempmov bx,alinc clone:movah,obhint21hcmp al,offhjnzshowmov ah,01hint21htrans almovbx+1zal;之前已經有過一次按鍵了,所以寫入bx+1位置inc clshow:cmp cl,2 ;檢驗是不是己有兩次按鍵jne forwardleasi,play;如果已有兩次,就把temp緩存復制到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、選作內容使用tpc實驗臺上的8253定時計數電路來代替前面的軟件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年食品行業食品安全追溯體系與食品安全監管信息化技術應用創新案例研究重點報告
- 教育行業數字化教材在中學政治實驗教育中的應用與創新
- 建筑工程規范與設計理念試題集
- 物理電路設計與分析考試卷
- 兒童游樂場設備工程安裝協議
- 難忘那次活動記事作文(12篇)
- 2025年信托行業轉型策略與創新業務模式行業影響力研究報告
- 化療藥物護理查房
- 2025年火鍋餐飲市場格局深度分析及創新策略研究報告
- 大學宿舍管理人員培訓
- 《建黨偉業》觀后感課件
- 2025年安全生產月主題宣貫課件
- 2025-2030中國毛衣市場調研及重點企業投資評估規劃分析研究報告
- 涼山州屬國有企業專業技術人員及管理人員招聘筆試真題2024
- 數學建模思想在中小學數學課堂教學中的應用研究
- 2025年五級應急救援員資格理論考試題庫(含答案)
- 國家開放大學漢語言文學本科《古代小說戲曲專題》期末紙質考試第一大題選擇題庫2025春期版
- GB/T 45236-2025化工園區危險品運輸車輛停車場建設規范
- 深圳市勞動合同樣本大全
- GB/T 45144-2024道路車輛車輪和輪輞使用、維護和安全的一般要求及報廢條件
-
評論
0/150
提交評論