最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

通用MSP430—I2C程序

来源:动视网 责编:小OO 时间:2025-10-01 10:31:33
文档

通用MSP430—I2C程序

//==================================////通用MSP430—I2C程序//收藏:清风徐徐//QQ:78779514//EMAIL:XSL88888@TOM.com//2004.2.4//===================================//#include"MSP430x14x.h"//P3.2SCL//P3.3SDA#defineSDA_1P3OUT|=BIT3//SDA=1#defineSDA_0P3OUT&=~BIT3//SDA=
推荐度:
导读//==================================////通用MSP430—I2C程序//收藏:清风徐徐//QQ:78779514//EMAIL:XSL88888@TOM.com//2004.2.4//===================================//#include"MSP430x14x.h"//P3.2SCL//P3.3SDA#defineSDA_1P3OUT|=BIT3//SDA=1#defineSDA_0P3OUT&=~BIT3//SDA=
//==================================//

//通用MSP430—I2C程序

//收藏:清风徐徐

//QQ:78779514

//EMAIL:XSL88888@TOM.com

//2004.2.4

//===================================//

#include "MSP430x14x.h"

//P3.2  SCL

//P3.3  SDA

#define SDA_1       P3OUT |=  BIT3              //SDA = 1

#define SDA_0       P3OUT &=~ BIT3              //SDA = 0

#define SCL_1       P3OUT |=  BIT2              //SCL = 1

#define SCL_0       P3OUT &=~ BIT2              //SCL = 0

#define DIR_IN      P3DIR &=~ BIT3;  SDA_1      //I/O口为输入

#define DIR_OUT     P3DIR |=  BIT3              //I/0口为输出

#define SDA_IN ((P3IN >> 3) & 0x01) //Read SDA

unsigned int a[50];

static void Delay(unsigned int n)

{

   unsigned int i;

for (i=0; i}

void Init(void)

{

  SCL_1;

  Delay(5);

  SDA_1;

  Delay(5);

}

void Start(void)

{

  SDA_1;

  Delay(5);

  SCL_1;

  Delay(5);

  SDA_0;

  Delay(5);

  SCL_0;

  Delay(5);

}

void Stop(void)

{

  SDA_0;

  Delay(5);

  SCL_1;

  Delay(5);

  SDA_1;

  Delay(5);

}

void WriteByte(unsigned char WriteData)

{

  unsigned char i;

for (i=0; i<8; i++)

  {

    SCL_0;

    Delay(5);

if (((WriteData >> 7) & 0x01) == 0x01)

    {

      SDA_1;

    }

    else

    {

      SDA_0;

    }

    Delay(5);

    SCL_1;

WriteData = WriteData << 1;

    Delay(5);

  }

  SCL_0;

  SDA_1;

  Delay(5);

  Delay(5);

}

unsigned char ReadByte(void)

{

  unsigned char i;

  unsigned char TempBit  = 0;

  unsigned char TempData = 0;

  SCL_0;

  Delay(5);

  SDA_1;

for (i=0; i<8; i++)

  {

    Delay(5);

    SCL_1;

    Delay(5);

    DIR_IN;

    if (SDA_IN == 0x01 /*sda==1*/)

    {

      TempBit = 1;

    }

    else

    {

      TempBit = 0;

    }

    DIR_OUT;

TempData = (TempData << 1) | TempBit;

    SCL_0;

  }

  Delay(5);

  return(TempData);

}

void ReceiveAck(void)

{

  unsigned char i = 0;

  SCL_1;

  Delay(5);

  DIR_IN;

while ((SDA_IN == 0x01 /*sda==1*/) && (i < 255)/*调试方便,可以不要*/)

  {

    i++;

  }

  DIR_OUT;

  SCL_0;

  Delay(5);

}

void Acknowledge(void)

{

  SCL_0;

  Delay(5);

  DIR_OUT;

  SDA_0;

  SCL_1;

  Delay(5);

  SCL_0;

}

unsigned int ReadWord(unsigned char unit/*address*/)

{

  unsigned char HighData = 0;

  unsigned char LowData  = 0;

  unsigned int  TempData = 0;

  Start();

  WriteByte(0xa0);

  ReceiveAck();

  WriteByte(unit);

  ReceiveAck();

  Start();

  WriteByte(0xa1);

  ReceiveAck();

  LowData  = ReadByte();

  Acknowledge();

  HighData = ReadByte();

  Stop();

TempData = (HighData << 8) + LowData;

  Delay(1000);

  return(TempData);

}

void ReadWords(unsigned char unit/*address*/)

{

  unsigned char i;

  unsigned char HighData = 0;

  unsigned char LowData  = 0;

  unsigned int  TempData = 0;

  Start();

  WriteByte(0xa0);

  ReceiveAck();

  WriteByte(unit);

  ReceiveAck();

  Start();

  WriteByte(0xa1);

  ReceiveAck();

for (i=0; i<49; i++)

  {

    LowData  = ReadByte();

    Acknowledge();

    HighData = ReadByte();

    Acknowledge();

a[i]= (HighData << 8) + LowData;

  }

  LowData  = ReadByte();

  Acknowledge();

  HighData = ReadByte();

  Stop();

a[49] = (HighData << 8) + LowData;

  Delay(1000);

}

void WriteWord(unsigned char unit/*address*/, unsigned int WriteData)

{

  unsigned char LowData  = 0;

  unsigned char HighData = 0;

  LowData  = (unsigned char)WriteData;

HighData = (unsigned char)(WriteData >> 8);

  Start();

  WriteByte(0xa0);

  ReceiveAck();

  WriteByte(unit);

  ReceiveAck();

  WriteByte(LowData);

  ReceiveAck();

  WriteByte(HighData);

  ReceiveAck();

  Stop();

  Delay(2000);

}

文档

通用MSP430—I2C程序

//==================================////通用MSP430—I2C程序//收藏:清风徐徐//QQ:78779514//EMAIL:XSL88888@TOM.com//2004.2.4//===================================//#include"MSP430x14x.h"//P3.2SCL//P3.3SDA#defineSDA_1P3OUT|=BIT3//SDA=1#defineSDA_0P3OUT&=~BIT3//SDA=
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top