微機原理課程設計-數(shù)字聲音機_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  微機原理課程設計</b></p><p>  題 目 微機原理課程設計 </p><p>  數(shù)字錄音機 </p><p>  學生姓名 </p><p><b>  專業(yè)班級 </b></p>

2、<p>  學 號 </p><p>  所 在 系 </p><p>  指導教師 </p><p>  完成時間 2013 年 1 月 6 日 </p><p>  課程設計(論文)任務書</p><p>  設

3、計題目: 數(shù)字錄音機 </p><p>  專業(yè)班級: </p><p>  學號 姓名 </p><p><b>  主要內(nèi)容</b></p><p>  設計圖書館管理系統(tǒng),主要包含:硬件連線圖、芯片工作原理介紹和各芯片的工作方式。</

4、p><p>  采用圖形用戶界面,通過圖像菜單界面選擇相應的操作,直觀且操作簡單。數(shù)據(jù)庫選用Microsoft Office Access 2003;編輯平臺選用Eclipse 。所用到的知識點有:類的基本構成,異常處理,圖形用戶界面,文件操作和數(shù)據(jù)庫。</p><p><b>  基本要求:</b></p><p>  按照內(nèi)容要求,設計完美的數(shù)

5、字錄音機。要求調(diào)試通過,存在一定的漏洞,功能不夠完善,但是方便用戶操作。功能的實現(xiàn)上力求容錯能力要強且提示信息完備。</p><p>  完成期限: 2013年1月6日 </p><p>  指導教師簽名: </p><p>  評審小組負責人簽名: </p><p><

6、b>  目錄</b></p><p><b>  前言1</b></p><p>  1.1 設計目的1</p><p>  1.2設計內(nèi)容及要求2</p><p><b>  具體設計要求2</b></p><p>  2.1 總體設計思想2&l

7、t;/p><p>  2.2 硬件連線圖3</p><p>  2.3各芯片的作用及工作方式3</p><p><b>  2.4連線圖5</b></p><p><b>  2.5流程圖7</b></p><p><b>  芯片介紹10</b>

8、</p><p><b>  設計方法23</b></p><p>  4.1 具體設計方法23</p><p>  4.2 程序編寫25</p><p><b>  致謝語30</b></p><p><b>  參考文獻31</b><

9、/p><p><b>  前言</b></p><p>  由于計算機技術的飛速發(fā)展,微機原理與接口技術課程已經(jīng)作為一門比較重要的專業(yè)基礎課。微機原理與接口技術已經(jīng)融入我們的基本生活當中,我們生活中的許多電子產(chǎn)品都與之密切相關。微機原理與接口技術是一門實踐性強的學科,其中很多理論和知識僅考書本的學習是無法掌握的,必須通過實踐才能比較直觀深刻的理解。通過課程設計可以培養(yǎng)我們

10、動手的能力,使我們對書本的理論知識掌握更加牢固,培養(yǎng)學生編程的能力以及提出問題,分析分體,解決問題的能力。本次課程設計所做的是關于數(shù)字錄音機的設計。</p><p><b>  1.1設計目的</b></p><p>  1.進一步加深對微機系統(tǒng)的理解和認識,提高微機系統(tǒng)的應用水平。</p><p>  2.進一步學習和掌握匯編語言程序的編寫和

11、應用的方法,通過較大規(guī)模程序的編寫,提高編寫匯編語言程序的水平和學習程序調(diào)試方法。</p><p>  3.進一步熟悉接口,DAC0832、ADC0809及定時計數(shù)器等芯片的使用。</p><p>  1.2設計內(nèi)容及要求</p><p>  1.設計一個聲音錄放系統(tǒng),通過傳感器及ADC0809以每秒5000次的速率采集語言信號,錄音12秒后,再以同樣的速率將語音數(shù)

12、據(jù)通過DAC0832送出至喇叭發(fā)聲(放音)。</p><p>  2.用protel畫出系統(tǒng)的硬件連接圖。</p><p>  3.畫出程序流程圖并編寫程序實現(xiàn)上述功能</p><p><b>  具體設計過程</b></p><p><b>  2.1總體設計思想</b></p>&

