可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口P2寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問(wèn)8位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVX @RI 指令)時(shí),P2口輸出P2鎖存器的內(nèi)容。Flash 編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號(hào)。
P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流個(gè)TTL邏輯)4門(mén)電路。對(duì)P3口寫(xiě)入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能。P3口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。
ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH 單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOV指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE 禁止位無(wú)效。
PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C52由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次PSEN信號(hào)。
EA/VPP:外部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA 端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash 存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。
XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
2.1.2 DAC0832數(shù)模轉(zhuǎn)換器
DAC0832是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個(gè)DA芯片以其價(jià)格低廉、接口簡(jiǎn)單、轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。D/A轉(zhuǎn)換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。圖3為其芯片管腳圖。

圖3 DAC0832管腳圖
各個(gè)管腳功能如下:
D0~D7:8位數(shù)據(jù)輸入線,TTL電平,有效時(shí)間應(yīng)大于90ns(否則鎖存器的數(shù)據(jù)會(huì)出錯(cuò))
ILE:數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效;
CS:片選信號(hào)輸入線(選通數(shù)據(jù)鎖存器),低電平有效;
WR1:數(shù)據(jù)鎖存器寫(xiě)選通輸入線,負(fù)脈沖(脈寬應(yīng)大于500ns)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE1為高電平時(shí),數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,LE1的負(fù)跳變時(shí)將輸入數(shù)據(jù)鎖存;
XFER:數(shù)據(jù)傳輸控制信號(hào)輸入線,低電平有效,負(fù)脈沖(脈寬應(yīng)大于500ns)有效;
WR2:DAC寄存器選通輸入線,負(fù)脈沖(脈寬應(yīng)大于500ns)有效。由WR2、XFER 的邏輯組合產(chǎn)生LE2,當(dāng)LE2為高電平時(shí),DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負(fù)跳變時(shí)將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開(kāi)始D/A轉(zhuǎn)換。
IOUT1:電流輸出端1,其值隨DAC寄存器的內(nèi)容線性變化;
IOUT2:電流輸出端2,其值與IOUT1值之和為一常數(shù);
Rfb:反饋信號(hào)輸入線,改變Rfb端外接電阻值可調(diào)整轉(zhuǎn)換滿量程精度;
Vcc:電源輸入端,Vcc的范圍為+5V~+15V;
VREF:基準(zhǔn)電壓輸入線,VREF的范圍為-10V~+10V;
AGND:模擬信號(hào)地
DGND:數(shù)字信號(hào)地
2.1.3其他器件
本次設(shè)計(jì)中,不僅僅用到了AT89C52單片機(jī)和DAC0832數(shù)模轉(zhuǎn)換芯片,還用到了74HC138譯碼器和74HC573鎖存器。
74HC138 作用原理于高性能的存貯譯碼或要求傳輸延遲時(shí)間短的數(shù)據(jù)傳輸系統(tǒng),在高性能存貯器系統(tǒng)中,用這種譯碼器可以提高譯碼系統(tǒng)的效率。
74HC573數(shù)據(jù)鎖存器。主要用于數(shù)碼管、按鍵等等的控制。

圖4 74HC138 圖5 74HC573
2.2硬件連接圖
2.2.1主控電路
中斷系統(tǒng)是使處理器具有對(duì)外界異步事件的處理能力而設(shè)置的。當(dāng)中央處理器CPU正在處理某件事的時(shí)候外界發(fā)生了緊急事件,要求CPU暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個(gè)緊急事件。在波形發(fā)生器中,只用到片內(nèi)定時(shí)器/計(jì)數(shù)器溢出時(shí)產(chǎn)生的中斷請(qǐng)求,即是在AT89C52輸出一個(gè)波形采樣點(diǎn)信號(hào)后,接著啟動(dòng)定時(shí)器,在定時(shí)器未產(chǎn)生中斷之前,AT89C52等待,直到定時(shí)器計(jì)時(shí)結(jié)束,產(chǎn)生中斷請(qǐng)求,AT89C52響應(yīng)中斷,接著輸出下一個(gè)采樣點(diǎn)信號(hào),如此循環(huán)產(chǎn)生所需要的信號(hào)波形。如圖所示2.1,AT89C52所在電路中的工作情況。
本此課設(shè)中,AT89C52單片機(jī)的P1口接獨(dú)立式按鍵電路,P2口部分接譯碼器,P0口接鎖存器。主控電路圖如圖6所示

