51单片机的AD/DA转换

来源:互联网 发布:淘宝买家秀卖家秀搞笑 编辑:程序博客网 时间:2024/05/22 01:43
一、A/D(模数)、D/A(数模)转换
(一)、引脚

AOUT:模拟输出
Vref:参考电压
AGND:模拟地
EXT:接地
OSC:悬空
SCL,SDA:IIC
AIN0、AIN1、AIN2:模拟输入口

(二)、电路图

从电路图可以看出,A0,A1,A2接地,所以当写入的时候地址应该是0X90,读取的时候应该是0X91

(三)、AGND和DGND

模拟地和数字地隔离开,消除干扰

(四)、控制字节

(五)、AD读数据函数
#include <reg52.h>
#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;
}









0 0
原创粉丝点击