13、lt;p>  根據(jù)設計要求,本次數(shù)字錄音機的匯編語言設計所需芯片有模數(shù)轉換芯片ADC0809、數(shù)模轉換芯片DAC0832、定時計數(shù)器8253、可編程并行I/O接口8255A及譯碼器74LS138。設計過程可簡述為:利用傳感器和ADC0809采集語音數(shù)據(jù),以每秒5000的速率采集IN0輸入的語音數(shù)據(jù)并存入內(nèi)存,共采集數(shù)據(jù)60000個,即錄音12秒。DAC0832進行數(shù)模轉換,以同樣的速率將數(shù)據(jù)送DAC0832使喇叭發(fā)聲。8253用作

14、定時,定時0.2ms,設置成方式0,計數(shù)初值為200。8253計數(shù)器0的OUT0與8255A的PA0連接,利用PA0查詢OUT0電平,如果為高點平則表示定時時間到。用譯碼器74LS138對地址線進行譯碼以產(chǎn)生各接口芯片所需的信號。</p><p><b>  2.2硬件連接圖</b></p><p>  2.3各芯片的作用及工作方式</p><p&

15、gt;  (1)ADC0809在本次設計中的作用及工作方式</p><p>  ADC0809作數(shù)據(jù)采集用,用來采集12秒的語音信號并保存到相應的存儲單元。對ADC0809的8個模擬通道,這里是用數(shù)據(jù)總線的低8位D2、D1、D0來控制ADC的通道選擇信號ADDC、ADDB、ADDA,以實現(xiàn)選擇其中之一模擬通道輸入。在本次設計中,初始值為000(D2=0、D1=0、D0=0),即選擇IN0通道進行數(shù)據(jù)采集,然后使A

16、DC0809的ALE、START有效,START和ALE信號通過CPU向選中的通道口執(zhí)行一條輸出指令,啟動A/D轉換。轉換結束后,發(fā)出EOC信號,當EOC為高電平時,可供CPU查詢,讀取每次采集的A/D轉換結果。當CPU知道轉換已完成,執(zhí)行一條輸入指令使OE信號有效,此時輸出緩沖器被打開,數(shù)據(jù)送到數(shù)據(jù)總線。系統(tǒng)時鐘經(jīng)分頻后接到ADC0809芯片的時鐘引腳CLK上。</p><p> ?。?)DAC0832在本次設

17、計中的作用及工作方式</p><p>  在本次設計中,我使用的DAC0832采用直通方式與CPU連接,從硬件圖中可以看出,該片DAC0832只有一個端口地址,即88H。DAC0832的ILE信號與+5V連在一起, 、WR1和WR2均接地,總是有效的,DAC0832的輸入寄存器和DAC寄存器均處于選通狀態(tài),只要CPU想88H端口執(zhí)行一條輸出指令,就會使XFER有效,CPU輸出繁榮數(shù)字量就會順利通過DAC0832的

18、兩個寄存器,然后進行D/A轉換,在運算放大器的輸出端得到轉換結果。</p><p> ?。?)8253、8255A在本次設計中的作用及工作方式</p><p>  8253在本次設計中用作定時,工作于方式0,與8255A連接使用完成定時操作。8255A采用工作方式0進行輸入操作,工作方式0是8255A個端口的基本輸入輸出方式,CPU可從指定端口輸入信息,也可向指定端口輸出信息。當8253寫

19、入方式0控制字后,計數(shù)輸出端OUT0立即變?yōu)榈碗娖?,并且在計?shù)過程中一直保持低電平,當計數(shù)完成時,OUT0輸出變?yōu)楦唠娖健?253計數(shù)器0的OUT0與8255A的PA0連接,因此可通過查詢PA0是否為1,判斷計數(shù)是否完成。計數(shù)完成,則表示定時時間到。</p><p> ?。?)74LS138在本次設計中的作用</p><p>  譯碼器74LS138對地址線進行譯碼以產(chǎn)生各接口芯片所需的信

20、號</p><p>  各接口芯片端口地址分配如下: </p><p><b>  2.4流程圖 </b></p><p><b>  芯片介紹</b></p><p> ?。?)ADC0809</p><p>  ADC0809是CMOS工藝制成的雙列直插式8位A

