單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)書_第1頁
單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)書_第2頁
單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)書_第3頁
單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)書_第4頁
單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)項(xiàng)目AD-DA轉(zhuǎn)換實(shí)驗(yàn)【實(shí)驗(yàn)?zāi)康摹?、 學(xué)習(xí)I2C串行總線的工作原理2、 學(xué)習(xí)A/D芯片PCF8591的工作原理3、 學(xué)習(xí)C51編寫程序控制AD-DA轉(zhuǎn)換【實(shí)驗(yàn)內(nèi)容】1、 學(xué)習(xí)I2C總線的工作方式、尋址方式和數(shù)據(jù)傳輸過程;2、 學(xué)習(xí)A/D芯片PCF8591的引腳、電路圖及其控制字節(jié)的使用;3、 實(shí)現(xiàn)給定的程序,學(xué)習(xí)AD-DA轉(zhuǎn)換程序的編寫。4、 完成實(shí)習(xí)報(bào)告【實(shí)驗(yàn)原理】1. 連線: JP10 (P0)與JP12 用8PIN排線連接。2. I2C串行總線的工作原理(參考教材第九章第一節(jié))。3. PCF8591工作原理:PCF8591是具有I2C總線的接口的8位A/D及D/A轉(zhuǎn)換器。有4路A/

2、D轉(zhuǎn)換輸入,1路D/A模擬輸出。也即既可以做A/D轉(zhuǎn)換,也可以做D/A轉(zhuǎn)換。A/D轉(zhuǎn)換為逐次比較型。3.1 PCF8591電路圖圖5-1 PCF8591電路圖3.2 引腳說明圖5-2 PCF8591引腳圖引腳說明:AIN0AIN3:模擬輸入信號端A0A2:硬件地址端;Vss、VDD:輸入電壓端(2.56V);SDA:I2C總線輸入/輸出端;SCL:I2C總線時(shí)鐘信號輸入端;OSC:外部時(shí)鐘輸入/內(nèi)部時(shí)鐘輸出端;EXT:內(nèi)部/外部時(shí)鐘選擇輸入端;AGND:模擬信號接地端;AOUT:模擬量輸出端;VREF:電壓參考輸入端。3.3 器件總地址PCF8591采用典型的I2C總線接口器件尋址方式,即總線

3、地址由器件地址、引腳地址和方向組成。飛利浦公司規(guī)定A/D器件的地址都是1001。引腳地址為A0、A2、A2,其值由用戶選擇。因此I2C總線最多可以連接2×2×2=8個(gè)具有I2C總線接口的A/D器件。地址的最后一位是方向位,當(dāng)主控器對A/D器件進(jìn)行讀操作時(shí)為1,進(jìn)行寫操作時(shí)為0??偩€操作時(shí),由器件地址、引腳地址和方向位組成的從地址為主控器發(fā)送的第一個(gè)字節(jié)。3.4 控制字節(jié)圖5-3 PCF8591控制字節(jié)說明控制字節(jié)用于實(shí)現(xiàn)器件的各種功能??刂谱止?jié)存放在控制寄存器中??偩€操作時(shí),為主控器發(fā)出的第二個(gè)字節(jié)。在進(jìn)行A/D轉(zhuǎn)換數(shù)據(jù)操作時(shí),首先是主控器發(fā)出起始信號,然后發(fā)出讀尋址字節(jié),

4、被控器做出應(yīng)答后,主控器從被控器讀出第一個(gè)數(shù)據(jù)字節(jié),主控器發(fā)出應(yīng)答,主控器從被控器讀出第二個(gè)數(shù)據(jù)字節(jié),主控器發(fā)出應(yīng)答;.,一直到主控器從被控器中讀出第n個(gè)數(shù)據(jù)字節(jié),主控器發(fā)出非應(yīng)答信號,最后主控器發(fā)出停止信號。當(dāng)進(jìn)行D/A轉(zhuǎn)換時(shí),【實(shí)驗(yàn)步驟】1. 單片機(jī)開發(fā)板的電源與PC的USB口相連,且在PC機(jī)上安裝必要的軟件。具體步驟參見文件夾“軟件及其安裝說明”中的“單片機(jī)實(shí)驗(yàn)-軟件安裝說明書.doc”。2. 在KEIL環(huán)境中編寫和調(diào)試程序,具體操作步驟,請參見附錄“步驟一:在KEIL環(huán)境中編寫和調(diào)試程序”;3. 用程序燒錄軟件,具體操作步驟,請參見附錄“實(shí)驗(yàn)步驟二:燒錄HEX程序到單片機(jī)開發(fā)板中”;4

