51单片机的AD/DA转换

一、A/D(模数)、D/A(数模)转换
(一)、引脚
51单片机的AD/DA转换_第1张图片
AOUT:模拟输出
Vref:参考电压
AGND:模拟地
EXT:接地
OSC:悬空
SCL,SDA:IIC
AIN0、AIN1、AIN2:模拟输入口

(二)、电路图
51单片机的AD/DA转换_第2张图片 51单片机的AD/DA转换_第3张图片
从电路图可以看出,A0,A1,A2接地,所以当写入的时候地址应该是0X90,读取的时候应该是0X91

(三)、AGND和DGND
51单片机的AD/DA转换_第4张图片
模拟地和数字地隔离开,消除干扰

(四)、控制字节
51单片机的AD/DA转换_第5张图片
(五)、AD读数据函数
#include 
#include "delay.h"
#include "iic.h"

#define SUCC 1
#define FAIL 0

unsigned char ad_read_byte(unsigned char device_addr,unsigned char channel)
{
    unsigned char result;
      unsigned char temp;

      iic_start();
      result = iic_send_byte(device_addr);
      if(result == FAIL)
        {
              return FAIL;
        }

      result = iic_send_byte(0x44 + channel);
      if(result == FAIL)
        {
              return FAIL;
        }

        iic_start();

        result = iic_send_byte(device_addr + 1);
      if(result == FAIL)
        {
              return FAIL;
        }

    temp = iic_rcv_byte();

    iic_noack();
        iic_stop();
    return temp;        
}

(六)、AD写数据函数
unsigned char ad_write_byte(unsigned char deviceaddr, unsigned char num)
{
      unsigned char result;
      iic_start();

      result = iic_send_byte(deviceaddr);
      if(result == FAIL) return FAIL;

      result = iic_send_byte(0x40);
      if(result == FAIL) return FAIL;

      result = iic_send_byte(num);
      if(result == FAIL) return FAIL;

      iic_stop();

      return SUCC;
}









你可能感兴趣的:(51单片机的AD/DA转换)