圖6 主控電路
2.2.2 獨(dú)立式鍵盤(pán)
獨(dú)立式鍵盤(pán)中,各按鍵相互獨(dú)立,每個(gè)按鍵各接一根輸入線,每根輸入線上的按鍵工作狀態(tài)不會(huì)影響其它輸入線上的工作狀態(tài)。因此,通過(guò)檢測(cè)輸入線的電平狀態(tài)就可以很容易的判斷按鍵是否被按下了。獨(dú)立式鍵盤(pán)電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單。但每個(gè)按鍵需占用一根輸入線,在按鍵數(shù)量較多時(shí),輸入口浪費(fèi)大,電路結(jié)構(gòu)顯得很繁雜,故此種鍵盤(pán)適用于按鍵較少或操作速度較高的場(chǎng)合。如圖7所示。
按鍵與AT89C52的P1口連接。 KEY1是監(jiān)測(cè)是否輸出鋸齒波按鍵;KEY2是監(jiān)測(cè)是否輸出三角波按鍵;KEY3監(jiān)測(cè)是否輸出梯形波按鍵;KEY4監(jiān)測(cè)是否輸出正弦波按鍵;KEY5是調(diào)頻按鍵。

圖7 獨(dú)立式鍵盤(pán)電路圖
2.2.3數(shù)模轉(zhuǎn)換電路
DAC0832是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個(gè)DA芯片以其價(jià)格低廉、接口簡(jiǎn)單、轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。D/A轉(zhuǎn)換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。
由于AT89C51所產(chǎn)生的是數(shù)字信號(hào),所以通過(guò)DAC0832把數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)。DAC0832輸出的模擬量是電流,為了轉(zhuǎn)換成電壓,所以在它后面接入一個(gè)運(yùn)放器。如圖8。

圖 8 數(shù)模轉(zhuǎn)換電路圖
2.2.4驅(qū)動(dòng)電路
74HC138作用原理于高性能的存貯譯碼或要求傳輸延遲時(shí)間短的數(shù)據(jù)傳輸系統(tǒng),在 高性能存貯器系統(tǒng)中,用這種譯碼器可以提高譯碼系統(tǒng)的效率。
74HC573數(shù)據(jù)鎖存器。主要用于數(shù)碼管、按鍵等等的控制。如圖9所示,74HC138加74HC573的工作電路。

圖9 74HC138和74HC573的工作電路。
2.3總電路圖
多種波形發(fā)生器的總電路圖如圖10所示

圖11 總電路圖
3 程序設(shè)計(jì)
3.1主流程圖的設(shè)計(jì)
主程序的流程圖如圖12所示,開(kāi)始時(shí)判斷是否調(diào)頻,然后判斷是否調(diào)用鋸齒波程序,然后判斷是否調(diào)用三角波程序,然后判斷是否調(diào)用梯形波程序,然后判斷是否調(diào)用正弦波程序,最后在循環(huán)回到判斷是否調(diào)頻。