5、. 完成實(shí)習(xí)報(bào)告填寫工作;【附錄】實(shí)驗(yàn)步驟一:在KEIL環(huán)境中編寫和調(diào)試程序1. 單擊桌面上的圖標(biāo),則顯示如下的窗口:2. 單擊菜單中的“Project”項(xiàng),則顯示如下的彈出菜單:3. 選擇其中的“New Project”菜單項(xiàng),則彈出如下的窗口:4. 在該窗口中,在“保存在(I):”中選擇保存項(xiàng)目的文件夾,同時(shí),在“文件名(N)”中鍵入項(xiàng)目名(注意:項(xiàng)目名最好是英文,而不是漢字;其次,項(xiàng)目名中不能加空格),鍵入項(xiàng)目名后,單擊“保存(S)”按鈕,則顯示如下的窗口:5. 在“Data base”中選擇“Atmel”項(xiàng),單擊其前面的“+”,顯示如下的選擇項(xiàng),從中選擇“AT89C51”,如下圖所示:

6、6. 單擊上圖中的“確定”按鈕,顯示如下的彈出窗口:7. 選擇其中的“是(Y)”按鈕。則新的項(xiàng)目創(chuàng)建成功,如下圖顯示:8. 單擊菜單項(xiàng)中的“File->New”,如下圖:9. 顯示如下的文件編輯框,如下圖所示:10. 點(diǎn)擊菜單中的“File->Save”,如下圖:11. 則顯示如下的對話框:12. 在“文件名(N)”中鍵入文件名ADC.c,然后單擊“保存”按鈕,返回文件編輯界面,并編輯如下的AD轉(zhuǎn)換程序:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar uns

7、igned char#define Delay4us() _nop_();_nop_();_nop_();_nop_();sbit SCL=P21;sbit SDA=P20;sbit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24;uchar code tab1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;bit bdata IIc_ERROR;uchar temp;void iic_start()SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;void

8、iic_stop()SDA=0;SCL=1;Delay4us();SDA=1;Delay4us();SCL=0;void slave_ACK(void)SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;void slave_NOACK(void)SDA=1;SCL=1;Delay4us();SDA=0;SCL=0;SDA=0;void check_ACK()SDA=1;SCL=1;IIc_ERROR=0;Delay4us();if(SDA=1)IIc_ERROR=1;SCL=0;void IICSendByte(unsigned char indata)unsigned c

9、har n=8;while(n-)SDA=(bit)(indata&0x80);SCL=1;Delay4us();SCL=0;indata=indata<<1;unsigned char IICreceiveByte(void)unsigned char n=8;unsigned char tdata=0;while(n-)SDA=1;SCL=1;tdata=tdata<<1;if(SDA=1)tdata=tdata|0x01;elsetdata=tdata&0xfe;SCL=0;return tdata;void ADC_PCF8591(unsigne

10、d char controlbyte)iic_start();IICSendByte(0x90);check_ACK();IICSendByte(controlbyte);check_ACK();iic_start();IICSendByte(0x91);check_ACK();IICreceiveByte();slave_ACK();temp=IICreceiveByte();slave_ACK();slave_NOACK();iic_stop();void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void d

