單片機(jī)在低頻信號(hào)發(fā)生器中的應(yīng)用.doc_第1頁
單片機(jī)在低頻信號(hào)發(fā)生器中的應(yīng)用.doc_第2頁
單片機(jī)在低頻信號(hào)發(fā)生器中的應(yīng)用.doc_第3頁
單片機(jī)在低頻信號(hào)發(fā)生器中的應(yīng)用.doc_第4頁
單片機(jī)在低頻信號(hào)發(fā)生器中的應(yīng)用.doc_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章 緒論1.1 概述波形發(fā)生器亦稱函數(shù)發(fā)生器,作為實(shí)驗(yàn)用信號(hào)源,是現(xiàn)今各種電子電路實(shí)驗(yàn)設(shè)計(jì)應(yīng)用中必不可少的儀器設(shè)備之一。目前,市場(chǎng)上常見的波形發(fā)生器多為純硬件的搭接而成,且波形種類有限,多為鋸齒、正弦、方波、三角等波形。當(dāng)今是科學(xué)技術(shù)及儀器設(shè)備高度智能化飛速發(fā)展的信息社會(huì),電子技術(shù)的進(jìn)步,給人們帶來了根本性的轉(zhuǎn)變。現(xiàn)代電子領(lǐng)域中,單片機(jī)的應(yīng)用正在不斷的走向深入,這必將導(dǎo)致傳統(tǒng)控制與檢測(cè)技術(shù)的日益革新。單片機(jī)構(gòu)成的儀器具有高可靠性、高性能價(jià)格比,在智能儀表系統(tǒng)和辦公自動(dòng)化等諸多領(lǐng)域得以極為廣泛的應(yīng)用,并走入家庭,從洗衣機(jī)、微波爐到音響汽車,處處可見其應(yīng)用。因此,單片機(jī)技術(shù)開發(fā)和應(yīng)用水平已逐步成為一個(gè)國家工業(yè)發(fā)展水平的標(biāo)志之一。信號(hào)發(fā)生器作為一種常見的應(yīng)用電子儀器設(shè)備,傳統(tǒng)的一般可以完全由硬件電路搭接而成,如采用555振蕩電路發(fā)生正弦波、三角波和方波的電路便是可取的路徑之一,不用依靠單片機(jī)。但是這種電路存在波形質(zhì)量差,控制難,可調(diào)范圍小,電路復(fù)雜和體積大等缺點(diǎn)。在科學(xué)研究和生產(chǎn)實(shí)踐中,如工業(yè)過程控制,生物醫(yī)學(xué),地震模擬機(jī)械振動(dòng)等領(lǐng)域常常要用到低頻信號(hào)源。而由硬件電路構(gòu)成的低頻信號(hào)其性能難以令人滿意,而且由于低頻信號(hào)源所需的rc要很大。大電阻,大電容在制作上有困難,參數(shù)的精度亦難以保證。體積大,漏電,損耗顯著更是其致命的弱點(diǎn)。一旦工作需求功能有增加,則電路復(fù)雜程度會(huì)大大增加。利用單片機(jī)采用程序設(shè)計(jì)方法來產(chǎn)生低頻信號(hào),其頻率底線很低。具有線路相對(duì)簡(jiǎn)單,結(jié)構(gòu)緊湊,價(jià)格低廉,頻率穩(wěn)定度高,抗干擾能力強(qiáng),用途廣泛等優(yōu)點(diǎn),并且能夠?qū)Σㄐ芜M(jìn)行細(xì)微調(diào)整,改良波形,使其滿足系統(tǒng)的要求。只要對(duì)電路稍加修改,調(diào)整程序,即可完成功能升級(jí)。1.2 設(shè)計(jì)要求本課題利用at89c51單片機(jī)和兩片dac0832數(shù)模轉(zhuǎn)換器,組成數(shù)字式低頻信號(hào)發(fā)生器,要求:(1)該裝置用鍵盤控制輸出方波、三角波、正弦波;(2)用鍵盤控制輸出幅度和頻率的變化,并將幅值和頻率用數(shù)碼管顯示,幅度范圍1v5v,頻率范圍010khz。1.3硬件電路的實(shí)現(xiàn)原理與構(gòu)思1.3.1at89c51單片機(jī)控制兩片dac0832的原理圖輸出基準(zhǔn)電壓at89c51單片機(jī)dac0832dac0832圖1.1 at89c51控制兩片dac0832原理圖因?yàn)閍t89c51單片機(jī)自身便有一個(gè)64k的程序存儲(chǔ)器,所以不用擴(kuò)展外加程序存儲(chǔ)器。由單片機(jī)編程即可由單片機(jī)輸出所需要信號(hào)的數(shù)字量,再由d/a數(shù)模轉(zhuǎn)換器將數(shù)字量轉(zhuǎn)化為模擬電流輸出,通過運(yùn)放轉(zhuǎn)化為模擬電壓輸出。因?yàn)閐/a數(shù)模轉(zhuǎn)換器的最大輸出電壓是由其輸入的基準(zhǔn)電壓來控制的,所以只要能控制d/a的基準(zhǔn)電壓便可以控制輸出幅度,實(shí)現(xiàn)幅度可調(diào)。所以設(shè)計(jì)用兩片dac0832來輸出信號(hào),第一片d/a用來輸出信號(hào),第二片d/a用來控制第一片d/a的基準(zhǔn)點(diǎn)壓。其中用p0口作為兩片d/a的數(shù)據(jù)總線,p2口的p2.0和p2.1口用來控制兩片d/a的選通。1.3.2鍵盤顯示電路的構(gòu)思由于本設(shè)計(jì)要求控制波形的幅度和頻率,所需按鍵較多,所以設(shè)計(jì)選用p1口來擴(kuò)展44鍵盤。由于44鍵盤的設(shè)計(jì)已很普遍,所以在本文中不加以介紹。本設(shè)計(jì)中要求用數(shù)碼管顯示輸出信號(hào)的幅度和頻率等信息,而這些信息在信號(hào)輸出的時(shí)候是不需要時(shí)刻改變的,所以設(shè)計(jì)中選用靜態(tài)數(shù)碼管顯示,由單片機(jī)的串行通信口輸出顯示數(shù)據(jù)。這樣可以節(jié)省單片機(jī)的端口來做其它的用途,給予了裝置可優(yōu)化性。at89c51單片機(jī)74ls16474ls164數(shù)碼管數(shù)碼管圖 1.2顯示電路方框圖圖中只給出兩位數(shù)碼管的顯示,可以按要求任意擴(kuò)展n位數(shù)碼顯示,每擴(kuò)展一片74ls164,可以增加一位led顯示器。所要顯示的數(shù)據(jù)由rxd串行發(fā)送出去,由74ls164轉(zhuǎn)化為并行輸出,再由led顯示。這樣,在顯示數(shù)據(jù)輸送完畢之后,主程序可以不必掃描顯示器,從而使cpu能用于其它工作。1.4軟件設(shè)計(jì)的構(gòu)思1.4.1幅度控制由于d/a數(shù)模轉(zhuǎn)換器輸出的最大幅度可以用其基準(zhǔn)電壓來控制,所以控制第二片d/a數(shù)模轉(zhuǎn)換器輸出給第一片d/a數(shù)模轉(zhuǎn)換器的電壓值就可控制信號(hào)幅度。因此,送入第二片的值是幾個(gè)固定的值。由于dac0832內(nèi)部具有鎖存器,所以只需向第二片d/a送值一次,直到下一次改變信號(hào)幅度。1.4.2頻率控制單片機(jī)內(nèi)部數(shù)據(jù)只有0、1之分,所產(chǎn)生的信號(hào)也都是離散信號(hào)。為了能夠讓單片機(jī)輸出所需的數(shù)字信號(hào),我們采用對(duì)信號(hào)采樣、量化的方法來實(shí)現(xiàn)由單片機(jī)產(chǎn)生所需信號(hào)。在本設(shè)計(jì)中,對(duì)信號(hào)的四分之一周期采樣19個(gè)幅度值,通過反復(fù)查表來輸出幅度值,而整個(gè)信號(hào)是通過正查表和逆向查表來實(shí)現(xiàn)的。采樣的點(diǎn)越密,信號(hào)失真度也就越小。兩次采樣點(diǎn)的輸出時(shí)間間隔是由定時(shí)、計(jì)數(shù)器來控制的,因此,通過控制不同的計(jì)數(shù)初值就可以控制整個(gè)信號(hào)的頻率。計(jì)數(shù)時(shí)間=信號(hào)周期/72。計(jì)數(shù)次數(shù)=計(jì)數(shù)時(shí)間/機(jī)器周期。對(duì)應(yīng)的,計(jì)數(shù)初值=65536計(jì)數(shù)次數(shù)。單片機(jī)只能產(chǎn)生離散頻率的信號(hào),所以所得到的信號(hào)頻率不是連續(xù)的,而是離散的頻率點(diǎn)。由于這部分計(jì)算位數(shù)較多,不適合用單片機(jī)編程來計(jì)算計(jì)數(shù)初值,所以本設(shè)計(jì)中將各頻率的計(jì)數(shù)初值算出,讓單片機(jī)按控制命令來查表控制頻率。正弦波和三角波的頻率控制方法都與上述方法相同,而方波的頻率控制是半周期計(jì)數(shù),經(jīng)過半周期只需改變輸出為最大或最小電平即可。本設(shè)計(jì)為低頻信號(hào)發(fā)生器,在頻率只有幾十赫茲的時(shí)候計(jì)數(shù)次數(shù)將很大,因此計(jì)數(shù)器的工作方式選為工作方式1,每次計(jì)數(shù)器溢出時(shí)需要重新裝入計(jì)數(shù)初值。1.5 本章小結(jié)本章主要介紹了低頻信號(hào)發(fā)生器目前的應(yīng)用和發(fā)展現(xiàn)狀。對(duì)課題進(jìn)行了說明和論證,并提出了解決方案的初步方法,列出了總體方案框圖。系統(tǒng)方案的論證是十分重要的,它是設(shè)計(jì)工作的開始,也給出了實(shí)現(xiàn)設(shè)計(jì)的工作步驟。有了充分的準(zhǔn)備,設(shè)計(jì)才能有條不紊開始實(shí)施。第2章 硬件電路設(shè)計(jì)2.1 電路總體方框圖輸出單片機(jī)鍵盤電路顯示電路d/a數(shù)模轉(zhuǎn)換電路放大輸出電路圖2.1 電路總體方框圖2.2 各部分電路設(shè)計(jì)2.2.1 輸入電路設(shè)計(jì)按鍵是本設(shè)計(jì)的輸入設(shè)備,是控制單片機(jī)的唯一途徑。設(shè)計(jì)中與一共使用了17個(gè)按鍵,44鍵盤和一個(gè)復(fù)位鍵。44鍵盤中包含了09的數(shù)字鍵和三個(gè)波形選擇鍵,一個(gè)清除鍵和一個(gè)確認(rèn)鍵。由于功能鍵較多,所以在輸入控制命令的時(shí)候非常方便。由于機(jī)械的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)穩(wěn)定的接通,在斷開時(shí)也不會(huì)立即斷開。因而在閉合和斷開的時(shí)候,均會(huì)伴有一連串的抖動(dòng),抖動(dòng)時(shí)間的長度一般在5ms10ms。由于按鍵抖動(dòng)引起一次按鍵被誤讀多次,所以為了確保cpu的正確處理,必須對(duì)按鍵信息進(jìn)行消除抖動(dòng)處理。消抖的處理方法基本上分為軟件消抖和硬件消抖兩種方法。在本設(shè)計(jì)中,采用了軟件消抖的方法。具體應(yīng)用是在掃描鍵盤時(shí),通過延時(shí)10ms后,再掃描鍵盤,確認(rèn)的確是有鍵按下的時(shí)候,跳到讀鍵值的子程序,等待按鍵的動(dòng)作完成,然后才繼續(xù)執(zhí)行其它操作。2.2.2 復(fù)位電路的設(shè)計(jì)一個(gè)系統(tǒng)能否正常工作,首先要檢查其復(fù)位電路是否工作正常。rst為外部復(fù)位信號(hào)的輸入引腳。在mcs51器件內(nèi)部,rst接到一個(gè)施密特觸發(fā)器的輸入端。這樣可以濾掉低于施密特觸發(fā)電平的噪聲干擾信號(hào)。在振蕩器運(yùn)行時(shí),rst引腳上保持至少兩個(gè)機(jī)器周期的高電平輸入信號(hào),復(fù)位過程即可完成。為響應(yīng)這一過程,cpu發(fā)出內(nèi)部復(fù)位信號(hào)。內(nèi)部復(fù)位操作是在發(fā)現(xiàn)rst為高電平后的第二個(gè)機(jī)器周期進(jìn)行的,并且此后的每個(gè)周期都重復(fù)進(jìn)行復(fù)位操作,直到rst變成低電平為止。外部復(fù)位信號(hào)與內(nèi)部時(shí)鐘是不同步的。rst引腳電平在每個(gè)機(jī)器周期的s5p2均被采樣一次。采樣到邏輯1后,各引腳可維持它們的現(xiàn)行活動(dòng)長達(dá)19個(gè)振蕩周期之久,即在外部復(fù)位信號(hào)加到rst引腳后,仍維持1930個(gè)振蕩周期。復(fù)位電路的連接方法有很多,有上電復(fù)位電路、采用反向器的復(fù)位電路、按鍵電平復(fù)位和按鍵脈沖復(fù)位。本設(shè)計(jì)中采用的是按鍵電平復(fù)位,并帶有上電復(fù)位功能,其設(shè)計(jì)簡(jiǎn)單,采用電阻分壓的方式給rst提供高電平。這種設(shè)計(jì)使用元件少,而且計(jì)算簡(jiǎn)便,只要兩個(gè)分壓電阻的阻值選擇適當(dāng),可以使得分壓值達(dá)到復(fù)位需要,也可以使時(shí)間常數(shù)不太大,及時(shí)復(fù)位。具體電路如圖2.2所示:圖2.2 復(fù)位電路方框圖2.2.3時(shí)鐘電路部分考慮成本和性能問題,本設(shè)計(jì)采用內(nèi)部時(shí)鐘電路。利用at89c51內(nèi)部一個(gè)高增益的反向放大器,把一個(gè)晶體振蕩器和兩個(gè)電容器組成自激振蕩電路,接于xtal1和xtal2之間,電路如圖所示。圖2.3 外部時(shí)鐘電路原理圖圖中晶體振蕩器是石英晶體或陶瓷結(jié)構(gòu),振蕩頻率一般選在1.2mhz12mhz之間,單片機(jī)常選擇6mhz或12mhz,c1,c2在30pf左右;對(duì)于陶瓷振蕩器,c1,c1約為47pf左右。2.2.4顯示電路的設(shè)計(jì)顯示數(shù)據(jù)由單片機(jī)串口輸出,因此必須有由移位寄存器來驅(qū)動(dòng)數(shù)碼管顯示。本設(shè)計(jì)中采用74ls164移位寄存器來實(shí)現(xiàn)串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù)。由于采用靜態(tài)顯示方法,為了減輕單片機(jī)的負(fù)載,選用共陽型的led數(shù)碼管顯示,并且在每個(gè)數(shù)碼管的共陽極接一個(gè)保護(hù)電阻來保護(hù)電路。圖2.4 顯示電路圖2.2.5d/a轉(zhuǎn)換器連接電路和運(yùn)算放大電路的設(shè)計(jì)本設(shè)計(jì)中產(chǎn)生的信號(hào)幅度為-5v+5v,所以兩片d/a的輸出均采用雙極性電壓輸出,采用的運(yùn)算放大器選用的是lf356,電路圖如圖2.5所示:第二片d/a轉(zhuǎn)換器輸出的信號(hào)經(jīng)過運(yùn)算放大器轉(zhuǎn)換成電壓信號(hào)后作為第一片d/a轉(zhuǎn)換器的基準(zhǔn)電壓,這樣就可以達(dá)到控制輸出幅度的作用。圖2.5 輸出電路圖此電路的電壓特性是:輸出v=(b-128)。2.3 單片機(jī)簡(jiǎn)介at89c51是一種低功耗、高性能的片內(nèi)含有4kb快閃可編程/擦除只讀存儲(chǔ)器的8位cmos微控制器,使用高密度、非易丟失存儲(chǔ)技術(shù)制造,并且與80c51引腳和指令系統(tǒng)完全兼容。芯片上的flash存儲(chǔ)器允許在線編程或采用通用的非易丟失存儲(chǔ)編程器重復(fù)編程。at89c51將具有多種功能的8位cpu與flash存儲(chǔ)器結(jié)合在一個(gè)芯片上,為很多嵌入式控制應(yīng)用提供了非常靈活而又價(jià)格適宜的方案,其性能價(jià)格比遠(yuǎn)高于8751。1. 89c51的性能及特點(diǎn)89c51的主要性能包括: 與msc51微控制器產(chǎn)品系列兼容。 片內(nèi)有4kb可在線重復(fù)編程的快閃擦寫存儲(chǔ)器。 存儲(chǔ)器可循環(huán)寫入/擦除1000次。 存儲(chǔ)數(shù)據(jù)保存時(shí)間為10年。 寬工作電壓范圍:vcc可為2.7v6v。 全靜態(tài)工作:可從0hz至16hz。 程序存儲(chǔ)器具有3級(jí)加密保護(hù)。 1288位內(nèi)部ram。 32條可編程i/o線。 兩個(gè)16位定時(shí)器/計(jì)數(shù)器。 中斷結(jié)構(gòu)具有5個(gè)中斷源和2個(gè)優(yōu)先級(jí)。 可編程雙工串行通道。 空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲(chǔ)內(nèi)容。2. 片內(nèi)快閃存儲(chǔ)器由于eeprom具有在線改寫,并在掉電后仍能保存數(shù)據(jù)的特點(diǎn),可為用戶的特殊應(yīng)用提供便利。但是,擦除和寫入對(duì)于要求數(shù)據(jù)高速吞吐的應(yīng)用還顯得時(shí)間過長,這是eeprom芯片的主要性能缺陷。表2.1給出了幾種典型eeprom芯片的主要性能特點(diǎn)。由表2.1可見,所列各種芯片的字節(jié)擦除時(shí)間和寫入時(shí)間基本上為10ms,這樣長的時(shí)間對(duì)于許多實(shí)際應(yīng)用是不能接受的。因此,為了將存儲(chǔ)器集成到微控制器芯片內(nèi),設(shè)法縮短此類存儲(chǔ)器的擦除和寫入時(shí)間是一個(gè)首要問題。片內(nèi)快閃存儲(chǔ)器的概念就是在這種背景下提出來的。表2.1幾種典型eeprom芯片主要性能型號(hào)28162816a28172817a去數(shù)時(shí)間/ms250200/250250200/250擦/寫電壓/v215215字節(jié)擦除時(shí)間/ms109151010寫入時(shí)間/ms1091510103. 89c51的基本組成在89c51芯片上,集中了微型計(jì)算機(jī)的各個(gè)組成部分,它包括: 一個(gè)8位微處理器。 片內(nèi)數(shù)據(jù)存儲(chǔ)器ram,用于存放可以讀/寫的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù)等。 片內(nèi)快閃存儲(chǔ)器eeprom,用于存放程序、一些原始數(shù)據(jù)和表格。 四個(gè)8位并行i/o接口。 兩個(gè)16位定時(shí)器/計(jì)數(shù)器。 五個(gè)中斷源的中斷控制系統(tǒng)。 一個(gè)全雙工uart的串行i/o口,用于實(shí)現(xiàn)單片機(jī)與微機(jī)之間的串行通信。 片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要外接。最高允許振蕩器頻率為24mhz。4. 89c51的內(nèi)部結(jié)構(gòu)和一般微處理器相比,89c51增加了四個(gè)8位i/o口,一個(gè)串行口,4kb fperom,128b ram,很多工作寄存器及特殊功能寄存器。各部分的功能如下。(1) 中央處理單元cpu是89c51的核心,是計(jì)算機(jī)的控制和指揮中心,由運(yùn)算器和控制器兩個(gè)部分電路組成。 運(yùn)算器運(yùn)算器包括一個(gè)可進(jìn)行8位算術(shù)運(yùn)算和邏輯運(yùn)算的單元alu,8位的暫存器1、暫存器2,8位的累加器acc,寄存器b和程序狀態(tài)寄存器psw等。alu:可對(duì)4位、8位和16位數(shù)據(jù)進(jìn)行操作,能做例如加、減、乘、除、bcd數(shù)十進(jìn)制調(diào)整及比較等算術(shù)運(yùn)算和與、或、異或、求補(bǔ)碼及循環(huán)移位等邏輯操作。acc:累加器acc經(jīng)常作為一個(gè)運(yùn)算數(shù)暫存器2進(jìn)入alu的輸入端,與另一個(gè)來自寄存器1的運(yùn)算數(shù)進(jìn)行運(yùn)算,運(yùn)算結(jié)果又送回acc。在指令中用助記符a來表示。psw:程序狀態(tài)字寄存器,8位,用于指示指令執(zhí)行后的狀態(tài)信息,相當(dāng)于一般微處理器的標(biāo)志寄存器。psw中各位狀態(tài)供程序查詢和判別用。b:8位寄存器,在乘、除運(yùn)算時(shí)它用來存放一個(gè)操作數(shù)和運(yùn)算后的一部分結(jié)果;不做乘、 除運(yùn)算時(shí),作通用寄存器使用。 控制器控制器包括程序計(jì)數(shù)器pc、指令寄存器ir、指令譯碼器id、振蕩器及定時(shí)電路等。程序計(jì)數(shù)器pc:由兩個(gè)8位的計(jì)數(shù)器pch及pcl組成,共16位。pc實(shí)際上是程序的字節(jié)地址計(jì)數(shù)器,pc中的內(nèi)容是將要執(zhí)行的下一條指令的地址。改變pc的內(nèi)容就可以改變程序執(zhí)行的方向。指令寄存器ir及指令譯碼器id:由pc中的內(nèi)容指定rom地址,取出來的指令經(jīng)指令寄存器ir送至指令譯碼器id,由id對(duì)指令譯碼并送pla產(chǎn)生一定序列的控制信號(hào),以執(zhí)行指令所規(guī)定的操作。振蕩器及定時(shí)電路:89c51單片機(jī)片內(nèi)振蕩電路,只需外接石英晶體和頻率微調(diào)電容,其頻率范圍為1.2mhz12mhz。該脈沖信號(hào)作為89c51工作的基本節(jié)拍及時(shí)間的最小單位。(2) 存儲(chǔ)器89c51的存儲(chǔ)器有片內(nèi)外之分。片內(nèi)存儲(chǔ)器集成在芯片內(nèi)部;片外存儲(chǔ)器又稱外部存儲(chǔ)器。片內(nèi)和片外存儲(chǔ)器中,又有rom和ram之分。 rom存儲(chǔ)器89c51片內(nèi)程序存儲(chǔ)器容量為4kb,地址從0000h開始,用于存放程序和表格常數(shù)。 ram存儲(chǔ)器89c51的ram存儲(chǔ)器有片內(nèi)外之分:片內(nèi)ram共128b,地址范圍為00h7fh;片外ram共64kb,地址范圍為0000hffffh。為了指示是到片內(nèi)ram尋址還是到片外ram尋址,89c51的指令系統(tǒng)設(shè)計(jì)了不同的數(shù)據(jù)傳送指令符。 特殊功能寄存器sfrcpu訪問片內(nèi)rom指令用mov,訪問片外ram指令用movx。片內(nèi)ram共128b,分為工作寄存器區(qū)、位尋址和便簽區(qū)。1工作寄存器區(qū)這32個(gè)ram單元共分四組,每組占8個(gè)ram單元,分別用代號(hào)r0r7表示。r0r7可以指向四組中任一組,由psw中rs1、rs2的狀態(tài)決定。2位尋址區(qū)這16個(gè)ram單元具有雙功能。它們既可以像普通ram單元一樣按字節(jié)存取,也可以對(duì)每個(gè)ram單元中的任何一位單獨(dú)存取,就是位尋址。3便簽區(qū)便簽區(qū)共有80個(gè)ram單元,用于存放用戶數(shù)據(jù)或作堆棧區(qū)使用。89c51對(duì)便簽區(qū)中每個(gè)ram單元是按字節(jié)存取的。在21個(gè)sfr寄存器中,用戶可通過直接尋址指令對(duì)它們進(jìn)行字節(jié)存取,也可以對(duì)acc、b、psw等11個(gè)寄存器進(jìn)行位尋址。(3) i/o端口i/o端口又稱為i/o接口,是89c51對(duì)外部實(shí)現(xiàn)控制和信息交換的必經(jīng)之路,它們都是雙向端口。每個(gè)端門各有8條i/o線,均可輸入/輸出??梢园裪/o口當(dāng)作一般特殊功能寄存器來尋址。圖2.6 at89c51單片機(jī)引腳圖5. 89c51的引腳及其功能at89c51采用了40管腳雙列直插封裝形式。其引腳分為電源引腳、輸入/輸出端口引腳、控制信號(hào)引腳和時(shí)鐘電路引腳這四類。其引腳如圖2.6所示: 電源引腳vcc:為+5v供電電壓引腳。 gnd:為接地引腳。 i/o端口引腳89c51共有四個(gè)并行i/o端口,每個(gè)端口有8個(gè)端口線,用于傳送數(shù)據(jù)/地址。由于每個(gè)端口的結(jié)構(gòu)不相同,因此它們?cè)诠δ芎陀猛旧系牟顒e很大。p0口:p0口共有8個(gè)引腳,其中p0.7為最高位,p0.0為最低位。這8條引腳有兩種不同的功能,分別使用于兩種不同情況。第一種情況是89c51不帶片外存儲(chǔ)器,p0口可以作為通用i/o口使用,p0.0p0.7用于傳送cpu的輸入/輸出數(shù)據(jù)。這時(shí),輸出數(shù)據(jù)可以得到鎖存,不需要外接專用鎖存器,輸入數(shù)據(jù)可以得到緩沖,增加了數(shù)據(jù)輸入的可靠性;第二種情況是89c51帶片外存儲(chǔ)器,p0.0p0.7在cpu訪問片外存儲(chǔ)器時(shí)用于傳送片外存儲(chǔ)器的低8位地址,然后傳送cpu對(duì)片外存儲(chǔ)器的讀寫數(shù)據(jù)。p1口:p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,其緩沖器可接收輸出4ttl門電流。p1口管腳寫入“1”后,被內(nèi)部上拉為高電平,用作輸入;被外部下拉為低電平時(shí),將輸出電流。p2口:p2口的第一功能和p0口的第一功能相同,即它可以作為通用i/o口使用。它的第二功能和p0口引腳的第二功能相配合,用于輸出片外存儲(chǔ)器的高8位地址,共同選中片外存儲(chǔ)器單元,但并不能像p0口那樣還可以傳送存儲(chǔ)器的讀寫數(shù)據(jù)。p3口:作輸入/輸出時(shí)同p1口。p3口也可作為89c51的一些特殊功能口。如表2.2所示: 控制信號(hào)引腳rst:復(fù)位信號(hào)輸入端,高電平有效。它可以使89c51處于復(fù)位工作狀態(tài)。復(fù)位后,89c51的四個(gè)端口p0、p1、p2、p3為全高,即它們的值均為ffh。ale/prog:地址鎖存允許/編程端。在flash編程期間,此引腳用于輸入編程脈沖。平時(shí),ale端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩頻率的1/6。因此,它可用作外部輸出的脈沖。/psen:外部程序存儲(chǔ)器的選通信號(hào)端。在外部程序存儲(chǔ)器取址期間,每個(gè)機(jī)器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/psen信號(hào)將不出現(xiàn)。/ea/vpp:外部程序存儲(chǔ)器地址允許輸入端/編程電壓輸入端。 時(shí)鐘電路引腳xtal1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入端。在采用外部時(shí)鐘時(shí),該引腳必須接地。xtal2:來自反向振蕩器的輸出。若采用外部時(shí)鐘電路時(shí),該引腳輸入外部時(shí)鐘脈沖。表2.2 p3口第二功能p3口第二功能注 釋p3.0rxd串行數(shù)據(jù)接收口p3.1txd串行數(shù)據(jù)發(fā)送口p3.2into外部中斷0輸入p3.3int1外部中斷1輸入p3.4t0計(jì)數(shù)器0計(jì)數(shù)輸入p3.5t1計(jì)數(shù)器1計(jì)數(shù)輸入p3.6wr外部ram寫選通信號(hào)p3.7rd外部ram讀選通信號(hào)6. 定時(shí)器/計(jì)數(shù)器89c51內(nèi)部有兩個(gè)16位可編程的定時(shí)器/計(jì)數(shù)器,命名為t0和t1。t0由兩個(gè)8位寄存器tho和tlo拼裝而成,其中tho為高8位,tlo為低8位。t1也和t0類同。tho、tlo、th1和tl1均為特殊功能寄存器中的一個(gè),用戶可以通過指令對(duì)它們存儲(chǔ)數(shù)據(jù)。t0和t1的最大計(jì)數(shù)值為65535,即需要65535個(gè)脈沖才能把它們從全“0”變?yōu)槿?”。下面介紹定時(shí)器的控制。定時(shí)器共有兩個(gè)控制字,由軟件寫入tmod和tcon兩個(gè)8位寄存器,用來設(shè)置t0、t1的操作模式和控制功能。當(dāng)89c51系統(tǒng)復(fù)位時(shí),兩個(gè)寄存器所有位都被清零。 工作模式寄存器tmodtmod用于控制t0和t1的工作模式,其各位的定義格式如表2.3所示。表2.3 工作模式寄存器tmod的位定義tmod d7 d6 d5 d4 d3 d2 d1 d0gatec/tm1m0gatec/tm1m0其中低四位用于t0,高四位用于t1。以下介紹各位的功能。m1和m0:操作模式控制位。兩位可形成四種編碼,對(duì)應(yīng)于四種操作模式,見表2.4。表2.4 定時(shí)器/計(jì)數(shù)器的工作模式m1 m0工作模式功能描述0 0模式013位計(jì)數(shù)器0 1模式116位計(jì)數(shù)器1 0模式2自動(dòng)再裝入8位計(jì)數(shù)器1 1模式3定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器c/t:計(jì)數(shù)器/定時(shí)器方式選擇位。c/t=0,設(shè)置為定時(shí)方式。定時(shí)器計(jì)數(shù)89c51片內(nèi)脈沖,亦即對(duì)機(jī)器周期計(jì)數(shù)。c/t=1,設(shè)置為計(jì)數(shù)方式。gate:門控位。gate=0時(shí),只要用軟件使tro置1就可以啟動(dòng)定時(shí)器,而不管into的電平是高還是低。gate=1時(shí),只有into引腳為高電平且由軟件使tro置1時(shí),才能啟動(dòng)定時(shí)器工作。 控制寄存器tcon定時(shí)器控制寄存器tcon除可用于字節(jié)尋址外,各位還可位尋址。各位的定義格式如下表所式:表2.5 控制寄存器tcon的位定義tcon8fh8eh8dh8ch8bh8ah89h88h(88h)tr1tf0tf0tr0ie1it1ie0it0tf1:t1溢出標(biāo)志位。當(dāng)t1溢出時(shí),由硬件自動(dòng)使tf置“1”,并且申請(qǐng)中斷。響應(yīng)中斷進(jìn)入中斷服務(wù)程序后,tf1又被硬件自動(dòng)清0。tf1也可被軟件清0。tf0:t0溢出標(biāo)志位。其功能和操作情況同tf1。tr1:t1運(yùn)行控制位??赏ㄟ^軟件置1或清0啟動(dòng)或關(guān)閉t1。在程序中用指令“setb tr1”使tr1位置1,定時(shí)器t1便開始計(jì)數(shù)。tro:t0運(yùn)行控制位。其功能和操作情況同tr1。ie1、it1、ie0、it0:外部中斷請(qǐng)求及請(qǐng)求方式控制位。2.4 其它芯片簡(jiǎn)介2.4.1 dac0832功能簡(jiǎn)介1、芯片簡(jiǎn)介d/a轉(zhuǎn)換器的功能在于把對(duì)其輸入的數(shù)字信號(hào)轉(zhuǎn)換成與此數(shù)值成正比的模擬電壓或電流。dac0832是以cmos工藝制造的8位d/a轉(zhuǎn)換芯片,價(jià)格低廉,接口簡(jiǎn)單,在單片機(jī)制系統(tǒng)中得到了廣泛的應(yīng)用。dac0832主要由兩個(gè)8位寄存器和一個(gè)8位d/a轉(zhuǎn)換器組成。其運(yùn)作原理可從它的20個(gè)引腳之功能中領(lǐng)略到。d0d7:8位數(shù)據(jù)輸入引腳,d7為最高位。ile:輸入數(shù)據(jù)鎖存允許信號(hào),輸入,高電平有效。cs:芯片選擇信號(hào),輸入,低電平有效。wr1:輸入鎖存器的寫選通信號(hào),輸入,低電平有效。從上述三信號(hào)的邏輯關(guān)系中可以看出,當(dāng)ile為高電平,cs和wr1均為低電平時(shí),輸入鎖存器的鎖存允許信號(hào)ie1將為高電平。此時(shí)輸入鎖存器的內(nèi)容根據(jù)輸入數(shù)據(jù)變化,但當(dāng)le1由于三輸入信號(hào)的變化而跳變成低電平時(shí),則來自d0d7的輸入數(shù)據(jù)被鎖定在輸入鎖存器中。wr2:寄存器的寫選通信號(hào),輸入,低電平有效。xfer:數(shù)據(jù)傳送控制信號(hào),輸入,低電平有效。若wr2和xfer兩信號(hào)均為低電平,則dac寄存器的鎖存信號(hào)le2為高電平,此時(shí)輸入鎖存器的輸入數(shù)據(jù)被傳送至dac寄存器中;但當(dāng)le2因上述兩信號(hào)的變化而跳變成低電平時(shí),第二級(jí),即dac寄存器中的數(shù)據(jù)被鎖定。d/a轉(zhuǎn)換器隨時(shí)對(duì)dac寄存器中的數(shù)據(jù)進(jìn)行d/a轉(zhuǎn)換。vref:基準(zhǔn)電壓(可為-10v+10v)輸入引腳?;鶞?zhǔn)電壓決定d/a轉(zhuǎn)換器輸出電壓的范圍:若vref接+10v,則輸出電壓范圍為0-10v;若接-5v,則輸出電壓為+5v0v。rfb:內(nèi)部反饋電阻對(duì)外引腳,用以輸入來自片外運(yùn)算放大器的反饋信號(hào)。iout1和iout2:電流輸出引腳。dac0832屬電流輸出型,且兩輸出電流之和為常數(shù)。欲得到與輸入數(shù)字量成正比的電壓輸出,必須外接運(yùn)算放大器,把此兩引腳輸出電信號(hào)轉(zhuǎn)換成電壓形式。對(duì)于這類d/a轉(zhuǎn)換器,通常以電流建立時(shí)間來表示其轉(zhuǎn)換速度。所謂電流建立時(shí)間,系指輸入數(shù)字量由全0變成1時(shí),輸出電流自初始值達(dá)到滿量程lsb/2所需要的時(shí)間。本芯片的電流建立時(shí)間為1s。vcc:供電電源引腳,可接+5v+10v電壓。dgnd:數(shù)字量地,即vcc、數(shù)據(jù)、地址及控制信號(hào)的0電平輸入引腳。agnd:模擬量地,即vref及模擬電壓的地線。 2、與mcs51單片機(jī)的接口從前面對(duì)dac0832內(nèi)部結(jié)構(gòu)的講述中得知,其前級(jí)輸入鎖存器和dac寄存器可允許數(shù)據(jù)進(jìn)入其中,亦可鎖定數(shù)據(jù),拒絕新數(shù)據(jù)進(jìn)入。這拒絕于內(nèi)部信號(hào)le1和le2各自受外部信號(hào)控制的情況。據(jù)此我們可歸納出三點(diǎn):?jiǎn)尉彌_方式:le2和le1受控于同一組外部信號(hào),兩級(jí)積存器同時(shí)鎖存數(shù)據(jù)。雙緩沖方式:le2和le1分別受不同信號(hào)控制,兩級(jí)寄存器先后接收數(shù)據(jù)。直通方式:le1和le2均恒為1,外來數(shù)據(jù)直接通過前兩級(jí)到達(dá)d/a轉(zhuǎn)換器。2.4.274ls164簡(jiǎn)介雙列直插式74ls164引腳定義:qaqh為并行輸出的數(shù)據(jù),單片機(jī)串口輸出的數(shù)據(jù)從ab輸入;clr信號(hào)用于清除輸出數(shù)據(jù)(通常用在移位完成時(shí));內(nèi)部數(shù)據(jù)移位依靠時(shí)鐘clk信號(hào)上升沿(由單片機(jī)tx提供)控制。2.4.3 led數(shù)碼管簡(jiǎn)介欲顯示十進(jìn)制或十六進(jìn)制數(shù)字及某些其他簡(jiǎn)單字符,可選用七段led顯示器。ag七段及十進(jìn)制小數(shù)點(diǎn)dp均為一發(fā)光二極管。若系共陽結(jié)構(gòu),則它們的陽極為一公共點(diǎn),接電源正極。八只發(fā)光二極管的陰極互相獨(dú)立,哪一段陰極接地,哪一段即發(fā)光,陰極也接高電平者便成暗狀。如果是共陰結(jié)構(gòu),那么陰極公共點(diǎn)接地,各陽極獨(dú)立,接高電平者發(fā)光,陽極接地者呈暗狀。根據(jù)以上討論可知,欲在一個(gè)led顯示器上顯示某特定字符,必須向某公共點(diǎn)及各段施加正確的電壓。對(duì)公共點(diǎn)的施壓操作稱為位選;對(duì)各段的操作為段選。段選碼亦稱字形碼。2.5 本章小結(jié)本章主要介紹了實(shí)現(xiàn)設(shè)計(jì)目的的硬件解決方案。文中對(duì)各部分電路進(jìn)行了細(xì)致的論證。介紹了主要應(yīng)用的集成芯片的使用方法和基本資料。第3章 軟件部分的設(shè)計(jì)3.1 軟件總體流程軟件是整個(gè)系統(tǒng)的靈魂。如果沒有軟件,整個(gè)系統(tǒng)就是一個(gè)空殼。本設(shè)計(jì)中軟件分為初始化模塊、顯示模塊、鍵盤掃描模塊、鍵值處理模塊和波形產(chǎn)生模塊。整個(gè)軟件的流程圖如圖3.1:圖3.1 整體軟件流程圖3.2 各部分軟件設(shè)計(jì)3.2.1 初始化模塊的設(shè)計(jì)初始化模塊的作用是將用戶需要的內(nèi)存單元清0,清除系統(tǒng)原始數(shù)據(jù)對(duì)系統(tǒng)的影響。之后在顯示電路中顯示全0,對(duì)以后的觀察數(shù)據(jù)輸入情況有很大幫助。本設(shè)計(jì)中主要用到了30h到50h的內(nèi)存空間。因此,此部分主要對(duì)這部分單元清0,并且將數(shù)據(jù)存儲(chǔ)指針置數(shù)。具體程序如下:org 0000hajmp start org 0050hstart: acall firsta ;調(diào)用初始化main: acall keysca;調(diào)用鍵盤掃描acallkeyred;調(diào)用讀鍵值acallkeypc;調(diào)用鍵值處理acall display;調(diào)用顯示ajmp main ;出錯(cuò)處理ajmp startfirsta:mov r0, #30h;初始化mov r1, #20h;30h50h循環(huán)清零clloop:mov r0, #00h;(r1為個(gè)數(shù)指針)inc r0djnz r1, clloopmov weicod, #43h acall displayret3.2.2 顯示模塊的設(shè)計(jì)顯示模塊的作用是讓用戶了解系統(tǒng)內(nèi)部的數(shù)據(jù)存儲(chǔ)情況??梢耘袛嗍欠裼姓`操作。本設(shè)計(jì)中共顯示5位,有波形、幅度和頻率。由于采用的輸出方式為串行輸出方式和靜態(tài)led顯示,最先輸出的數(shù)據(jù)將距離串行口越遠(yuǎn),所以在輸出時(shí)可以按用戶需要從高地址開始輸出,提高可視化。設(shè)計(jì)中將輸入數(shù)據(jù)存放在40h到44h的地址空間,所以只要按順序?qū)⑺鼈円来嗡偷酱锌谳敵黾纯?。程序如下:display:mov scon,#00hmov r1,#05h ;顯示五位mov r0, #44h mov dptr, #distabloop: mov a, r0 movc a, a+dptr mov sbuf, a ;cpu自動(dòng)開始發(fā)送wait: jnb ti, wait clr ti dec r0 djnz r1, loop retdistab:db 03h,9fh,25h,0dh,99h ;01234db 49h,41h,1fh,01,09h ;567893.2.3 鍵盤掃描程序的設(shè)計(jì)鍵盤掃描程序的作用是從鍵盤獲取按鍵信息,根據(jù)按鍵信息來執(zhí)行命令操作。這部分是用戶對(duì)系統(tǒng)進(jìn)行操作的唯一途徑。這部分程序的正確編寫是確保人機(jī)正常對(duì)話的前提保證。鍵盤掃描程序流程圖如圖3.2所示:圖3.2 鍵盤掃描流程圖鍵盤全掃描的作用是判斷是否有按鍵按下。其方法是先在p1口輸出0f0h,再從p1口讀數(shù)據(jù),若高四位不全為1的話,則說明有按鍵按下。由于采用的按鍵是機(jī)械按鍵,會(huì)有一定的抖動(dòng),一般抖動(dòng)持續(xù)510ms,影響判斷。為了消除干擾,在判斷有按鍵按下后要調(diào)用延時(shí)程序消除抖動(dòng),然后再判斷是否有按鍵按下。鍵盤逐行掃描的作用是在已經(jīng)判斷有鍵按下之后確定鍵值。其方法是使p1的行線依次為0,其余各位均為1,然后讀p1口,保存行字,屏蔽掉低四位,如果高四為不全為1,則本行有按鍵按下。保存列字,再與行字組合,取反后就得到按鍵的特征值。最后用查表的方法就可以得到鍵值。3.2.4 鍵值處理的程序設(shè)計(jì)鍵值處理的作用是按照鍵值來選擇命令操作,以達(dá)到操作的目的。鍵值處理是否合理,直接影響人機(jī)對(duì)話的順利進(jìn)行。因?yàn)樵O(shè)計(jì)中一共只有16個(gè)按鍵,所以首先要判斷鍵值是否合法,若鍵值大于16則視為非法,返回主程序。判斷鍵值合法后還要判斷按鍵是功能鍵還是數(shù)字鍵,之后再選擇相應(yīng)的操作。數(shù)字鍵處理程序:由于本設(shè)計(jì)中為了簡(jiǎn)化程序,要求必須首先選擇波形,當(dāng)波形未設(shè)置時(shí),數(shù)字鍵是無效的,必須返回。所以本段程序要首先判斷波形位是否已經(jīng)設(shè)定。若數(shù)字鍵合法,就按照輸入的先后順序?qū)㈡I值送入規(guī)定的地址單元。當(dāng)5位數(shù)據(jù)送滿之后,系統(tǒng)雖然掃描鍵盤,但對(duì)數(shù)字鍵只做放棄處理。功能鍵處理程序:功能鍵包括三個(gè)波形按鍵、一個(gè)清除鍵和一個(gè)確認(rèn)鍵。波形鍵按下時(shí),將向波形存儲(chǔ)單元送入相應(yīng)的數(shù)值。正弦波為1,三角波為2,方波為3。清除鍵的作用是對(duì)用戶所用的地址單元清0,以便重新輸入鍵值。確認(rèn)鍵的作用比較關(guān)鍵。一旦確認(rèn)鍵按下,則系統(tǒng)不再進(jìn)行鍵盤掃描,而是按照輸入的數(shù)據(jù)進(jìn)行信號(hào)是幅度和頻率選擇處理,然后進(jìn)入相應(yīng)的波形輸出程序。由于設(shè)計(jì)的整個(gè)系統(tǒng)比較簡(jiǎn)單,用途也只是使用于一般場(chǎng)合,所以系統(tǒng)中沒有采用中斷的方法來改變系統(tǒng)的運(yùn)行。當(dāng)系統(tǒng)開始輸出信號(hào)之后,相當(dāng)于系統(tǒng)已經(jīng)進(jìn)入了一個(gè)不斷輸出信號(hào)的死循環(huán)程序。用戶只能通過復(fù)位鍵才能停止系統(tǒng)并重新操作。這樣大大簡(jiǎn)化了程序設(shè)計(jì),但并不影響系統(tǒng)的性能。對(duì)于這種不太復(fù)雜的系統(tǒng),采用這種簡(jiǎn)單的程序操作是十分有利的。頻率的處理是系統(tǒng)信號(hào)可調(diào)性的一個(gè)關(guān)鍵。由于系統(tǒng)的時(shí)鐘和采樣密度的限制,本設(shè)計(jì)在頻率點(diǎn)的選擇上并沒有均等地設(shè)定頻率點(diǎn)。而是選擇10hz、20hz100hz、200hz800hz。根據(jù)這一特性,采用列表的方法將這些頻率點(diǎn)依次列出,并且在最前面加上0頻率的值。然后在查表處理的時(shí)候先判斷頻率百位是否為0,如果百位不為0,則將百位的數(shù)據(jù)加9,再進(jìn)行查表。如果百位為0,則直接用其數(shù)據(jù)作為變址查表。具體程序如下:frcy: mov a, 42h ;取頻率 cjne a, #00h, hund2 ;看百位是否為0 mov a, 41h mov dptr, #frctab rl a mov r0, a movc a, a+dptr inc r0 mov r6, a mov a, r0 movc a, a+dptr mov r5, a lcall fdclyhund2: mov dptr, #frctab ;百位有數(shù)據(jù) mov a, 42h add a, #9 rl a mov r0, a movc a, a+dptr inc r0 mov r6, a mov a, r0 movc a, a+dptr mov r5, a lcall fdclyfrctab:db 00h,00h,0fah,93h,0fdh,4ah,0feh,31hdb 0feh,0a5h,0feh,0eah,0ffh,19hdb 0ffh,3ah,0ffh,52h,0ffh,66h,0ffh,75h db 0ffh,0bbh,0ffh,0d2h,0ffh,0ddhdb 0ffh,0e4h,0ffh,0e9h,0ffh,0ech,0ffh,0efh;10-800hz,三角波和正弦波17個(gè)頻率點(diǎn)計(jì)數(shù)初值對(duì)于這種頻率間隔較大的列表采用了這種查詢方法,如果對(duì)于密集的頻率點(diǎn)就要采用比較復(fù)雜的查詢方法。對(duì)于本設(shè)計(jì)而言,重在討論實(shí)現(xiàn)參數(shù)可調(diào)的信號(hào)輸出的方法,所以在細(xì)節(jié)方面略有欠缺。只要在此基礎(chǔ)上調(diào)整一些細(xì)節(jié)程序便可以增多頻率點(diǎn)。3.2.5 波形產(chǎn)生模塊的設(shè)計(jì)波形產(chǎn)生模塊是設(shè)計(jì)是否實(shí)現(xiàn)的關(guān)鍵。本次設(shè)計(jì)要求輸出三種波形,其精度如何,關(guān)鍵都在于波形產(chǎn)生模塊設(shè)計(jì)的合理性。本設(shè)計(jì)中采用的是用單片機(jī)產(chǎn)生信號(hào),而單片機(jī)只能產(chǎn)生數(shù)字信號(hào),無論是信號(hào)頻率還是信號(hào)幅度都是離散的點(diǎn),所以采用按照控制要求查表輸出的方法來輸出信號(hào)。其中方波的產(chǎn)生方法比較簡(jiǎn)單只要定時(shí)地向外輸出0ffh和00h即可。正弦波和三角波的產(chǎn)生原理比較相近,在此以正弦波產(chǎn)生方法為例加以介紹。正弦波的產(chǎn)生是通過對(duì)標(biāo)準(zhǔn)正弦波進(jìn)行采樣輸出而得到的,采樣間隔越小,正弦波的輸出精度就越高,失真度越小。本設(shè)計(jì)中為了提高信號(hào)的精度,對(duì)信號(hào)的四分之一周期采樣19個(gè)點(diǎn)。每隔一定的時(shí)間間隔送出一個(gè)幅度值,幅度值可以用查表的方法得到。信號(hào)的頻率可以用控制每兩個(gè)輸出的時(shí)間間隔來完成。這部分控制是由定時(shí)計(jì)數(shù)器來實(shí)現(xiàn)的。向計(jì)數(shù)器裝入計(jì)數(shù)初值,當(dāng)計(jì)數(shù)器溢出時(shí)就表示時(shí)間到,查表輸出下一個(gè)數(shù)。各個(gè)頻率點(diǎn)的計(jì)數(shù)初值是人工計(jì)算列表,在用程序查表得到的。這一部分程序是在確認(rèn)鍵處理中進(jìn)行的。由于所計(jì)算的時(shí)間間隔是一個(gè)理論值,在實(shí)際中會(huì)因?yàn)橄到y(tǒng)的傳輸延時(shí)而使頻率略微偏離所設(shè)計(jì)的頻率點(diǎn)。同樣的,點(diǎn)的輸出是靠程序?qū)崿F(xiàn)的,而程序指令的執(zhí)行也是需要一定的機(jī)器周期的,而且不同的指令執(zhí)行需要的機(jī)器周期是不同的,所以在頻率控制這一方面很難達(dá)到十分精準(zhǔn),只能盡量降低誤差。正弦波的軟件流程圖如圖3.3。3.3 本章小結(jié)本章主要介紹了系統(tǒng)的軟件解決方案,詳細(xì)給出了對(duì)課題的理解和解決思路。對(duì)整體軟件進(jìn)行了分模塊闡述,對(duì)大部分內(nèi)容附加了流程圖加以詳解。 圖3.3 正弦波產(chǎn)生流程圖第4章 系統(tǒng)的安裝與調(diào)試4.1 系統(tǒng)設(shè)計(jì)的安裝與調(diào)試。設(shè)計(jì)是最終要投入實(shí)際應(yīng)用的,因此,整個(gè)設(shè)計(jì)的安裝、調(diào)試便是設(shè)計(jì)的重要環(huán)節(jié)。系統(tǒng)的調(diào)試分為硬件焊接和軟件調(diào)試。硬件焊接是整個(gè)調(diào)試的基礎(chǔ),而軟件調(diào)試又是系統(tǒng)是否正常工作的核心內(nèi)容。因此,這兩部分調(diào)試要按照嚴(yán)格的順序,并要有嚴(yán)格認(rèn)真的態(tài)度來對(duì)待。4.2 系統(tǒng)的各部分調(diào)試4.2.1 系統(tǒng)的硬件調(diào)試硬件的調(diào)試要從硬件電路焊接開始,硬件電路的焊接也是整個(gè)調(diào)試過程的基礎(chǔ)。在硬件焊接之前,我們仔細(xì)檢查了根據(jù)自己的電路圖所需要的各個(gè)元件,核對(duì)其型號(hào)和數(shù)值,以免出現(xiàn)錯(cuò)焊的現(xiàn)象。在檢查之后,盡量按照電路模塊擺放各元件,使電路美觀,并且為各部分留出充裕的空間,這樣會(huì)為電路的調(diào)試和檢查電路提供很大的方便。在這些準(zhǔn)備工作做好后,開始焊接電路。焊接的時(shí)候是一部分一部分的焊上去,焊完之后要仔細(xì)檢查電路的焊接情況,用萬用表檢查電路是否有短路現(xiàn)象,尤其是電源和地之間的短路現(xiàn)象,如果短路現(xiàn)象沒有被發(fā)現(xiàn)的話,將導(dǎo)致整個(gè)系統(tǒng)的非正常工作,甚至是系統(tǒng)崩潰。檢查無誤后,可以用偉福仿真器來將相應(yīng)的程序部分在電路上進(jìn)行仿真,這樣可以檢查電路的工作情況,也是分級(jí)調(diào)試的重要方法。在整個(gè)電路焊接完成后,首先測(cè)量系統(tǒng)的整體內(nèi)阻,一個(gè)正常的系統(tǒng)都會(huì)有一定的內(nèi)阻,如果內(nèi)阻為0,則必須立即找到短路點(diǎn),否則將導(dǎo)致電源的損壞。硬件的檢查還要將一些元件通電測(cè)試,看其是否工作正常。例如:電路焊接好后,要將單片機(jī)插在插座上,通電,然后用示波器看其晶體振蕩器兩端是否有方波產(chǎn)生。如果出現(xiàn)方波,則表示晶體振蕩器完好。之后還要測(cè)量單片機(jī)的30引腳,看它是否也會(huì)輸出方波,并且其輸出頻率是晶體振蕩器的1/6。這些工作都是保證單片機(jī)能夠正常工作的前提。4.2.2 系統(tǒng)的軟件調(diào)試系統(tǒng)的軟件相當(dāng)于系統(tǒng)的內(nèi)臟,軟件的正確編寫是系統(tǒng)能否按要求工作的前提。由于對(duì)軟件知識(shí)的缺乏,對(duì)最初的軟件調(diào)試出現(xiàn)了很多困難。在對(duì)程序指令及運(yùn)行時(shí)序的了解之后,程序完成的比較順利。在軟件編寫的開始,我先畫了軟件的流程圖,然后按照程序流程圖來編寫相應(yīng)的子程序,使程序易于理解和更正。程序的編寫要層次分明,盡量減少復(fù)雜多變的跳轉(zhuǎn)指令,因?yàn)榘殡S著跳轉(zhuǎn)指令的增加,系統(tǒng)執(zhí)行指令的時(shí)序常常出現(xiàn)錯(cuò)亂,并且經(jīng)常出現(xiàn)邏輯錯(cuò)誤。在發(fā)現(xiàn)這個(gè)問題之后,盡量運(yùn)用一些可重復(fù)調(diào)用的子程序,盡量避免程序的錯(cuò)亂。最先進(jìn)行調(diào)試的模塊是鍵盤模塊。在這部分調(diào)試中,用仿真器仿真,在計(jì)算機(jī)中可以很明了的看到系統(tǒng)的內(nèi)存單元是否按照要求存入按鍵的相應(yīng)信息,如果沒有檢測(cè)到任何信息,說明硬件部分沒有響應(yīng),一定出現(xiàn)了電路故障,通過這樣的檢查可以反復(fù)檢測(cè)系統(tǒng)。由于有了計(jì)算機(jī)的幫助,在仿真調(diào)試的時(shí)候可以了解到系統(tǒng)每執(zhí)行完一條指令后的狀態(tài),程序運(yùn)行的步驟,也更加了解了程序。這對(duì)今后的編程都有很大的幫助。在顯示模塊的調(diào)試中,首先測(cè)量數(shù)碼管是否有壞段,確認(rèn)數(shù)碼管不亮的地方不是由軟件及其他電路引起的故障。然后用仿真器仿真,觀察顯示是否正常。開始時(shí),進(jìn)行單步仿真,可以清楚的看到顯示的移位,如果沒有正常的移位的話,則是時(shí)鐘信號(hào)或移位寄存器的連接有問題。在實(shí)際的調(diào)試中,由于電路沒什么大的問題,這部分電路調(diào)試比較順利。單片機(jī)與d/a的轉(zhuǎn)化、波形產(chǎn)生部分的程序調(diào)試比較復(fù)雜。這部分的仿真調(diào)試主要是查看波形產(chǎn)生程序的工作是否正常,還有監(jiān)視數(shù)據(jù)輸出端口,也就是p0口是數(shù)據(jù)是否變化。對(duì)兩片d/a的選通信號(hào)也是重要的監(jiān)視對(duì)象。4.3 在調(diào)試過程中遇到的問題在鍵盤的調(diào)試中,發(fā)現(xiàn)第三列的鍵都不能被系統(tǒng)檢測(cè)。而通過單片機(jī)的行線和列線的連通情況看卻沒有問題。用萬用表測(cè)量按鍵的連接也沒有問題,最后發(fā)現(xiàn)與vcc連接的上拉電阻短路,這表明無論這一列鍵是否有按下,p1.6口始終為高電平,所以系統(tǒng)無法識(shí)別。找到原因后就開始找短路點(diǎn),電路連線并不多,但卻沒有發(fā)現(xiàn)焊接造成的短路,但故障原因不會(huì)錯(cuò),最終,發(fā)現(xiàn)是萬用板本身有兩個(gè)不該連的點(diǎn)連上了,導(dǎo)致了電路的短路。在把連接點(diǎn)斷開后,一切正常。故障得到了解決。在顯示電路的調(diào)試中,發(fā)現(xiàn)數(shù)碼管不能接收數(shù)據(jù)。首先用萬用表檢查移位寄存器的各管腳的電壓,發(fā)現(xiàn)8、9管腳總是相等,測(cè)量電阻則顯示短路。發(fā)現(xiàn)這一問題后立即查找短路點(diǎn),結(jié)果還是一個(gè)板子上的短路,而非人為短路。解決這一問題后一切正常。通過對(duì)這兩個(gè)故障的排查,總結(jié)出電路短路是調(diào)試中的最大問題,所以在今后的調(diào)試中都要仔細(xì)排查這一問題。在波形產(chǎn)生模塊的調(diào)試中,發(fā)現(xiàn)d/a始終無法接收的數(shù)據(jù)。用仿真器單步仿真的過程中發(fā)現(xiàn)p0口根本沒有變化。根據(jù)這個(gè)現(xiàn)象,仔細(xì)檢查了軟件的編寫。問題出在沒有向p0口送數(shù)據(jù),原來的程序指令是向d/a的地址里送數(shù)據(jù),這種方法我也是第一次使用,結(jié)果不能實(shí)現(xiàn)。在此情況下我更改了指令,直接向p0口送數(shù)據(jù),結(jié)果p0口開始按要求傳送數(shù)據(jù),故障解決。由此問題我學(xué)到了關(guān)于編程的解決問題,指令也許沒有錯(cuò),但是在特定的功能上有些指令是不能替代的,也必須多加調(diào)試才能解決。調(diào)試的過程中,當(dāng)信號(hào)不能正常輸出時(shí),很難判斷問題出在哪里。這個(gè)時(shí)候,將軟件仿真暫停,然后可以用萬用表測(cè)量由單片機(jī)輸出給d/a轉(zhuǎn)換器各位的電平,也可以測(cè)量d/a轉(zhuǎn)換器的輸出管腳,看輸出的電平是否符合理論要求。用這種方法可以檢測(cè)到具體是哪個(gè)電路出了問題,是檢查電路的一個(gè)好方法。在實(shí)際接收波形信號(hào)時(shí),發(fā)現(xiàn)頻率總是和要求有一定差距。分析其原因是計(jì)數(shù)器的定

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論