老古开发网首页
导航:老古开发网首页文章索引索引第262页文章分类PIC MSP430 第2页→[通用MSP430—I2C程序]
| -文章搜索 - 最新文章 - |

第590篇:通用MSP430—I2C程序

发布时间:2004年2月25日 点击次数:7250
来源:   作者:
 
//==================================//
//通用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);
}

欢迎进入老古论坛进行讨论
[PIC MSP430 ] 相关文章:
利尔达MSP430系列单片机技术讲座和培训
简介:
一、技术讲座 -- 内容: 介绍主流单片机和MSP430单片机的技术特点和发展趋势;国内外品牌产品中的应用;利用MSP430开发的成功实例;掌握MSP430的就业和发展机会。 主讲: 梁源 -- TI MSP430 资深工程师、 LIERDA 公司技术总监 &nb......

MSP430三表技术讨论区
msp430单片机没有外部RAM,也就是说:无法接总线驱动设备。不知各位大侠是否同意。
请问在网上哪里可以找到带12位A/D转换的单片机的资料?
多路A/D不用的输入端一般如何处理?接地吗?
 
下一个:[嵌入式系统]嵌入式LINUX:通信设备中的主流嵌入式操作系统
简介:
引言 作为一种嵌入式操作系统,嵌入式Linux以其特别和引人注目的优势正极大地吸引电子设计工程师从自己书写的或专用的RTOS转移到Linux。据VDC Data的数据显示,整个Linux的增长从2000年的1%到2003年的14%,再到2010年猛增到67%。Even Data数据显示,在嵌入式市场,嵌入式Linux从2001年11%增到2002年27%,而同期Vxwork只是从16%到18%,WIN CE从9%到14%。在嵌入式Linux的各种应用市场中,语音和数据通信名列第一,2000年的销......

上一个:[新闻热点]神码网络双模网卡入围中国移动

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:否 执行时间:31毫秒