圖12 軟件主程序流程圖
3.2 子程序的設(shè)計(jì)
3.2.1鋸齒波的產(chǎn)生
鋸齒波的實(shí)現(xiàn)過(guò)程是首先定義一個(gè)初值然后進(jìn)行加法操作,加的步數(shù)的多少則根據(jù)要求的頻率來(lái)進(jìn)行。然后加到某個(gè)數(shù)之后就再重新設(shè)置為初值,再重復(fù)執(zhí)行剛剛的操作,如此循環(huán)下去。子程序如下:
ST:MOV A,#00H ;設(shè)置初值
LOOP:MOVX @DPTR,A ;把數(shù)據(jù)送到端口轉(zhuǎn)換
ADD A,R6 ;通過(guò)步長(zhǎng)改變數(shù)據(jù),上升波形
CJNE A,#00H,LOOP ;A值是否到最高點(diǎn)
DJNZ R5,LOOP
SJMP LOP
3.2.2三角波的產(chǎn)生
三角波的實(shí)現(xiàn)是設(shè)置一個(gè)初值,當(dāng)加到某個(gè)值的時(shí)候,執(zhí)行減一操作,減到初值時(shí),再加一。子程序如下:
TRIANGLE:MOV A,#00H ;設(shè)置初值
LOOP3:MOVX @DPTR,A ;把數(shù)據(jù)送到端口轉(zhuǎn)換
ADD A,R6 ;通過(guò)步長(zhǎng)改變數(shù)據(jù)上升波形
CJNE A,#00H,LOOP3 ;A值是否到最高點(diǎn)
DEC A ;減少步長(zhǎng)改變數(shù)據(jù)下降波形
LOOP2:MOVX @DPTR,A ;把數(shù)據(jù)送到端口轉(zhuǎn)換
DEC A ;減少步長(zhǎng)改變數(shù)據(jù)下降波形
CJNE A,#00H,LOOP2 ;A值是否到最低點(diǎn)
DJNZ R5,LOOP3 ;波形周期
SJMP LOP ;返回檢測(cè)開(kāi)關(guān)
3.2.3梯形波的產(chǎn)生
梯形波的實(shí)現(xiàn)是設(shè)置一個(gè)初值,然后進(jìn)行加一,當(dāng)加到某個(gè)數(shù)時(shí)延時(shí),之后減一,減到初值時(shí)在返回到之前的操作,繼續(xù)加一、延時(shí)、減一。梯形波產(chǎn)生的子程序如下:
TXING:MOV A,#00H ;設(shè)置初值
LOOP4:MOVX @DPTR,A ;把數(shù)據(jù)送到端口轉(zhuǎn)換
ADD A,R6 ;增加步長(zhǎng)改變數(shù)據(jù)上升波形
CJNE A,#00H,LOOP4 ;A值是否到最高點(diǎn)
SUBB A,R6 ;下降波形做準(zhǔn)備
DEC A
MOV R7,0EEH ;循環(huán)次數(shù)
LOP2:MOVX @DPTR,A ;進(jìn)行延時(shí)
DJNZ R7,LOP2
LOOP1:MOVX @DPTR,A ;把數(shù)據(jù)送到端口轉(zhuǎn)換
SUBB A,R6
DEC A
CJNE A,#00H,LOOP1 ;是否到最低點(diǎn)
MOV R7,0EEH ;循環(huán)次數(shù)
LOP1:MOVX @DPTR,A ;把數(shù)據(jù)送到端口轉(zhuǎn)換
DJNZ R7,LOP1 ;進(jìn)行延時(shí)
SJMP LOP ;返回檢測(cè)開(kāi)關(guān)
3.2.4正弦波的產(chǎn)生
正弦波的實(shí)現(xiàn)比較麻煩,需要查表,每查一次表,輸出一個(gè)數(shù)值,之后查下一個(gè)數(shù)值繼續(xù)輸出,當(dāng)一個(gè)波形的256個(gè)數(shù)值全部輸出之后,從頭開(kāi)始繼續(xù)輸出。正弦波產(chǎn)生的子程序如下:
SINE:MOV A,#00H ;設(shè)置初值
LOOP7:MOV R7,A ;保存當(dāng)前的數(shù)據(jù)
MOV DPTR,#SIN ;讀取表的地址
MOVC A,@A+DPTR ;讀取表中的數(shù)據(jù)
MOV DPTR,#7FFH ;D/A0832的端口地址
MOVX @DPTR,A ;進(jìn)行數(shù)據(jù)轉(zhuǎn)換
MOV A,R7 ;恢復(fù)當(dāng)前數(shù)據(jù)
INC A ;為讀取表的下一個(gè)值做準(zhǔn)備
CJNE A,#00H,LOOP7 ;是否讀完表的數(shù)據(jù)
SJMP START ;返回檢測(cè)開(kāi)關(guān)
FM:MOV R6,#04H ;改變調(diào)頻/調(diào)幅
MOV R5,#02H
SJMP START ;返回檢測(cè)開(kāi)關(guān)
;--------以下是通過(guò)正弦的值所建立的一個(gè)表
SIN: DB 80H, 83H, 86H, 89H, 8DH, 90H, 93H, 96H
DB 99H, 9CH, 9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H
DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H
DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H
DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H
DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH
DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H
DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H
DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH
DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H
DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H
DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H
DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H
DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H
DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH
DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H
DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H
3.2.5主程序
主程序的代碼如下:
ORG 0000H ;程序開(kāi)始
MOV SP,#60H ;設(shè)置堆棧
MOV DPTR,#7FFH ;0832的地址
LOP:MOV P1,#0FFH
MOV A,P1
JNB P1.5,FM ;是否需要調(diào)頻
MOV R6,#01H ;設(shè)置步長(zhǎng)
MOV R5,#01H
START:JNB P1.0,ST ;輸出鋸齒波程序
JNB P1.1,TRIANGLE ;輸出三角波程序
JNB P1.2,TXING ;輸出梯形波程序
JNB P1.3,SINE ;輸出正弦波程序
SJMP LOP ;循環(huán)檢測(cè)
4應(yīng)用軟件
本次課程設(shè)計(jì)中,我們用到了Protues7.8對(duì)其電路圖進(jìn)行繪制和仿真,還用到了Keil C51對(duì)程序進(jìn)行譯碼和編譯。下面對(duì)這兩個(gè)軟件進(jìn)行簡(jiǎn)單的介紹。
4.1 Proteus
Protues軟件是英國(guó)Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。
Protues軟件具有其它EDA工具軟件的功能。它能夠完成原理布圖、PCB自動(dòng)或人工布線和SPICE電路仿真的功能。同時(shí)Protues具有革命性的特點(diǎn):
- 互動(dòng)的電路仿真。用戶甚至可以實(shí)時(shí)采用諸如RAM,ROM,鍵盤(pán),馬達(dá),LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
- 仿真處理器及其外圍電路。可以仿真51系列、AVR、PIC、ARM、等常用主流單片機(jī)。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運(yùn)行后輸入輸出的效果。配合系統(tǒng)配置的虛擬邏輯分析儀、示波器等,Protues建立了完備的電子設(shè)計(jì)開(kāi)發(fā)環(huán)境。
Protues提供了4大功能模塊:
(1)智能原理圖設(shè)計(jì)(ISIS)
豐富的器件庫(kù):超過(guò)27000種元器件,可方便地創(chuàng)建新元件;智能的器件搜索:通過(guò)模糊搜索可以快速定位所需要的器件;智能化的連線功能:自動(dòng)連線功能使連接導(dǎo)線簡(jiǎn)單快捷,大大縮短繪圖時(shí)間;支持總線結(jié)構(gòu):使用總線器件和總線布線使電路設(shè)計(jì)簡(jiǎn)明清晰;可輸出高質(zhì)量圖紙:通過(guò)個(gè)性化設(shè)置,可以生成印刷質(zhì)量的BMP圖紙,可以方便地供WORD、POWERPOINT等多種文檔使用。
(2)完善的電路仿真功能(Prospice)
ProSPICE混合仿真:基于工業(yè)標(biāo)準(zhǔn)SPICE3F5,實(shí)現(xiàn)數(shù)字/模擬電路的混合仿真;超過(guò)27000個(gè)仿真器件:可以通過(guò)內(nèi)部原型或使用廠家的SPICE文件自行設(shè)計(jì)仿真器件,Labcenter也在不斷地發(fā)布新的仿真器件,還可導(dǎo)入第三方發(fā)布的仿真器件; 多樣的激勵(lì)源:包括直流、正弦、脈沖、分段線性脈沖、音頻(使用wav文件)、指數(shù)信號(hào)、單頻FM、數(shù)字時(shí)鐘和碼流,還支持文件形式的信號(hào)輸入; 豐富的虛擬儀器:13種虛擬儀器,面板操作逼真,如示波器、邏輯分析儀、信號(hào)發(fā)生器、直流電壓/電流表、交流電壓/電流表、數(shù)字圖案發(fā)生器、頻率計(jì)/計(jì)數(shù)器、邏輯探頭、虛擬終端、SPI調(diào)試器、I2C調(diào)試器等; 生動(dòng)的仿真顯示:用色點(diǎn)顯示引腳的數(shù)字電平,導(dǎo)線以不同顏色表示其對(duì)地電壓大小,結(jié)合動(dòng)態(tài)器件(如電機(jī)、顯示器件、按鈕)的使用可以使仿真更加直觀、生動(dòng); 高級(jí)圖形仿真功能(ASF):基于圖標(biāo)的分析可以精確分析電路的多項(xiàng)指標(biāo),包括工作點(diǎn)、瞬態(tài)特性、頻率特性、傳輸特性、噪聲、失真、傅立葉頻譜分析等,還可以進(jìn)行一致性分析。
(3)獨(dú)特的單片機(jī)協(xié)同仿真功能(VSM)
支持主流的CPU類型:如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU類型隨著版本升級(jí)還在繼續(xù)增加,如即將支持CORTEX、DSP處理器;支持通用外設(shè)模型:如字符LCD模塊、圖形LCD模塊、LED點(diǎn)陣、LED七段顯示模塊、鍵盤(pán)/按鍵、直流/步進(jìn)/伺服電機(jī)、RS232虛擬終端、電子溫度計(jì)等等,其COMPIM(COM口物理接口模型)還可以使仿真電路通過(guò)PC機(jī)串口和外部電路實(shí)現(xiàn)雙向異步串行通信; 實(shí)時(shí)仿真:支持UART/USART/EUSARTs仿真、中斷仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真。編譯及調(diào)試:支持單片機(jī)匯編語(yǔ)言的編輯/編譯/源碼級(jí)仿真,內(nèi)帶8051、AVR、PIC的匯編編譯器,也可以與第三方集成編譯環(huán)境(如IAR、Keil和Hitech)結(jié)合,進(jìn)行高級(jí)語(yǔ)言的源碼級(jí)仿真和調(diào)試。
(4)實(shí)用的PCB設(shè)計(jì)平臺(tái)
原理圖到PCB的快速通道:原理圖設(shè)計(jì)完成后,一鍵便可進(jìn)入ARES的PCB設(shè)計(jì)環(huán)境,實(shí)現(xiàn)從概念到產(chǎn)品的完整設(shè)計(jì);先進(jìn)的自動(dòng)布局/布線功能:支持器件的自動(dòng)/人工布局;支持無(wú)網(wǎng)格自動(dòng)布線或人工布線;支持引腳交換/門(mén)交換功能使PCB設(shè)計(jì)更為合理; 完整的PCB設(shè)計(jì)功能:最多可設(shè)計(jì)16個(gè)銅箔層,2個(gè)絲印層,4個(gè)機(jī)械層(含板邊),靈活的布線策略供用戶設(shè)置,自動(dòng)設(shè)計(jì)規(guī)則檢查,3D可視化預(yù)覽;多種輸出格式的支持:可以輸出多種格式文件,包括Gerber文件的導(dǎo)入或?qū)С,便利與其它PCB設(shè)計(jì)工具的互轉(zhuǎn)(如protel)和PCB板的設(shè)計(jì)和加工。
4.2 KeilC51
Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部分組合在一起。運(yùn)行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。
Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。
C51工具包的整體結(jié)構(gòu),uVision與Ishell分別是C51 for Windows和for Dos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM中。
Keil具有具有很多優(yōu)點(diǎn):
(1)Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。
(2)與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。 Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。
5調(diào)試與仿真結(jié)果
本次的設(shè)計(jì)主要應(yīng)用了protues和keilC51軟件進(jìn)行系統(tǒng)設(shè)計(jì)和仿真,經(jīng)過(guò)仿真后,結(jié)果較好,示波器可以正確的輸出鋸齒波、三角波、梯形波、正弦波。
沒(méi)有按鍵按下時(shí),波形圖如圖13所示