21、/D轉換芯片,內(nèi)部采用逐次逼近原理,單極性,量程為0~+5V。片內(nèi)部有8路模擬開關,可控制選擇輸入8個模擬量之中的一個,并帶有三態(tài)輸出鎖存緩沖器,可直接與CPU總線連接,不需要外部鎖存器,是應用較廣泛的一種A/D轉換芯片。</p><p>  ①ADC0809內(nèi)部結構</p><p>  ADC0809內(nèi)部結構框圖如圖1所示</p><p>  ADC0809內(nèi)部由

22、兩部分電路組成:</p><p>  第一部分:8路模擬通道選擇開關,地址鎖存器和譯碼器。</p><p>  第二部分:比較器、8位逐次逼近寄存器SAR、8位開關樹型D/A轉換電路、控制邏輯、三態(tài)輸出緩沖鎖存器。</p><p>  工作原理:由ADDA、ADDB、ADDC及ALE選擇8個模擬量之一,并通過通道選擇開關加至比較器一端。由START信號啟動A/D轉換

23、開始且SAR清0。在CLOCK的控制下,將SAR從高位逐次置1,并將每次置位后的SAR送D/A轉換器轉換成與SAR中數(shù)字量成正比的模擬量。DAC的輸出加至比較器的另一端與輸入的模擬電壓進行比較,若Vi大于等于V0保留SAR中該位的1;若Vi小于V0則該位清0。經(jīng)過8次比較(8個CLOCK)后,SAR中的8位數(shù)字量即是結果。在OE有效時,將SAR中的8位二進制數(shù)輸出至鎖存器,并通過D7~D0輸出,同時發(fā)出EOC轉換結束信號。</p&

24、gt;<p>  圖1 ADC0809內(nèi)部結構框圖</p><p>  ②ADC0809引腳功能如下:</p><p>  IN0~IN7 :8 路模擬輸入通道。</p><p>  D0~D7 :8 位數(shù)字量輸出端。</p><p>  START : 啟動轉換命令輸入端,由 1 → 0 時啟動 A/D 轉換,要求信號寬度 &

25、gt;100n</p><p>  OE :輸出使能端,高電平有效</p><p>  ADDA 、ADDB 、ADDC : 地址輸入線,用于選通 8 路模擬輸入中的一路進入 A/D 轉換。其中 ADDA 是 LSB 位,這三個引腳上所加電平的編碼為 000~111 ,分別對應 IN 0 ~IN 7 ,例如,當 ADDC=0 , ADDB=1 , ADDA=1 時,選中 IN 3 通道。&

26、lt;/p><p>  ALE :地址鎖存允許信號。用于將 ADDA~ADDC 三條地址線送入地址鎖存器中。</p><p>  EOC :轉換結束信號輸出。轉換完成時, EOC 的正跳變可用于向 CPU 申請中斷,其高電平也可供 CPU 查詢。</p><p>  CLK :時鐘脈沖輸入端,要求時鐘頻率不高于 640KHZ 。</p><p>

27、  REF(+)、REF(-):基準電壓,一般與微機接口時,REF(-)接 0V 或 -5V ,REF (+)接 +5V 或 0V 。</p><p>  (2)DAC0832</p><p>  DAC0832是用COMS工藝制成的雙列直插式8位D/A轉換芯片,內(nèi)部采用T型電阻網(wǎng)絡,數(shù)字輸入有輸入寄存器和DAC寄存器兩級緩沖,可以雙緩沖、單緩沖或直接輸入方式連接。</p>

28、<p>  DAC0832內(nèi)部結構圖</p><p>  DAC0832引腳圖如圖2所示,各引腳功能如下:</p><p>  圖2 DAC0832引腳圖</p><p>  DI7~DI0:轉換數(shù)據(jù)輸入</p><p> ?。浩x信號(輸入),低電平有效</p><p>  ILE:數(shù)據(jù)鎖存允許信號(輸入)

29、,高電平有效</p><p> ?。旱?寫信號(輸入),低電平有效</p><p>  上述兩個信號控制輸入寄存器是數(shù)據(jù)直通方式還是數(shù)據(jù)鎖存方式;當ILE=1和=0時,為輸入寄存器直通方式;當ILE=1和=1時,為輸入寄存器鎖存方式。</p><p> ?。旱?寫信號(輸入),低電平有效</p><p>  :數(shù)據(jù)傳送控制信號(輸入),低電平

