单片机/MCU论坛
直播中

陈诺

8年用户 112经验值
擅长:EDA/IC设计
私信 关注
[问答]

PCF8591 DA转换的问题

51单片机外接PCF8591芯片进行DA转换,最高输出电压只有基准电压的一半。
八位DA转换 控制字在127的时候,有电压输出;控制字在128的时候 没有电压输出。
求解是什么问题。

回帖(2)

陈诺

2017-11-10 20:18:10
#include

#define PCF8591 0x90
#define unchar unsigned char
#define unint unsigned int
***it SCL=P3^4;       //串行时钟输入端
***it SDA=P3^5;           //串行数据输入端
//unchar temp;

void delay()               //延时4-5个微秒
{;;}


void delay_1ms(unint z)
{
unint x,y;
for(x=z;x>0;x--)
           for(y=110;y>0;y--);
}

void start()//开始信号
{
  SDA=1;
    delay();
  SCL=1;
    delay();
  SDA=0;
    delay();
}

void stop()      //停止信号
{
  SDA=0;
    delay();
  SCL=1;
    delay();
  SDA=1;
    delay();
}


void respons()//应答   相当于一个智能的延时函数
{
  unchar i;
  SCL=1;
    delay();
  while((SDA==1)&&(i<250))
           i++;
      SCL=0;
    delay();
}

void init()      //初始化
{
  SDA=1;
    delay();
  SCL=1;
    delay();   
}

void write_byte(unchar date)      //写一字节数据
{
unchar i,temp;
temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1; //左移一位 移出的一位在CY中
                SCL=0;                      //只有在scl=0时sda能变化值
                        delay();
                SDA=CY;
                        delay();
                SCL=1;
                        delay();            
        }   
  SCL=0;
    delay();
  SDA=1;
    delay();
}



void write_add(unchar control,unchar date)
{
  start();
         write_byte(PCF8591);        //10010000  前四位固定 接下来三位全部被接地了 所以都是0 最后一位是写 所以为低电平
  respons();
          write_byte(control);
  respons();
          write_byte(date);
  respons();
         stop();

}


void main()
{

        init();
        while(1)
        {
                write_add(0x40,128);                        //a是DA转换的输入位。

        }
}
举报

2018-1-4 22:05:27
同求啊亲
举报

更多回帖

发帖
×
20
完善资料,
赚取积分