版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 設(shè)計(jì)題目</b></p><p><b> 函數(shù)發(fā)生器的設(shè)計(jì)</b></p><p> 經(jīng)過這段時(shí)間對(duì)微機(jī)原理及接口技術(shù)的相關(guān)學(xué)習(xí),利用所學(xué)的知識(shí)來設(shè)計(jì)一個(gè)函數(shù)發(fā)生器,使其具有外部選擇波形的功能。</p><p><b> 設(shè)計(jì)任務(wù)及需求分析</b></p&g
2、t;<p> 波形的產(chǎn)生方式:要求產(chǎn)生方波、正向鋸齒波、負(fù)向鋸齒波、三角波、階梯波。</p><p> 實(shí)現(xiàn)這個(gè)要求可以利用8位數(shù)模轉(zhuǎn)換器DAC0832。在8088中編寫相應(yīng)可以產(chǎn)生所需波形的程序,輸出數(shù)字量給DAC0832,利用0832的數(shù)模轉(zhuǎn)換功能,輸出相應(yīng)的電信號(hào)波形。使用一片DAC0832芯片,其他的各個(gè)輸出波共用同一端口Iout1。</p><p> 按鍵選擇
3、功能:波形編號(hào)為0~4,通過按鍵選擇產(chǎn)生相應(yīng)的輸出波形。</p><p> CPU外圍擴(kuò)展可編程中斷控制器8259A對(duì)外為中斷進(jìn)行管理。使用按鍵的方式,將外部的按鍵連接在8259A的中斷輸入線IR0~IR4上面,分別對(duì)應(yīng)相應(yīng)的波形序號(hào)0~4,按下按鍵,由于在按鍵的一端皆有下拉電阻是終端輸入端口的初始電平為低,按下按鍵之后,電平拉高,產(chǎn)生中斷,為了減小按鍵抖動(dòng)產(chǎn)生的誤判,在程序中應(yīng)改進(jìn)行按鍵去抖動(dòng)的處理。<
4、/p><p><b> 總體設(shè)計(jì)方案</b></p><p> 具體方案選擇和硬件設(shè)計(jì)</p><p> 3.1 最大組態(tài)系統(tǒng)搭建</p><p> 參考《微機(jī)原理、匯編與接口技術(shù)》朱定華第171頁</p><p> 利用8284產(chǎn)生CPU所需要的CLK、READY、RESET信號(hào)。<
5、/p><p> 該電路只利用石英晶體構(gòu)成振蕩器結(jié)合8284產(chǎn)生固定的時(shí)鐘頻率。</p><p> 另外復(fù)位RESET電路中串聯(lián)電容,具有濾波的作用。電路如下圖:</p><p> a)8088外部時(shí)鐘電路:</p><p> *該電路產(chǎn)生的CLK約為4Mhz。</p><p> b)地址鎖存器使用74LS373,
6、數(shù)據(jù)總線驅(qū)動(dòng)器使用74LS245,總線控制器使用8288.</p><p> 由于版面的問題詳細(xì)電路圖可以參見附錄總圖。</p><p> 3.2按鍵選擇產(chǎn)生的波形類型</p><p> 方案1:可以CPU的I/O查詢功能,將按鍵接到CPU的各個(gè)I/O端口,設(shè)定一個(gè)掃描周期,對(duì)端口上的電平變化信息進(jìn)行查詢和記錄,當(dāng)端口上面出現(xiàn)低電平則說明有按鍵被按下,根據(jù)硬件
7、電路設(shè)定,不同的端口接不同的按鍵,這樣就可以直到按下了幾號(hào)鍵,并產(chǎn)生對(duì)應(yīng)的波形。</p><p> 方案2:利用中斷來記錄無不的按鍵動(dòng)作。使用一片8259A將按鍵接到8259A的IR0~IR4,這樣每一個(gè)不同的按鍵被按下時(shí)候,觸發(fā)對(duì)應(yīng)引腳的中斷,實(shí)現(xiàn)按鍵選擇DAC轉(zhuǎn)換類型的選擇。若使用中斷的方式,就可以將各個(gè)按鍵對(duì)應(yīng)的波形產(chǎn)生函數(shù)寫在中斷服務(wù)程序中。</p><p> 通過比較覺得使用
8、8259A來擴(kuò)展比較好,因?yàn)楸旧鞩/O端口是有限的。使用外部中斷的擴(kuò)展就可以節(jié)省不少空間。再者使用中斷的方式來做的話已不用頻繁的進(jìn)行端口的掃描和電平比較。在思路上更簡潔。</p><p> 設(shè)計(jì)8259A的中斷觸發(fā)方式是上升沿有效,就必須外部實(shí)現(xiàn)每按鍵一次產(chǎn)生一個(gè)上升沿。電路如下圖所示,IR0~IR7引腳外連上拉電阻,沒有按鍵的情況下固定為高電平,一旦有按鍵按下時(shí)候,IRx端變成低電平,當(dāng)按鍵彈起之后IRx變成
9、高電平,這樣在按鍵的過程中間就產(chǎn)生了上升沿,按鍵一次就可以觸發(fā)一次對(duì)應(yīng)的中斷。</p><p> 值得注意的是,在按鍵檢測中,需要做消除抖動(dòng)的處理。有因?yàn)?259A被設(shè)置成為上升沿有效,若按一次鍵出現(xiàn)了好幾次抖動(dòng),那么每次抖動(dòng)就會(huì)觸發(fā)一次中斷,這樣中斷檢測就出現(xiàn)了錯(cuò)誤,因此在檢測到中斷(即檢測到上升沿的時(shí)候),利用了電容對(duì)按鍵兩端進(jìn)行濾波處理,是抖動(dòng)產(chǎn)生的毛刺被平整。 </p><p>
10、 8259A基本與原理簡介:</p><p> D0~D7為8259與數(shù)據(jù)總線之間的通信端口,INT為芯片與CPU的鏈接端口,當(dāng)IR0~IR7中有一個(gè)引腳接受到中斷的觸發(fā)信號(hào),并且此時(shí)沒有其他的中端正在被響應(yīng),則8259A就向CPU的INTR端發(fā)出中斷請(qǐng)求信號(hào),等待CPU響應(yīng)中斷請(qǐng)求,CPU在一個(gè)機(jī)器周期的最后一個(gè)T才檢測INTR線,若發(fā)現(xiàn)喲中斷信號(hào)且IF為1 (中斷開),則會(huì)響應(yīng)中斷。響應(yīng)中斷時(shí)候內(nèi)部自動(dòng)的
11、關(guān)中斷,發(fā)出中斷響應(yīng)信號(hào)。然后執(zhí)行保留斷點(diǎn),獲取終端服務(wù)程序的入口地址,進(jìn)行保護(hù)現(xiàn)場,執(zhí)行中斷服務(wù)程序,最后恢復(fù)現(xiàn)場,</p><p> 返回到中斷前的下一條指令。</p><p> 硬件電路的設(shè)計(jì)如下圖:</p><p> *圖中的CS端口連接在地址譯碼電路輸出端口的Y0口上。</p><p> *若需要對(duì)功能進(jìn)行擴(kuò)展直接增加按鍵接
12、口即可。</p><p> *按鍵上面并聯(lián)電容起到硬件消除抖動(dòng)的作用。根據(jù)電容的充放電時(shí)間:</p><p> T=R*C=10000*0.1/1000000=1ms</p><p> 如果消抖的延時(shí)時(shí)間可以增大電容,取在0.1~1uf之間,是充放電時(shí)間大于抖動(dòng)時(shí)間即可。</p><p> *另外按鍵消抖也可采用RS觸發(fā)器來對(duì)按鍵進(jìn)行
13、消抖,電路如下圖:</p><p> 開關(guān)閉合先一邊,輸出波形只改變一次,因此可以得到很好的方波。</p><p> 由于本設(shè)計(jì)中才用的時(shí)兩點(diǎn)式的按鍵,而非才用此類單刀雙擲開關(guān),使用單穩(wěn)態(tài)觸發(fā)器消抖硬件選擇上需要做更改,且電路硬件連接不方便,故采用電容消抖的方式。</p><p><b> 3.3數(shù)模轉(zhuǎn)換電路</b></p>
14、<p> 設(shè)計(jì)采用DAC0832芯片對(duì)CPU給定的數(shù)字量驚醒數(shù)模轉(zhuǎn)換后輸出,由于輸出的電壓值和電流值比較小,很可能達(dá)不到外設(shè)的要求,于是先對(duì)DAC0832芯片的Iout1輸出信號(hào)進(jìn)行放大處理后再輸出。</p><p> DAC0832的基本原理如下:</p><p> 改芯片具有8路輸入D0~D7分別連接在數(shù)據(jù)總線上面的d0~d7端口,芯片內(nèi)部為具有統(tǒng)一參考點(diǎn)的8個(gè)并聯(lián)支
15、路,由于并聯(lián)的關(guān)系使得每條之支路對(duì)應(yīng)輸出電路貢獻(xiàn)電流的權(quán)值符合2進(jìn)制編碼,內(nèi)部電路為T行電路,通過輸出8為二進(jìn)制數(shù)對(duì)每條支路的通斷進(jìn)行控制,于是得到的輸出電流值也就是與二進(jìn)制數(shù)對(duì)應(yīng)的大小。當(dāng)二進(jìn)制數(shù)是0,則輸出0V,當(dāng)二進(jìn)制數(shù)位256時(shí)輸出值即為最大電流,可見DAC轉(zhuǎn)換器的精度是Vref/256,當(dāng)基準(zhǔn)電壓設(shè)定為+5V時(shí),精度就是0.01953V.</p><p> 在該芯片的引腳中Iout1與Iout2互補(bǔ),
16、其和為一個(gè)常數(shù)。</p><p> Cs為片選端口,在執(zhí)行DA轉(zhuǎn)換之前必須先通過地址譯碼器選中芯片,然后開啟轉(zhuǎn)換。</p><p> Vref即為參考電壓,在實(shí)際中常將它置于-10V~+10V之間。</p><p><b> 具體電路如下圖:</b></p><p> *圖中給定的基準(zhǔn)電壓是+5V,故輸出值的范圍
17、是0~+5V之間。</p><p> *實(shí)際輸出電壓值經(jīng)過LM324運(yùn)放進(jìn)行放大后從Aout端口輸出。</p><p> *由于DAC0832可以直接通過譯碼器選通因此沒有在使用8255的擴(kuò)展增加復(fù)雜度。</p><p> 3.4 輸出波形的代號(hào)顯示</p><p> 方案1:使用8255外擴(kuò)輸出端口,有與在8259A和DAC0832
18、的數(shù)據(jù)輸入端口上都使用了數(shù)據(jù)總線來傳送數(shù)據(jù),為了不在各個(gè)外設(shè)上產(chǎn)生信號(hào)的錯(cuò)亂,利用一片8255能夠很好的解決問題。</p><p> 方案2:直接使用輸出寄存器74LS273。</p><p> 原因是考慮到對(duì)于總線輸出端口的分時(shí)復(fù)用,8259A和DAC0832的數(shù)據(jù)輸入端口都需要你與CPU交換數(shù)據(jù),若不使用8255A作為I/O擴(kuò)展,就只能使用分時(shí)復(fù)用的方式。</p>&
19、lt;p> 因此在各個(gè)外圍器件間使用輸出的寄存器必不可少,因此為了是數(shù)碼管常量并能夠輸出正確的數(shù)值,那么采用一個(gè)74LS273,便可以達(dá)到要求。</p><p> 經(jīng)過比較,覺得方案一使用8255來外擴(kuò)的數(shù)據(jù)傳送更方便,對(duì)輸出的控制更方便,因?yàn)樵诔绦蛑行枰诎存I之后的到某一種波形的同時(shí),保持LED數(shù)碼管長時(shí)間輸出固定值,不受D0~D7影響,因此才用8255的擴(kuò)展方式方為上策。</p>&l
20、t;p> 8255的CS端口連接在譯碼器的Y1端口,當(dāng)按鍵被檢測到以后,在程序中就選通8255,并將數(shù)據(jù)總線向上AD0~AD7并行寫入到8255寄存器,然后有8255直通的方式同時(shí)驅(qū)動(dòng)數(shù)碼管點(diǎn)亮。</p><p> 在8255的輸出端口外部使用了74ls273的寄存器,可以起到驅(qū)動(dòng)的作用是的數(shù)碼管亮度達(dá)到要求。</p><p><b> 電路設(shè)計(jì)如下:</b&g
21、t;</p><p> *CLR是清零端,接到高電平,那么寄存始終都不會(huì)執(zhí)行清零。只將上一次輸入的數(shù)據(jù)鎖存。這樣能夠在改變輸出值一次之后,使得在一次按鍵選擇之后,一直在輸出被選中的波形序號(hào)。</p><p> * 圖中實(shí)際上是一個(gè)帶小數(shù)點(diǎn)數(shù)碼管,其原理同七段數(shù)碼管。</p><p> *8255才用方式0,只起到一個(gè)擴(kuò)展和控制輸出時(shí)間作用。</p>
22、<p> 3.5總體電路圖(包含有最大組態(tài)電路)</p><p><b> 五.程序設(shè)計(jì)</b></p><p><b> 5.1程序設(shè)計(jì)思路</b></p><p> 在主函數(shù)中進(jìn)行循環(huán)等待按鍵中斷的產(chǎn)生,若有中斷進(jìn)入中斷服務(wù)程序,記錄按鍵編號(hào),然后返回主函數(shù)。</p><p&g
23、t; 在主函數(shù)中對(duì)按鍵號(hào)碼進(jìn)行檢測并調(diào)用對(duì)應(yīng)的子函數(shù)產(chǎn)生相應(yīng)的波形。</p><p> 若再次按鍵則可以選擇其他的波形進(jìn)行輸出。每有按鍵則持續(xù)輸出當(dāng)前波形。這里在主函數(shù)中進(jìn)行循環(huán)。按鍵編碼:IR0對(duì)應(yīng)方波;IR1對(duì)應(yīng)正向鋸齒波;IR2對(duì)應(yīng)負(fù)向鋸齒波;IR3對(duì)應(yīng)三角波;IR4對(duì)應(yīng)階梯形波;IR5對(duì)應(yīng)者退出選擇。</p><p> 若在主函數(shù)中有按鍵5產(chǎn)生中斷則直接推出主函數(shù)。</
24、p><p> 在波形產(chǎn)生函數(shù)中只產(chǎn)生相應(yīng)的數(shù)字量改變,并將它輸出到DAC0832的輸入端口。</p><p> DAC0832執(zhí)行轉(zhuǎn)換并將其輸出。</p><p> 在子函數(shù)只實(shí)現(xiàn)對(duì)應(yīng)的數(shù)字量產(chǎn)生對(duì)應(yīng)電壓并將它送到DAC0832的輸入端口。在子函數(shù)的開頭向LED數(shù)碼管送入當(dāng)前波形的序號(hào)。</p><p><b> 5.2程序流程
25、圖</b></p><p><b> 主函數(shù)流程:</b></p><p><b> 無中斷</b></p><p><b> 有中斷</b></p><p><b> BL為0~4 </b></p><p>&
26、lt;b> 有按鍵</b></p><p><b> BL為5</b></p><p><b> 無按鍵</b></p><p><b> 三角波形子函數(shù):</b></p><p><b> 否</b></p>&
27、lt;p><b> 否</b></p><p><b> 是</b></p><p><b> 5.3 程序代碼</b></p><p> STACK SEGMENT 'STACK'</p><p> DW 32 DUP(0)</p>
28、<p> STACK ENDS</p><p> DATA SEGMENT</p><p> DA1 DB'Please input the number of wave shape','$'</p><p> DA2DB 'The wave has been generated',
29、39;$'</p><p> DA3DB'You choose to qiut','$'</p><p><b> DATA ENDS</b></p><p> CODE SEGMENT </p><p> ;-----------------主函數(shù)程序段------
30、-------------------------------------</p><p> MAIN PROC FAR ;主程序段</p><p> ASSUME SS:STACK,CS:CODE,DS:DATA</p><p><b> PUSH DS</b></p><p><b> SUB
31、AX,AX</b></p><p><b> PUSH AX</b></p><p><b> ;ICW1</b></p><p> MOV AL,13H ;00010011D單片,邊沿觸發(fā),設(shè)置ICW4</p><p> MOV DX,380H</p><
32、;p><b> OUT DX,AL</b></p><p><b> ;ICW2</b></p><p> MOV DX,88H ;中斷類型碼88H-8FH</p><p> MOV DX,381H </p><p><b> OUT DX,AL</b>&
33、lt;/p><p><b> ;ICW4</b></p><p> MOV AL,0DH ;設(shè)置全嵌套,緩沖非自動(dòng)結(jié)束中斷方式</p><p> MOV DX,381H</p><p><b> OUT DX,AL</b></p><p><b> ;OC
34、W1</b></p><p> MOV AL,0D0H ;設(shè)置IR0-IR5中斷有效</p><p> MOV DX,381H</p><p> OUT DX,AL </p><p> ;8255方式控制字</p><p> MOV AX,80H ;設(shè)置A口方式1,輸出</p>
35、<p> MOV DX,38BH</p><p> OUT DX,AX </p><p> ;裝入IR0中斷服務(wù)程序地址</p><p> MOV AX,SEG INTER0</p><p><b> MOV DS,AX</b></p><p> MOV DX,OFFSE
36、T INTER0</p><p> MOV AX,2588H ;調(diào)用25好系統(tǒng)功能,類型碼88H </p><p><b> INT 21H</b></p><p> ;裝入IR1中斷服務(wù)程序地址 </p><p> MOV AX,SEG INTER1</p><p><b>
37、; MOV DS,AX</b></p><p> MOV DX,OFFSET INTER1</p><p> MOV AX,2589H ;調(diào)用25好系統(tǒng)功能,類型碼89H</p><p><b> INT 21H</b></p><p> ;裝入IR2中斷服務(wù)程序地址 </p>&
38、lt;p> MOV AX,SEG INTER2</p><p><b> MOV DS,AX</b></p><p> MOV DX,OFFSET INTER2</p><p> MOV AX,258AH ;調(diào)用25好系統(tǒng)功能,類型碼8AH</p><p><b> INT 21H <
39、/b></p><p> ;裝入IR3中斷服務(wù)程序地址 </p><p> MOV AX,SEG INTER3</p><p><b> MOV DS,AX</b></p><p> MOV DX,OFFSET INTER3</p><p> MOV AX,258BH ;調(diào)用2
40、5好系統(tǒng)功能,類型碼8BH</p><p><b> INT 21H</b></p><p> ;裝入IR4中斷服務(wù)程序地址 </p><p> MOV AX,SEG INTER4</p><p><b> MOV DS,AX</b></p><p> MOV DX
41、,OFFSET INTER4</p><p> MOV AX,258CH ;調(diào)用25好系統(tǒng)功能,類型碼8CH</p><p><b> INT 21H </b></p><p> ;裝入IR5中斷服務(wù)程序地址 </p><p> MOV AX,SEG INTER5</p><p>&l
42、t;b> MOV DS,AX</b></p><p> MOV DX,OFFSET INTER5</p><p> MOV AX,258DH ;調(diào)用25好系統(tǒng)功能,類型碼8DH</p><p><b> INT 21H</b></p><p> MOV DX,DATA</p>
43、<p><b> MOV DS,AX</b></p><p> MOV DX,OFFSET DA1</p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p><b> JMP $<
44、/b></p><p> L1:CMP BL,0</p><p> JE BO0 ;按鍵0,輸出方波</p><p><b> CMP BL,1</b></p><p> JE BO1 ;按鍵1,輸出正向鋸齒波</p><p><b> CMP BL,2<
45、/b></p><p> JE BO2 ;按鍵2,輸出負(fù)向鋸齒波</p><p><b> CMP BL,3</b></p><p> JE BO3 ;按鍵3,輸出三角波</p><p><b> CMP BL,4</b></p><p> JE BO
46、4 ;按鍵4,輸出階梯波</p><p><b> CMP BL,5</b></p><p> JE BO5 ;按鍵5,輸出發(fā)生器</p><p> JMP L2 ;若沒有按鍵5,則繼續(xù)輸出循環(huán)</p><p> L2:MOV DX,OFFSET DA3</p><p>&l
47、t;b> MOV AH,9</b></p><p> INT 21H ;顯示退出提示字符</p><p><b> RET</b></p><p><b> MAIN ENDP</b></p><p> ;-----------------------中斷服務(wù)程序0-
48、-----------------------------</p><p> INTER0 PROC FAR ;IR0中斷子程序</p><p> MOV BL,0 ;寫入按鍵號(hào)碼</p><p> MOV AL,20H ;中斷結(jié)束命令</p><p> OUT 20H,AL</p><p><
49、;b> IRET</b></p><p> INTER0 endp</p><p> ;-----------------------中斷服務(wù)程序1------------------------------</p><p> INTER1 PROC FAR ;IR1中斷子程序</p><p> MOV BL,
50、1 ;寫入按鍵號(hào)碼</p><p> MOV AL,20H ;中斷結(jié)束命令</p><p> OUT 20H,AL</p><p><b> IRET</b></p><p> INTER1 endp</p><p> ;-----------------------中斷服務(wù)程序
51、2------------------------------</p><p> INTER2 PROC FAR ;IR2中斷子程序</p><p> MOV BL,2 ;寫入按鍵號(hào)碼</p><p> MOV AL,20H ;中斷結(jié)束命令</p><p> OUT 20H,AL</p><p>&
52、lt;b> IRET</b></p><p> INTER2 endp</p><p> ;-----------------------中斷服務(wù)程序3------------------------------</p><p> INTER3 PROC FAR ;IR3中斷子程序</p><p> MOV B
53、L,3 ;寫入按鍵號(hào)碼</p><p> MOV AL,20H ;中斷結(jié)束命令</p><p> OUT 20H,AL</p><p><b> IRET</b></p><p> INTER3 endp</p><p> ;-----------------------中斷服務(wù)
54、程序4------------------------------</p><p> INTER4 PROC FAR ;IR4中斷子程序</p><p> MOV BL,4 ;寫入按鍵號(hào)碼</p><p> MOV AL,20H ;中斷結(jié)束命令</p><p> OUT 20H,AL</p><p>
55、;<b> IRET</b></p><p> INTER4 endp</p><p> ;-----------------------中斷服務(wù)程序5------------------------------</p><p> INTER5 PROC FAR ;IR5中斷子程序</p><p> MOV
56、 BL,5 ;寫入按鍵號(hào)碼</p><p> MOV AL,20H ;中斷結(jié)束命令</p><p> OUT 20H,AL</p><p><b> IRET</b></p><p> INTER5 endp</p><p> ;-----------------------延時(shí)
57、函數(shù)-------------------------------------</p><p> DELAY PROC FAR ;延時(shí)函數(shù)</p><p><b> PUSH AX</b></p><p> LL:MOV AX,0FA0H ;當(dāng)CX循環(huán)一次1ms </p><p><b>
58、DEC AX</b></p><p><b> LOOP LL</b></p><p><b> POP AX</b></p><p> DELAY endp</p><p> ;-----------------------方波產(chǎn)生函數(shù)---------------------
59、---------</p><p> BO0 PROC FAR ;方波發(fā)生子函數(shù)</p><p><b> MOV AL,0</b></p><p> MOV DX,388H ;8255片選地址</p><p><b> OUT DX,AL</b></p><p&
60、gt; MOV CX,5 ;延時(shí)5ms</p><p> MOV AL,0FFH ;設(shè)置數(shù)字量FF</p><p> MOV DX,384H</p><p> OUT DX,AL ;D/A輸出高電平</p><p> MOV CX,5 ;延時(shí)5ms</p><p> CALL DELAY &l
61、t;/p><p><b> MOV CX,5</b></p><p> MOV AL,0 ;設(shè)置數(shù)字量0</p><p> MOV DX,384H</p><p> OUT DX,AL ;D/A輸出低電平</p><p> CALL DELAY</p><p>
62、;<b> ret</b></p><p><b> BO0 endp</b></p><p> ;----------------------- 正向鋸齒波產(chǎn)生函數(shù)-------------------- </p><p> BO1 PROC FAR ;正向鋸齒波子函數(shù)</p><p>
63、;<b> MOV AL,1</b></p><p> MOV DX,388H ;8255片選地址,8255直通</p><p> OUT DX,AL ;輸出按鍵號(hào)碼</p><p><b> MOV AL,0</b></p><p> B1:MOV DX,384H ;DAC
64、片選地址</p><p><b> OUT DX,AL</b></p><p> INC AL ;數(shù)字量遞加</p><p><b> LOOP $</b></p><p> CMP AL,0 ;是否完成一個(gè)周期</p><p><b> JNE
65、B1</b></p><p><b> ret</b></p><p><b> BO1 endp</b></p><p> ;----------------------- 負(fù)向鋸齒波產(chǎn)生函數(shù)--------------------</p><p> BO2 PROC FAR
66、 ;負(fù)向鋸齒波子函數(shù)</p><p><b> MOV AL,2</b></p><p> MOV DX,388H ;8255片選地址,8255直通</p><p> OUT DX,AL ;輸出按鍵號(hào)碼</p><p> MOV AL,0FFH</p><p> B2:MOV
67、 DX,384H ;DAC片選地址</p><p><b> OUT DX,AL</b></p><p> DEC AL ;將數(shù)字量遞減</p><p><b> LOOP $</b></p><p> CMP AL,0FFH ;是否完成一個(gè)周期</p><p
68、><b> JNE B2</b></p><p><b> BO2 endp</b></p><p> ;-----------------------三角波產(chǎn)生函數(shù)----------------------------</p><p> BO3 PROC FAR ;三角波輸出子函數(shù)</p>
69、<p><b> MOV AL,3</b></p><p> MOV DX,388H ;8255片選地址</p><p> OUT DX,AL ;輸出按鍵號(hào)碼,8255直通</p><p><b> MOV AL,0</b></p><p> B1:MOV DX,3
70、84H ;DAC片選地址</p><p><b> OUT DX,AL</b></p><p> INC AL ;正向波形輸出</p><p> LOOP $ ;最大65536次循環(huán)</p><p> CMP AL,0FFH ;是否已經(jīng)上升到自大</p><p><b&g
71、t; JNE B1</b></p><p> B11:DEC AL</p><p> MOV DX,384H</p><p><b> OUT DX,AL</b></p><p> DEC AL ;接著輸出負(fù)向波形</p><p> LOOP $ ;最大65536
72、次循環(huán)</p><p> CMP AL,0 ;是否完成一個(gè)周期</p><p><b> JNE B11</b></p><p><b> ret</b></p><p><b> BO3 endp</b></p><p> ;-----
73、------------------階梯波產(chǎn)生函數(shù)----------------------------</p><p> BO4 PROC FAR ;階梯波輸出子函數(shù)</p><p><b> MOV AL,4</b></p><p> MOV DX,388H ;8255片選地址</p><p> O
74、UT DX,AL ;輸出按鍵號(hào)碼,8255直通</p><p><b> MOV AL,0</b></p><p> B4:MOV DX,384H ;DAC片選地址</p><p><b> OUT DX,AL</b></p><p> ADD AL,33H ;每次加51,相
75、當(dāng)于增加1V</p><p><b> MOV CX,5</b></p><p> CALL DELAY</p><p> CMP AL,0FFH ;是否完成一個(gè)周期</p><p><b> JNE B4</b></p><p><b> ret&l
76、t;/b></p><p><b> BO4 endp</b></p><p> ;-----------------------退出主函數(shù)---------------------------------</p><p> BO5 PROC FAR ;退出子程序</p><p> MOV AL,5
77、</p><p> MOV DX,388H ;8255片選地址</p><p> OUT DX,AL ;輸出按鍵號(hào)碼,8255直通</p><p><b> ret</b></p><p><b> BO5 endp</b></p><p><b>
78、 code ends</b></p><p><b> end main</b></p><p><b> 六.心得體會(huì)</b></p><p> 這次課程設(shè)計(jì)選擇了函數(shù)波形發(fā)生器設(shè)計(jì)這個(gè)題目,因?yàn)檫@個(gè)題目既包含了硬件設(shè)計(jì)也包含有軟件的設(shè)計(jì)。在這學(xué)期《微機(jī)原理、匯編與接口技術(shù)》這門課程的學(xué)習(xí)中間,我不僅
79、是學(xué)習(xí)了匯編語言者這項(xiàng)工具,也學(xué)習(xí)了80x86中對(duì)應(yīng)的最小系統(tǒng)、接口電路、外圍設(shè)備擴(kuò)展等等,因此只有在做課程設(shè)計(jì)的時(shí)候?qū)④浖陀布嘟Y(jié)合,才能從中找到微機(jī)原理在現(xiàn)實(shí)中實(shí)現(xiàn)和應(yīng)用方法。故選擇做發(fā)生器這個(gè)題目。</p><p> 在這個(gè)題目中間我使用了最大系統(tǒng)組態(tài)的方式來構(gòu)建整個(gè)CPU系統(tǒng)。本身也可以采取最小組態(tài)的方式,利用多余的地址總線來進(jìn)行對(duì)外設(shè)芯片的直接選通,后來考慮到使用最大組態(tài)具有更強(qiáng)大的功能,也可以學(xué)習(xí)
80、到80x86對(duì)于總線的時(shí)分復(fù)用技術(shù)。80x86本身的20根地址總線實(shí)際上其A0~A7是與D0~D7復(fù)用的,這點(diǎn)從80x86的外部引腳命名上面就可以看出來。它的引腳命名為AD0~AD7即讓它同時(shí)具有地址與數(shù)據(jù)線兩種功能。而這些功能的想實(shí)現(xiàn)則是通過外部74LS373寄存器來實(shí)現(xiàn)的。</p><p> 之后設(shè)計(jì)8259A的按鍵中斷的方式來產(chǎn)生波形發(fā)行發(fā)生的請(qǐng)求,IR0~IR4依次對(duì)應(yīng)著5種不同的波形類型,為了與實(shí)際應(yīng)
81、用相接軌,設(shè)計(jì)了一個(gè)退出鍵,5號(hào)鍵。</p><p> 在波形的產(chǎn)生方面,開始設(shè)想過要產(chǎn)生正弦波信號(hào),因?yàn)檫@個(gè)在實(shí)際中使用的較多,后來發(fā)現(xiàn)產(chǎn)生正弦波信號(hào)的方法無外乎兩類,事先給定正弦波行給點(diǎn)對(duì)應(yīng)的數(shù)字量,然后讓DAC0832按照數(shù)字量進(jìn)行轉(zhuǎn)換。這種方式類似于采樣,即數(shù)字信號(hào)離散化的逆過程。但需要設(shè)置很多的數(shù)字量才得達(dá)到一個(gè)平滑的波形。這十個(gè)相當(dāng)冗長的過程利用現(xiàn)有資源來實(shí)現(xiàn)有點(diǎn)麻煩,小題大做。另外的方法可以使用公
82、式方法來求,但是計(jì)算的過程過于麻煩。在匯編的條件下實(shí)現(xiàn)工程量大。最后沒有做出來。</p><p> 然后是顯示模塊,最開始是利用一個(gè)寄存器值直接與CPU的輸出相連接。這樣的話由于在主函數(shù)DAC0832還有8259A都有可能與CPUA交換數(shù)據(jù),那么LED數(shù)碼管的現(xiàn)實(shí)就會(huì)隨著按鍵的變化而變化不能達(dá)到題目要求。故隨后采用了8255的方式,這里8255采用最簡單的直通方式,當(dāng)CPU選中了8255的CS端并向它線數(shù)據(jù)的時(shí)
83、候,8255才可以接受到CPU的數(shù)據(jù),而不會(huì)隨著AD0~AD7改變而改變。其實(shí)在擴(kuò)展了8255之后,就可以為這個(gè)函數(shù)發(fā)生器設(shè)計(jì)更多的功能了,使得它有了更強(qiáng)大的I/O功能,所以在進(jìn)行這方面的設(shè)計(jì)的同時(shí)應(yīng)該經(jīng)常使用這種外部擴(kuò)展來增強(qiáng)CPU 上有限的功能端口,例如INTR/INTA擴(kuò)展8259,級(jí)聯(lián)方式可以管理256種中斷。</p><p> 在程序的編寫方面,還是進(jìn)行了模塊化的規(guī)劃,在編寫程序之前,首先畫好流程圖。
84、雖然程序不難,但有了流程圖在編寫程序的時(shí)候就可以少走不少彎路。由于每有硬件來進(jìn)行實(shí)際檢測,那么對(duì)這個(gè)程序進(jìn)行了語法和邏輯上的檢查,修改了其中的謬誤,可以直接運(yùn)行。至于在功能上是否齊全還需在實(shí)踐中檢驗(yàn)。</p><p> 編程的時(shí)候?qū)W到最多的還是搞清了怎么去使用這幾個(gè)器件如8255,8259A,DAC0832,80x86,使用這些器件最開是要進(jìn)行初始化,寫入相關(guān)的命令字,對(duì)其工作方式進(jìn)行設(shè)定,在執(zhí)行某些功能候還要
85、再恢復(fù)為默認(rèn)設(shè)定,例如中斷的屏蔽(在這個(gè)程序中不用),中斷向量表等等。而這些都需要細(xì)心學(xué)習(xí)和歸納各種芯片的使用規(guī)則之后加以運(yùn)用,查閱對(duì)應(yīng)芯片的datasheet十一個(gè)好方法。</p><p> 總之,這次課程設(shè)計(jì)受益良多,其中遇到了不少問題,是課堂上沒有解決的,自己查閱資料解決了。整個(gè)設(shè)計(jì)可以符合基本要求,但也需要更多改進(jìn)??偨Y(jié)道,在做類似的設(shè)計(jì)的時(shí)候,應(yīng)有嚴(yán)謹(jǐn)?shù)膽B(tài)度,規(guī)劃好了整個(gè)系統(tǒng)在實(shí)踐,修改,效率更高。&
86、lt;/p><p><b> 七.參考文獻(xiàn)</b></p><p> [1] 朱定華,微機(jī)原理、匯編與接口技術(shù),清華大學(xué)出版社,2005</p><p> [2]沈美明、溫冬嬋,IBM-PC匯編語言程序設(shè)計(jì)(第二版),清華大學(xué)出版社,2010</p><p> [3] 楊斌,微機(jī)原理與接口技術(shù)實(shí)驗(yàn)及課程設(shè)計(jì),西南交通
87、大學(xué)出版社,2005</p><p> [4]消抖電路,http://blog.sina.com.cn/s/blog_790c0ca10100srid.html</p><p> [5] 8259A-2中文數(shù)據(jù)手冊Datasheet - Intel Corporation</p><p> [6] DAC0832中文資料http://wenku.baidu.c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)原理課程設(shè)計(jì)---函數(shù)發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)波形發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)-- 波形發(fā)生器
- 微機(jī)原理課程設(shè)計(jì)----信號(hào)發(fā)生器的設(shè)計(jì)
- 課程設(shè)計(jì)--函數(shù)發(fā)生器
- 函數(shù)發(fā)生器課程設(shè)計(jì)
- 函數(shù)發(fā)生器 課程設(shè)計(jì)
- 課程設(shè)計(jì)——函數(shù)發(fā)生器
- 函數(shù)發(fā)生器課程設(shè)計(jì)
- 函數(shù)發(fā)生器課程設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)----函數(shù)信號(hào)發(fā)生器
- 信號(hào)發(fā)生器課程設(shè)計(jì)---函數(shù)發(fā)生器的設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--信號(hào)發(fā)生器功能程序設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)報(bào)告-波形發(fā)生器
- 微機(jī)課程設(shè)計(jì)--簡易信號(hào)發(fā)生器
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 課程設(shè)計(jì)--函數(shù)波形發(fā)生器
- 函數(shù)發(fā)生器課程設(shè)計(jì)報(bào)告
- 函數(shù)信號(hào)發(fā)生器課程設(shè)計(jì)
- 函數(shù)發(fā)生器課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論