30、有效</p><p>  上述兩個信號控制DAC寄存器是數(shù)據(jù)直通方式還是數(shù)據(jù)鎖存方式;當=0和=0時,為DAC寄存器直通方式;當=1和=0時,為DAC寄存器鎖存方式。</p><p>  Iout1:電流輸出1</p><p>  Iout2:電流輸出2</p><p>  DAC轉換器的特性之一是:Iout1+Iout2=常數(shù)。</p

31、><p><b>  Rfb—反饋電阻端</b></p><p>  0832是電流輸出,為了取得電壓輸出,需在電壓輸出端接運算放大器,Rfb即為運算放大器的反饋電阻端。運算放大器的接法如圖3所示。</p><p>  Vref:基準電壓,其電壓可正可負,范圍-10V~+10V。</p><p><b>  DGN

32、D:數(shù)字地</b></p><p>  AGND:模擬地                             

33、 </p><p>  DAC0832的三種工作方式</p><p><b> ?、僦蓖ǚ绞?lt;/b></p><p>  當 ILE 接高電平, 都接數(shù)字地時, DAC 處于直通方式, 8 位數(shù)字量一旦到達 D 0~D 7 輸入端,就立即加到 D/A 轉換器,被轉換成模擬量。在 D/A 實際連接中,要注意區(qū)分“模擬地”和“數(shù)字地”的連接,為了避

34、免信號串擾,數(shù)字量部分只能連接到數(shù)字地,而模擬量部分只能連接到模擬地。這種方式可用于不采用微機的控制系統(tǒng)中。</p><p><b> ?、趩尉彌_方式</b></p><p>  單緩沖方式是將兩個鎖存器之一處于直通狀態(tài),輸入數(shù)據(jù)中經(jīng)過一級緩沖送入 D/A 轉換器。如把 都接地,使寄存鎖存器 2 處于直通狀態(tài), ILE接 +5V , 接 CPU 系統(tǒng)總線的 信號, 接

35、端口地址譯碼信號,這樣 CPU 可執(zhí)行一條 OUT 指令,使 和 有效,寫入數(shù)據(jù)并立即啟動 D/A 轉換。 </p><p><b> ?、垭p緩沖方式</b></p><p>  即數(shù)據(jù)通過兩個寄存器鎖存后再送入 D/A 轉換電路,執(zhí)行兩次寫操作才能完成一次 D/A 轉換。這種方式可在 D/A 轉換的同時,進行下一個數(shù)據(jù)的輸入,可提高轉換速度。更為重要的是,這種方式特

36、別適用于系統(tǒng)中含有 2 片及以上的 DAC0832 ,且要求同時輸出多個模擬量的場合。 </p><p> ?。?)可編程計數(shù)/定時接口芯片8253</p><p>  8253外部引腳結構</p><p>  8253各引腳的功能定義如下:  數(shù)據(jù)總線D0~D7:它們?yōu)槿龖B(tài)輸入/輸出線,用于將8253與系統(tǒng)數(shù)據(jù)總線相連,是8253與CPU接口數(shù)據(jù)線,供CPU向8

37、253讀寫數(shù)據(jù)、命令和狀態(tài)信息。  讀信號RD:它為輸入信號,低電平有效。它由CPU發(fā)出,用于對8253寄存器讀操作?! 懶盘朩R:它為輸入信號,低電平有效。它由CPU發(fā)出,用于對8253寄存器寫操作?! 〉刂纷g碼線A1A0:這兩根線接到系統(tǒng)地址總線的A1A0上。當CS=0,8253被選中時,A1A0用于選擇8253內(nèi)部寄存器,以便對它們進行讀寫操作。8253內(nèi)部寄存器與地址碼A1A0的關系如表7-3所示。  時鐘信號CLK:

38、CLK為輸入信號。3個計數(shù)器,各有一獨立的時鐘輸入信號,分別為CLK0、CLK1、CLK2。時鐘信號的作用是在8253定時或計數(shù)工作時,每輸入一個時鐘信號CLK,便使定時或計數(shù)值減1。它是計量的基本時鐘。  門選通信號GATE:GATE信號為輸入信號。3個通道,每一個都有自己的門選通信號,分別為GATE0、GATE1、GATE2。GATE信號的作用是用來禁止、允許或開始計數(shù)過程。對8253的6種不同</p><p&

