msp430f5529 MCP4725程序

发布者:自在堂最新更新时间:2020-07-25 来源: 51hei关键字:msp430f5529  MCP4725  I2C 手机看文章 扫描二维码
随时随地手机看文章

//**************************************
//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<        {
            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

关键字:msp430f5529  MCP4725  I2C 引用地址:msp430f5529 MCP4725程序

上一篇:msp430f5529 RC522射频卡程序
下一篇:MSP430单片机定时器TA中断 程序

推荐阅读最新更新时间:2024-11-08 17:46

msp430f5529时钟笔记(一)
时钟系统结构介绍 五个时钟源 XT1CLK:低频振荡器 VLOCLK:内部超低功耗低频振荡器,典型12kHz REFOCLK:内部调整低频参考振荡器,典型32768Hz DCOCLK:内部数字时钟振荡器,可由FLL稳定后得到 XT2XLK:高频振荡器 三个时钟信号 ACLK:辅助时钟 MCLK:主时钟 SMCLK:子系统时钟 UCS寄存器操作(UCSCTL0-UCSCTL9 十组寄存器) UCSCTL0 DCO DCO频拍选择 MOD 调制位计数器。 UCSCTL1 DCORSEL DCO频率范围选择 DISMOD 调制器禁止使能位 UCSCTL2
[单片机]
基于I2C总线的MSP430单片机应用系统设计
引言 串行护展总线技术是新一代单片机技术发展的一个显著特点。其中PHILIPS公司推出的I2C总线最为著名,它包括一个两端接口,通过一个带有缓冲区的接口,数据可以被I2C发送或接收,控制和状态信息则通过一套内存映射寄存器来传送。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。本文是把I2C总线应用到MSP430单片机温度控制系统中的一个典型实例。 I2C总线是用2根双向I/O信号线(串行时钟线SCL和串行数据线SDA)把多种器件连接起来,并实现器件之间的串行通讯。 MSP430是TI公司一种具有超低功耗的功能强大的16位单片机,MSP430F16
[单片机]
基于<font color='red'>I2C</font>总线的MSP430单片机应用系统设计
51单片机——I2C总线
UART 属于异步通信,比如电脑发送给单片机,电脑只负责把数据通过TXD 发送出来即可,接收数据是单片机自己的事情。而 I2C 属于同步通信, SCL 时钟线负责收发双方的时钟节拍, SDA 数据线负责传输数据。 I2C 的发送方和接收方都以 SCL 这个时钟节拍为基准进行数据的发送和接收。 I2C总线包括SCL,SDA 两根信号线,其中SCL是时钟线,SDA是数据线。 1、起始信号 UART 通信是从一直持续的高电平出现一个低电平标志起始位;而 I2C 通信的起始信号的定义是 SCL 为高电平期间, SDA 由高电平向低电平变化产生一个下降沿,表示起始信号。 2、数据传输 UART 是低位在前,高位在后;而
[单片机]
51单片机——<font color='red'>I2C</font>总线
嵌入式Linux系统中I2C总线设备的驱动设计
引言 I2C总线是PHILIPS公司推出的两线式串行总线,用于连接微控制器及其外围设备,具有简单、高效等特点。由于其接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片引脚的数量,降低了互联成本,特别适用于嵌入式产品。 而Linux系统具有开源、免费、网上资源丰富等优点,目前已成为嵌入式系统的主流选择。因此如何在嵌入式Linux系统中实现I2C功能成为实际开发中的问题。 I2C总线 I2C 总线通过串行数据SDA 和串行时钟SCL线在连接到总线的器件间传递信息,每个器件都有一个唯一的地址识别。根据数据传输时的功能不同,把器件分为主机和从机。主机是初始化总线的数据传输并产生允许传输的时钟信
[单片机]
嵌入式Linux系统中<font color='red'>I2C</font>总线设备的驱动设计
stm32 I2C问题 I2C_CheckEvent()
STM32的IIC接口写的比较复杂,稍不注意,很多地方都会搞错,如果是用GPIO模拟的IIC,问题应该不大,无非应答不不应答的问题。 但是既然STM32自带IIC,并且有接口函数,干嘛不用呢 问题1: I2C_CheckEvent() 检查时停在此处: /* Test on EV5 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); 问题2: 第一次读写正确后再运行程序停在此处: /* Test on EV6 and clear it */ while(!I2C_CheckEvent
[单片机]
STM32开发板入门教程(六) - I2C--24Cxx
我们所用来示范的24Cxx系列是最常用的EEPROM芯片。 前面提到了一个地址码, 24Cxx的地址码是固定的, 8位如下: 1 0 1 0 A2 A1 A0 0 A2 A1 A0分别是它三个管脚的电平 24Cxx 理解起来有一个特别之处。 24Cxx 包括 01/02/04/08/16 四种,容量关系刚好和数字一样。1K 2K 4K 8K 16K 24C02 最为常见, 它的三个地址管脚A2 A1 A0都是可用的, A2 A1 A0 有8中电平组合,也就是说,可以有8个 24C02 挂载同一个I2C总线上。 24C04呢, A0管脚就失效了,只有A2 和 A1 有用,四种组合,最多有4个24C04在总线上, 以此类推。24C16
[单片机]
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
Ⅰ、写在前面 上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对 EEPROM(AT24Xxx) 进行读写操作的过程。 上一篇文章主要内容:I2C协议、模拟I2C底层驱动、EEPROM(AT24Xxx)单字节读写操作。 本文主要内容: STM32硬件I2C详细配置、EEPROM(AT24Xxx)多字节读写操作、ST官方I2C存在问题。 实例实验效果: 1、多字节读写:任意地址(66), 写入任意长度(129)、读取并打印出来 2、单字节读写:任意地址(0),写入1字节数据、 读取并打印出来 实验说明: 1.多字节读写 实验为什么是从66地址写? 为什么是写入12
[单片机]
STM32F10x_硬件<font color='red'>I2C</font>读写EEPROM(标准外设库版本)
MAX6621高效PECI至I2C转换器
PECI至I²C转换器MAX6621提供了一种高效、低成本的PECI至SMBus™/I²C协议转换方案。PECI兼容的主机可以直接从多达4个PECI使能的CPU读取温度数据。   I²C接口提供一个独立的串行通信通道,用于在多主系统或多从系统中与外围设备同步通信。该接口允许最高400kbps的串行数据速率。   MAX6618工作于+3.0V至+3.6V电源电压范围和-20°C至+120°C环境温度范围。   关键特性   400kbps I²C兼容2线串行接口   +3V至+3.6V电源电压   PECI兼容端口   PECI至I²C转换   可编程温度偏移   工作温度范围:-20°C至+120°C   
[模拟电子]
MAX6621高效PECI至<font color='red'>I2C</font>转换器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved