找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3018|回复: 1
收起左侧

msp430f5529 MCP4725程序

[复制链接]
ID:404619 发表于 2019-9-3 11:00 | 显示全部楼层 |阅读模式
本帖最后由 wubaqian 于 2019-9-3 11:06 编辑

//**************************************
//I2C起始信号
//**************************************
void I2C_Start()
{
    SDAOUT;                  //数据线设为输出方向
    SDA1;                    //拉高数据线
    SCL_OUT;                 //时钟线设为输出方向
    SCL1;                    //拉高时钟线
    delayus(5);                 //延时
    SDA0;                    //产生下降沿
    delayus(5);                  //延时
    SCL0;                    //拉低时钟线
}
//**************************************
//I2C停止信号
//**************************************
void I2C_Stop()
{
    SCL0;                    //拉低时钟线,才可以改变数据
    delayus(5);                  //延时
    SDAOUT;                  //SDA设为输出方向
    SDA0;                    //拉低数据线
    SCL1;                    //拉高时钟线
    delayus(5);                   //延时
    SDA1;                    //产生上升沿
    delayus(5);                  //延时
}
//**************************************
//I2C发送应答信号
//入口参数:ack (0:ACK 1:NAK)
//**************************************
void I2C_SendACK(uchar ack)
{
    SDAOUT;                   //SDA设为输出方向
    SCL0;                   //拉低时钟线后才可以改变数据
    if(ack) SDA1;
       else SDA0;
//    SDA = ack;                 //写应答信号
    SCL1;                    //拉高时钟线
    delayus(5);                  //延时
    SCL0;                    //拉低时钟线
    delayus(5);                  //延时
}
//**************************************
//I2C接收应答信号
//cy=1,从机发送出的是NACK信号。
//cy=0,从机发送出的是ACK信号。
//**************************************
uchar I2C_RecvACK()
{
    uchar cy;
    SCL0;//时钟线拉低,等待变为上升沿取数据
    SCL1;                    //拉高时钟线,开始读取数据
    SDAIN;                   //将SDA设为输入方向
    delayus(5);                 //延时
    if(SDADATA)//接受到NACK信号,发送停止信号
    {
        cy=1;
    }
    else
    {
        cy=0;
    }
    SCL0;                    //拉低时钟线,读取完毕
    delayus(5);                //延时
    SDAOUT;                  //SDA设为输出方向
    return cy;

}
//**************************************
//向I2C总线发送一个字节数据(写数据)
//**************************************
void I2C_SendByte(uchar dat)
{
    uchar i;
    SCL0;//拉低时钟线,才能改变数据。
    for (i=0; i<8; i++)
    {
        if((dat<<i)&0x80)//读取最高位的数据,如果最高位为1,则置1,否则置零
        {
            SDA1;
        }
        else
        {
            SDA0;
        }
        SCL1;                //拉高时钟线,稳定数据
        delayus(5);              //延时
        SCL0;                //拉低时钟线,准备再次改变数据
        delayus(5);              //延时
    }
    I2C_RecvACK();
}
//**************************************
//从I2C总线接收一个字节数据
//**************************************
uchar I2C_RecvByte()
{
    uchar i;
    uchar dat = 0,cy;
    SDAIN;
    SCL0;//时钟线拉低,允许数据改变
    for (i=0; i<8; i++)
    {
        dat <<= 1;           //从最低位开始接收数据
        SCL1;                //拉高时钟线,读取数据,不允许数据发生变化
        delayus(5);             //延时
        if(SDADATA)
        {
            cy=1;
        }
        else
        {
            cy=0;
        }
        dat |= cy;             //读数据
        SCL0;                //拉低时钟线,允许数据变化
        delayus(5);             //延时
    }
    SDAOUT;
    return dat;
}
//MCP4725
//使用快速模式写命令写DAC寄存器
void MCP4725_WriteData_Voltage(float Vout)   //电压单位V
{
    unsigned char temp;
    unsigned int Dn;
    Dn = ( 4096 * Vout)/5;
    temp = (0x0F00 & Dn) >> 8;  //12位数据高字节
   //iic
    I2C_Start();                  //起始信号
    I2C_SendByte(SlaveAddress);   //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 1 , 1最后一位为0-> 1100 0010
    I2C_SendByte(temp);            //发送高字节数据
    I2C_SendByte(Dn);             //将低8位送到DAC寄存器
    I2C_Stop();                   //发送停止信号
}


在此只提供部分程序,详细内容请下载后查看:
另外需要注意:
MCP4725引脚的连接方法:
VCC(VDD):+ 2.7V 至+ 5.5V
SDA:P2.2
SCL:P2.0
GND:接地

硬件连接条件:
1.找到硬件带芯片的那一面上的三个金属点,它们分别是GND,A0,VCC。将中间的金属点连接至VVC金属点。自此,MCP4725的物理地址变为0xC2。
可使用功能:1.改变MCP4725_WriteData_Voltage(1.21);括号内的数值,即可改变VOUT的输出电压。单位为V

proj MCP4725 DAC.zip

83.99 KB, 下载次数: 52, 下载积分: 黑币 -5

回复

使用道具 举报

ID:34268 发表于 2023-12-4 16:33 | 显示全部楼层
楼主这个程序是用什么主控啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表