39、gt;<b>  8253的內(nèi)部結構</b></p><p><b> ?、贁?shù)據(jù)總線緩沖器</b></p><p>  該緩沖器為 8 位雙向三態(tài)的緩沖器, 8 根數(shù)據(jù)線 D 0 ~D 7 可直接掛在 CPU 數(shù)據(jù)總線上。</p><p> ?、?#160;   讀/寫控制邏輯</p>&

40、lt;p>  它是 8253 內(nèi)部操作的控制部分,它決定三個計數(shù)器和控制字寄存器中哪一個能進行工作,并控制內(nèi)部總線上數(shù)據(jù)傳送的方向。</p><p><b> ?、劭刂谱旨拇嫫?lt;/b></p><p>  接收從 CPU 來的控制字,并由控制字的 D7 、D6 位的編碼決定該控制字寫入哪個計數(shù)器的控制寄存器,控制寄存器只能寫入,不能讀出。</p>

41、<p><b> ?、苡嫈?shù)器</b></p><p>  8253 有 3 個獨立的計數(shù)器通道,每個通道的結構完全相同,如圖 10.2 所示。每一個通道有一個 16 位減法計數(shù)器;還有對應的 16 位初值寄存器和輸出鎖存器。每個計數(shù)器都可以對其 CLK 輸入端輸入的脈沖按照二進制或 BCD 碼從預置的初值開始進行減 1 計數(shù),當減至 0 時,從 OUT 端輸出一個信號,計數(shù)的開始由

42、軟件啟動或硬件門控信號 GATE 控制。計數(shù)開始前寫入的計數(shù)初值存于初值寄存器;計數(shù)過程中,減法計數(shù)器的值不斷遞減,而初值寄存器中的初值不變。輸出鎖存器則用于寫入鎖存命令時鎖定當前計數(shù)值。</p><p>  當 8253 用作計數(shù)器時,加在 CLK 引腳上脈沖的間隔可以是不相等的;當它用作定時器時,則在 CLK 引腳應輸入精確的時鐘脈沖, 8253 所能實現(xiàn)的定時時間,取決于計數(shù)脈沖的頻率和計數(shù)器的初值。<

43、;/p><p>  對 8253 來講,外部輸入到 CLK 引腳上的時鐘脈沖頻率不能大于 2MHZ ,否則需分頻后才能送到 CLK 端。</p><p> ?。?)可編程并行I/O接口芯片8255A</p><p>  8255A的外部引腳布局如圖所示。它有40根引腳,可分為與系統(tǒng)總線(如8086)連接的引腳和與外部設備連接的引腳。 </p><p&

44、gt;<b>  8255A引腳圖</b></p><p>  8255A引腳功能說明: RESET:復位輸入線,當該輸入端外于高電平時,所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式。 PA0~PA7:端口A輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入鎖存器。 PB0~PB7:端口B輸入輸出線,一個8位的I/O鎖存器, 一個8位的輸入輸出

45、緩沖器。 PC0~PC7:端口C輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入緩沖器。端口C可以通過工作方式設定而分成2個4位的端口, 每個4位的端口包含一個4位的鎖存器,分別與端口A和端口B配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。CS:片選信號線,當這個輸入引腳為低電平時,表示芯片被選中,允許8255與CPU進行通訊。 RD:讀信號線,當這個輸入引腳為低電平時,允許8255通過數(shù)據(jù)總線向CPU發(fā)送數(shù)據(jù)

46、或狀態(tài)信息,即CPU從8255讀取信息或數(shù)據(jù)。 WR:寫入信號,當這個輸入引腳為低電平時,允許CPU將數(shù)據(jù)或控制字寫8255。 D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255與CPU數(shù)據(jù)傳送的通道,當CPU 執(zhí)行輸入輸出指令時,通過它</p><p><b>  8255A內(nèi)部結構</b></p><p>  ①并行輸入/輸出端口A、B、C</p><

47、p>  8255A 芯片具有 24 個可編程輸入輸出引腳,分成 3 個 8 位端口,其中:端口 A 包含一個 8 位數(shù)據(jù)輸出鎖存 / 緩沖寄存器和一個 8 位數(shù)據(jù)輸入鎖存器;端口 B 包含一個 8 位數(shù)據(jù)輸入 / 輸出、鎖存 / 緩沖寄存器和一個 8 位數(shù)據(jù)輸入緩沖寄存器;端口 C 包含一個輸出鎖存 / 緩沖寄存器和一個輸入緩沖寄存器。必要時端口 C 可分成兩個 4 位端口,分別與端口 A 與端口 B 配合工作,通常將端口 A 和