圖13 沒(méi)有按鍵按下時(shí)波形圖
當(dāng)按下K1按鍵時(shí),產(chǎn)生鋸齒波,如圖14所示

圖14 按下K1鍵產(chǎn)生鋸齒波
當(dāng)按下K2按鍵時(shí),產(chǎn)生三角波,15如圖所示

圖15 按下K2鍵時(shí)產(chǎn)生三角波
當(dāng)按下按鍵K3時(shí),產(chǎn)生梯形波,如圖16所示

圖16 按下K3產(chǎn)生梯形波
當(dāng)按下K4按鍵時(shí),產(chǎn)生正弦波,如圖17所示

圖17 按下K4產(chǎn)生正弦波
按下K5按鍵的時(shí)候采樣頻率會(huì)發(fā)生變化。
6總結(jié)
經(jīng)過(guò)近兩周的單片機(jī)課程設(shè)計(jì),終于完成了我們組的波形發(fā)生器的設(shè)計(jì),基本達(dá)到了設(shè)計(jì)要求,從心底里來(lái)說(shuō),還是很高興的。但還是有很多需要反思的問(wèn)題。
在本次設(shè)計(jì)的過(guò)程中,雖然讓我長(zhǎng)進(jìn)了很多。對(duì)于單片機(jī)設(shè)計(jì),其中硬件電路是比較簡(jiǎn)單的,主要是解決程序設(shè)計(jì)的問(wèn)題,而程序設(shè)計(jì)它反映了我們解決問(wèn)題的思維邏輯和創(chuàng)新能力。因此在整個(gè)設(shè)計(jì)過(guò)程中大部分時(shí)間是用在程序上面的。
要設(shè)計(jì)一個(gè)成功的電路,必須要有耐心,要有堅(jiān)持的毅力。完成這次設(shè)計(jì)后,我在書(shū)本理論知識(shí)的基礎(chǔ)上又有了更深層次的理解。我發(fā)現(xiàn),在我們所使用的書(shū)籍上有些知識(shí)在實(shí)際應(yīng)用中其實(shí)并不是十分理想,各種參數(shù)都需要自己去調(diào)整。這就要求我們更加注重實(shí)踐環(huán)節(jié)。