|
一、實驗目的 1、熟悉A/D轉換的原理。 2、進一步熟悉I2C總線工作的原理,熟悉PCF8591芯片的工作特性。 3、掌握PCF8591芯片A/D轉換的編程應用。 二、實驗設備 計算機一臺;單片機實驗儀一臺;Keil C51和Proteus軟件。 三、實驗內容 根據下面的電路圖、I2C總線工作的原理和PCF8591手冊,編程實現:將PCF8591的AIN0引腳輸入的0~5V模擬電壓(由電位器產生)進行A/D轉換,并將轉換結果輸出到P0口(P0口接8個LED),要求P0口的8個燈能實時反映出輸入的模擬電壓。 四、實驗電路圖
0.jpg (62.53 KB, 下載次數: 35)
下載附件
2019-12-22 20:59 上傳
五、實驗源程序 #include <reg52.h> #include <intrins.h> sbit SCL=P2^1; sbit SDA=P2^0; void start() { SDA=1; SCL=1; _nop_(); _nop_(); SDA=0; _nop_(); _nop_(); SCL=0; } void stop() { SDA=0; SCL=0; _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); SDA=1; } void rack() { SCL=1; _nop_(); _nop_(); SCL=0; } void nack() { SDA=1; SCL=1; _nop_(); _nop_(); SCL=0; SDA=1; } void wbyte(unsigned char tmp) { unsigned char i; for(i=0;i<8;i++) { tmp<<=1; SDA=CY; SCL=1; _nop_(); _nop_(); SCL=0; } rack(); }
unsigned char rbyte() { unsigned char i,d; for(i=0;i<8;i++) { SCL=1; d<<=1; d=d|SDA; SCL=0; } return d; } unsigned rdata() { unsigned char d; start(); wbyte(0x90); wbyte(0); start(); wbyte(0x91); d=rbyte(); nack(); stop(); return d; } void main() { unsigned char d; while(1) { d=rdata(); P0=~d; } }
|