48、端口 B 定義為輸入 / 輸出的數(shù)據(jù)端口,而端口C可作為狀態(tài)或控制信息的傳送端口。</p><p>  ②A組和B組控制部件</p><p>  端口 A 與端口 C 的高 4 位 (PC 7 ~ PC 4) 構成 A 組,由 A 組控制部件實現(xiàn)控制功能,端口 B 與端口 C 的低 4 位( PC 3 ~ PC 0 )構成 B 組,由 B 組控制部件實現(xiàn)控制功能。它們各有一個控制單元,可接

49、收來自讀 / 寫控制部件的命令和 CPU 通過數(shù)據(jù)總線(D7~D0)送來的控制字,并根據(jù)它們來定義各個端口的操作方式。</p><p> ?、?#160;    數(shù)據(jù)總線緩沖器</p><p>  這是一個三態(tài)雙向 8 位數(shù)據(jù)緩沖器,它是 8255A 與 8086CPU 之間的數(shù)據(jù)接口, CPU輸入輸出的數(shù)據(jù),CPU輸出的控制字以及外設的狀態(tài)信息都是通過這個緩

50、沖器進行傳送。</p><p> ?、?#160;    讀/寫控制部件</p><p>  這是 8255A 內(nèi)部完成讀 / 寫控制功能的部件,它與 CPU 的地址總線及有關的控制信號相連,接收 CPU 的控制命令,并根據(jù)它們向片內(nèi)各功能部件發(fā)出操作命令</p><p> ?。?)74LS138譯碼器</p><p

51、>  74LS138是3-8線二進制譯碼器,它有3個輸入端,8個輸出端,輸出低電平有效。該器件3個輸入端A、B、C接受二進制碼,其輸出端Y0~Y7工8條譯碼輸出線。除此之外,還有3個使能控制端G、G2A、G2B,目的在于靈活應用并組合各種電路。只有當G=0,同時G2A +G2B=0時,譯碼器工作,否則,譯碼器功能被禁止。</p><p><b>  設計方法</b></p>

52、<p><b>  4.1具體實現(xiàn)方法</b></p><p>  實現(xiàn)該聲音錄放系統(tǒng)功能的程序可以分為以下四個部分:</p><p><b>  (1)主程序</b></p><p>  主程序的主要任務是對8253、8255A進行初始化,實現(xiàn)錄、放音的功能調(diào)用。</p><p> 

53、?、?253初始化設置</p><p>  8253在程序中設置成方式0,計數(shù)200,定時0.2ms </p><p>  8253工作方式控制字:10000000B,即10H;選擇通道0,方式0,只讀寫的、低8位</p><p>  設8253輸入時鐘信號的頻率為 1MHZ</p><p>  計數(shù)初值=0.2 ms/0.001ms=200

54、</p><p>  控制字端口地址為:81H</p><p>  計數(shù)器0端口地址為:80H</p><p> ?、?255A初始化設置</p><p>  8255A控制字:10010000B,即90H;方式0,A口輸入</p><p>  控制字端口地址為:85H</p><p><

55、b>  A口地址為:84H</b></p><p> ?、壅{(diào)用錄、放音子程序</p><p>  首先DOS功能調(diào)用,顯示錄音提示信息,然后BIOS功能調(diào)用,讀鍵盤緩沖區(qū)字符,等待鍵盤輸入,若無鍵按下,繼續(xù)等待;有鍵按下,則調(diào)用錄音子程序,錄音12秒。清除鍵盤緩沖區(qū)后,再進行放音子程序的調(diào)用。</p><p> ?。?)A/D錄放音子程序</

56、p><p>  根據(jù)設計要求,ADC0809要以每秒5000的速率采集語音數(shù)據(jù),錄音12秒,因此共需采集5000×12=60000個數(shù)據(jù),計數(shù)器CX=60000。</p><p>  選擇IN0通道進行數(shù)據(jù)采集(D2=0、D1=0、D0=0),尋址A/D轉換啟動端口地址,CPU向IN0通道執(zhí)行一條輸出指令,啟動一次A/D轉換。尋址EOC狀態(tài)端口地址,讀取EOC狀態(tài),測試轉換是否結束,