11、isply(uchar count)uchar bai,shi,ge;bai=count/100;shi=count%100/10;ge=count%10;P0=tab1bai;LS138A=1; LS138B=0;LS138C=1; delay(5);P0=tab1shi;LS138A=0; LS138B=1; LS138C=1; delay(5);P0=tab1ge;LS138A=1; LS138B=1; LS138C=1; delay(5);void main()P1=0x00;while(1)ADC_PCF8591(0x04);disply(temp);13. 程序輸入完成后保存,選中

12、左邊窗口中的“Source Group 1”,然后單擊鼠標(biāo)右鍵,彈出如下的彈出菜單,然后單擊其中的“Add Files to Group “Source Group 1 ”,如下圖所示:14. 則顯示如下的對話框:15. 選中剛才創(chuàng)建的ADC.c文件,然后單擊“Add”按鈕。則文件添加成功,顯示如下圖:16. 然后單擊“Close”按鈕,關(guān)閉添加文件窗口。然后,單擊程序編譯按鈕,如下圖顯示:17. 編譯結(jié)果顯示在界面下方的子窗口中,如果程序有錯(cuò)誤,則請修改程序直到無誤,如下圖:18. 選中左邊“Project Workspace”窗口中的“Target 1”并單擊右鍵,顯示如下的彈出菜單:19

13、. 選中其中的“Options for Target “Target 1”,在顯示如下圖窗口:20. 單擊標(biāo)簽頁“Output”,則顯示如下:21. 其中,“Name of Excutable”中是可執(zhí)行程序的名稱;將“Create Hex File”項(xiàng)打勾,然后單擊“確定”按鈕,并單擊圖標(biāo)重新編譯文件:22. 則生成HEX文件,如下圖所示:實(shí)驗(yàn)步驟二:燒錄HEX程序到單片機(jī)開發(fā)板中1. 單擊文件“PZISP自動(dòng)下載軟件.exe”,則顯示如下:2. 選擇如圖所示的芯片類型、波特率;并且單擊“打開文件”按鈕,選擇生成的HEX文件,然后單擊上圖中的“下載程序”按鈕,如下圖所示:3. 則可執(zhí)行程序燒

14、錄到單片機(jī)開發(fā)板中。注意:在程序下載前,必須將單片機(jī)的電源打開。步驟三,重復(fù)上面的步驟一和步驟二,編輯程序完成模數(shù)轉(zhuǎn)換程序,C51源程序名為DAC.c,程序內(nèi)容如下:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char#define Delay4us() _nop_();_nop_();_nop_();_nop_();#define PCF8591 0x90 /PCF8591 地址sbit SCL=P21;sbit SDA=P20;sbit LS1

15、38A=P22; sbit LS138B=P23;sbit LS138C=P24;uchar code tab1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;bit bdata IIc_ERROR;sbit beep=P15;void iic_start()SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;void iic_stop()SDA=0;SCL=1;Delay4us();SDA=1;Delay4us();SCL=0;void slave_ACK(void)SDA=0;SCL=1;Dela

16、y4us();SCL=0;SDA=1;void slave_NOACK(void)SDA=1;SCL=1;Delay4us();SDA=0;SCL=0;SDA=0;void check_ACK()SDA=1;SCL=1;IIc_ERROR=0;Delay4us();if(SDA=1)IIc_ERROR=1;SCL=0;void IICSendByte(unsigned char indata)unsigned char n=8;while(n-)SDA=(bit)(indata&0x80);SCL=1;Delay4us();SCL=0;indata=indata<<1;vo

17、id DACconversion(/*unsigned char sla,unsigned char c,*/ unsigned char Val) iic_start(); /啟動(dòng)總線 IICSendByte(0x90); /發(fā)送器件地址 check_ACK(); IICSendByte(0x40); /發(fā)送控制字節(jié) check_ACK(); IICSendByte(Val); /發(fā)送DAC的數(shù)值 check_ACK(); iic_stop(); /結(jié)束總線void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void disply(uchar count)uchar bai,shi,ge;bai=count/100;shi=count%100/10;ge=count%10;P0=tab1bai;LS138A=1; LS1

溫馨提示

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

評論

0/150

提交評論