57、未完則繼續(xù)等待,轉換完成后,則尋址ADC0809轉換結果端口,CPU執(zhí)行一條輸入指令,取A/D轉換結果。</p><p>  A/D轉換啟動端口地址:8CH</p><p>  轉換結果端口地址:90H</p><p>  EOC狀態(tài)端口地址:94H</p><p>  (3)D/A放音子程序</p><p>  置數(shù)

58、據(jù)區(qū)首址至SI,計數(shù)器CX=60000。從數(shù)據(jù)區(qū)取數(shù)據(jù),尋址DAC端口地址,CPU執(zhí)行一條輸出指令,進行D/A轉換。</p><p>  DAC端口地址為:88H</p><p><b> ?。?)延時子程序</b></p><p>  DELAY是延時0.2 ms的子程序</p><p>  將8253計數(shù)器0的OUT

59、0輸入到8255A端口,測試PA0是否為1,若不為1,則表示8253未計數(shù)完,繼續(xù)查詢,如果為1,則表示8253計數(shù)完成,定時時間到。</p><p><b>  4.2程序編寫</b></p><p>  NAME    EXAMPLE </p><p>  DATA    SEGM

60、ENT</p><p>  BUF     DB 60000 DUP(?)</p><p>  MESS1   DB‘NOW READAY TO RACORD’,0DH,0AH,‘$’</p><p>  MESS2   DB ‘NOW PLAY THE RECORDING!’, 0DH

61、,0AH, ‘$’</p><p>  DATA    ENDS</p><p>  CODE    SEGMENT</p><p>  ASSUME  CS:CODE,DS:DATA</p><p><b>  START:  </b>&l

62、t;/p><p>  MOV DX,81H                ;指向8253控制口</p><p>  MOV AL,10H        &#

63、160;       ;控制字:選擇通道0,方式0,只讀寫的、低8位</p><p>  OUT DX, AL                ;送控制字</p><p>  MOV

64、 DX, 85H               ;指向8255A控制口</p><p>  MOV AL, 90H             

65、0; ;控制字:方式0,A口輸入</p><p>  OUT DX, AL</p><p>  MOV AX, DATA</p><p>  MOV DS, AX   </p><p>  MOV DX, OFFSET MESS1</p><p>  MOV AH,09H</p>&l

66、t;p>  INT 21H                    ;顯示錄音提示信息 </p><p>  WAIT:   MOV AH,01H</p><p>  INT 1

67、6H                  ;讀鍵盤緩沖區(qū)字符,是否有鍵按下</p><p>  JZ  WAIT          &#

68、160;       ;無鍵按下,繼續(xù)等待</p><p>  CALL READ                 ;有鍵按下,調(diào)用錄音子程序</p><p>

69、  MOV DX, OFFSET MESS2</p><p>  MOV AH, 09H</p><p>  INT 21H                   ;顯示放音提示信息</p>

70、<p>  MOV AL, 07H</p><p>  MOV AH, 0CH</p><p>  INT 21H                     ;清除鍵盤緩沖區(qū)</p

71、><p>  RE:     MOV AH,01H</p><p>  INT 16H                     ;讀鍵盤緩沖區(qū)字符,是否有鍵按下

72、</p><p>  JZ  RE                     ;無鍵按下,繼續(xù)等待</p><p>  CALL   PLY &

73、#160;               ;有鍵按下,調(diào)用放音子程序</p><p>  CMP AL, 20H             

74、60;  ;是空格嗎</p><p>  JZ   RE                    ;不是,繼續(xù)循環(huán)</p><p>  MOV AH, 4CH&

75、#160;               ;是,子程序返回</p><p><b>  INT 21H</b></p><p>  READ PROC NEAR</p><p>  MOV DI, OFFS

76、ET BUF      ;尋址數(shù)據(jù)區(qū)</p><p>  MOV CX,60000              ;裝入計數(shù)器CX=60000</p><p>  READ1:   MOV A

77、L,00H    ;選擇IN0通道</p><p>  MOV DX,8CH             ;DX指A/D轉換啟動端口地址</p><p>  OUT DX,AL     

78、           ;啟動A/D轉換</p><p>  MOV DX,94H              ;尋址EOC狀態(tài)端口地址</p><p

79、>  READ2:   IN  AL, DX              ;取EOC狀態(tài)</p><p>  TEST AL,80H          

80、       ;測試轉換是否結束</p><p>  JZ  READ2                   ;未完,則等待</p><p>  MOV

81、0; DX, 90H               ;尋址數(shù)據(jù)端口</p><p>  IN  AL,  DX            &#

82、160;    ;取A/D轉換結果</p><p>  MOV [DI],AL                 ;存到數(shù)據(jù)區(qū)</p><p>  INC  DI    &

83、#160;               ;尋址下一單元</p><p>  CALL DELAY              &#

84、160;  ;延時0.2ms</p><p>  LOOP READ1                 ;重復60000次</p><p><b>  RET</b></p><p

85、><b>  READ ENDP</b></p><p>  PLY PROC NEAR</p><p>  MOV SI,OFFSET  BUF          ;尋址數(shù)據(jù)區(qū)</p><p>  MOV CX,60000 &#

86、160;              ;裝入計數(shù)器CX=60000</p><p>  PLY1:   MOV AL, [SI]           ;從數(shù)據(jù)

87、區(qū)取數(shù)據(jù)</p><p>  MOV DX, 88H                  ;尋址DAC</p><p>  OUT DX,AL      &

88、#160;             ;發(fā)送到DAC</p><p>  INC SI                 

89、;      ;尋址下一單元</p><p>  CALL DELAY                    ;延時0.2ms</p><p>

90、;  LOOP  PLY1</p><p><b>  RET</b></p><p><b>  PLY ENDP</b></p><p>  DELAY PROC NEAR</p><p>  MOV DX, 80H      

91、;             ;指向8253計數(shù)器0端口</p><p>  MOV AL, 200                &

92、#160;  </p><p>  OUT DX, AL                    ;寫入計數(shù)初值200</p><p>  MOV DX, 84H  &#

93、160;                ;指向8255A的A端口</p><p>  XX:     IN AL,DX         

94、;     ;將計數(shù)器0的OUT0輸入到8255A的A口</p><p>  TEST AL,01H                   ;測試PA0=1?</p><p&

95、gt;  JZ  XX                         ;不等于1,計數(shù)未完,繼續(xù)等待</p><p>  RET   &#

96、160;                        ;等于1,子程序返回</p><p>  DELAY ENDP</p><p><b>  COD

97、E ENDS</b></p><p><b>  END START</b></p><p><b>  致謝語</b></p><p>  在進行這次微機原理及其應用課程設計之前,我覺得利用匯編語言進行較大規(guī)模程序的編寫是非常困難的,但通過對這次課題數(shù)字錄音機的設計與編程,我不僅加深了對微機原理及接口技術的認

98、識和理解,還認識到只要自己認真對待,通過查閱資料,理解消化資料,編程并不是難事。</p><p>  DAC0832,ADC0839都是我從未接觸過的芯片,我以為程序一定會很復雜,但通過查閱資料,了解了數(shù)模轉換和模數(shù)轉換芯片的功能及應用,但在編程中也遇到一些問題比如如何利用8253定時延時,CPU與A/D、D/A轉換芯如何連接,在請教知道武老師以后,問題基本得以解決。在調(diào)試過程中,出現(xiàn)缺少提示信息的欄目,導致在運

99、行過程中不知道何時開始錄音,何時開始放音,如何設置重播音。發(fā)現(xiàn)問題后,馬上增加白提示信息,使程序在運行過程中更加流暢,更加簡單。本次實驗中,還可以增加更多的功能,由于時間的關系而沒有添加上去。從總體上看,本次實驗還是非常成功的。</p><p><b>  參考文獻</b></p><p>  [1] 范立南, 謝子殿. 單片機原理及應用教程[M]. 北京: 北京大學

100、出版社, 2006.1:123-140</p><p>  [2] 劉國榮,梁景凱. 計算機控制技術與應用[M]. 北京:機械工業(yè)出版社,2006.5:66-86</p><p>  [3] 潘新民,王燕芳編著.微型計算機控制技術[M].北京:電子工業(yè)出版社,2007.6:37-59.</p><p>  [4] 譚浩強.微機原理及其應用[M].北京: 清華大學出版

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論