历史上的今天
返回首页

历史上的今天

今天是:2025年05月20日(星期二)

正在发生

2018年05月20日 | MSP430学习的第一个模拟I2C程序

2018-05-20 来源:eefocus

#include  
unsigned char I2CBUF;
unsigned char checkbit;
#define SCL_H   (P10OUT |= BIT2)      // P10.2为SCL
#define SCL_L   (P10OUT &= ~BIT2)
#define SDA_H   (P10OUT |= BIT1)     //p10.1为SDA
#define SDA_L   (P10OUT &= ~BIT1)
#define SDA_OUT  (P10DIR |= BIT1)
#define SDA_IN  (P10DIR &= ~ BIT1)
void I2C_Start(void)    //I2C开始信号
{
 SDA_OUT;
 SCL_L;
 SDA_H;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 SDA_L;
 __delay_cycles(5);
 SCL_L;
 __delay_cycles(5);
}
unsigned char testACK(void) {
 SDA_IN;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 checkbit = (P10IN & BIT1) >> 4;
 __delay_cycles(5);
 SCL_L;
 __delay_cycles(5);
 return (checkbit);
}
void I2C_ACK(void)                //应答信号
{
 SDA_OUT;
 SCL_L;
 SDA_L;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 SCL_L;
 __delay_cycles(5);
 SDA_H;
}
void I2C_NACK(void) {
 SDA_OUT;
 SDA_H;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 SCL_L;
 __delay_cycles(5);
}
void I2C_STOP(void)             //产生结束信号
{
 SCL_L;
 __delay_cycles(5);
 SDA_L;
 __delay_cycles(5);
 SCL_H;
 __delay_cycles(5);
 SDA_H;
 __delay_cycles(5);
}
void I2C_WRITE(unsigned char data)
{
 SDA_OUT;
 unsigned char i;
 for (i = 8; i > 0; i--)      //高位循环8次,发送1个字节数据
    {
  if (data & 0x80)   //判断数据高位是0还是1
     {
   SDA_H;           //高位数据写1
  }
  else
  {
   SDA_L;
  }
  SCL_H;
  __delay_cycles(5);  //发送数据
  SCL_L;
  __delay_cycles(5);
  data <<= 1;

 }
}
unsigned char I2C_READ(void)
{
 unsigned char j;
 unsigned char BUFFER = 0X00;
 SDA_IN;
 for (j = 8; j >0; j--)      //高位循环8次,发送1个字节数据
    {
  SCL_H;
  __delay_cycles(5);
  BUFFER <<= 1;
  if ((P10IN & BIT1) == BIT1)   //判断数据高位是0还是1
  {
   BUFFER |= 0X01;         //高位数据写1
  }
  else
  {
   BUFFER |= 0XFE;
  }
  __delay_cycles(5);  //发送数据
  SCL_L;
  __delay_cycles(5);
 }
 return BUFFER;
}
void C16_WRITEDATA(unsigned char address, unsigned char DATA)
{
 I2C_Start();
 I2C_WRITE(address);
 testACK();
 I2C_ACK();
 I2C_WRITE(0x00);
 testACK();
 I2C_ACK();
 I2C_WRITE(DATA);
 I2C_STOP();
}
unsigned char C16_READEDATA(unsigned char address)
{
 unsigned char READDATA;
 I2C_Start();
 I2C_WRITE(0XA1);
 testACK();
 I2C_ACK();
 I2C_WRITE(address);
 I2C_Start();
 testACK();
 I2C_ACK();
 I2C_WRITE(0XA1);
 READDATA = I2C_READ();
 I2C_STOP();
 return READDATA;
}
int main(void)
{
    const int DATA = 0X88;
 unsigned char READBUFFER;
 WDTCTL = WDTPW + WDTHOLD;
 P10DIR |= BIT1 + BIT2;
 P2DIR |= BIT0;
 P2OUT &= ~BIT0;
 C16_WRITEDATA(0X00, DATA);
 __delay_cycles(5);
 READBUFFER = C16_READEDATA(0X00);
 while (1)
 {
  if (READBUFFER == 0X88)
  {
   P2OUT |= BIT0;
  } else {
   P2OUT &= ~ BIT0;
  }
  __delay_cycles(15);
 }
}


推荐阅读

史海拾趣

CAMDENBOSS公司的发展小趣事

在快速发展的同时,CAMDENBOSS公司始终注重品质管理。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。此外,公司还积极引进先进的生产设备和技术,不断提升生产效率和产品质量。通过持续改进和优化,公司确保了产品品质的稳定性和可靠性。

CTC [Compact Technology Corp.]公司的发展小趣事

为了进一步扩大市场份额,CTC公司开始寻求与其他行业的跨界合作。一次与汽车制造商的洽谈中,CTC公司提出将自身的电子技术应用于汽车制造中,以提升汽车的性能和智能化水平。双方经过深入交流,达成了合作意向。这一跨界合作不仅为CTC公司带来了新的业务领域,也推动了汽车行业的创新发展。

ERNI公司的发展小趣事

进入20世纪60年代,ERNI开始关注连接器技术的发展。他们意识到,随着电子设备的日益复杂和多样化,对连接器技术的需求也将不断增长。因此,ERNI投入大量资源进行研发,终于在1967年成功开发出第一个背板连接器,这一创新技术迅速成为公司的核心产品,也为ERNI在连接器市场赢得了声誉。

Excelsys公司的发展小趣事

人才是企业发展的核心驱动力。Excelsys公司高度重视人才培养和团队建设。公司建立了完善的人才培养机制,为员工提供系统的培训和学习机会;同时,公司还注重团队文化的建设,营造积极向上、团结协作的工作氛围。这些措施为公司的持续发展提供了有力的人才保障。

Acme Electric Corporation公司的发展小趣事

Excelsys公司自创立之初,就致力于电源管理技术的研发。在电子行业中,电源管理一直是影响产品性能和可靠性的关键因素。公司团队通过不断的技术创新,推出了一系列高性能、高效率的电源管理产品,赢得了市场的广泛认可。特别是在智能设备日益普及的背景下,Excelsys的电源管理解决方案为各种智能设备提供了稳定可靠的电力支持,助力了行业的发展。

DESIGNERSYSTEMS公司的发展小趣事

随着科技的快速发展,电子设备的设计要求越来越高。DESIGNERSYSTEMS公司投入大量研发资源,不断推动技术突破。他们成功开发出一套高效、智能的设计软件,能够大大提高设计效率和精度。这一技术突破使得DESIGNERSYSTEMS在电子设备设计领域具备了更强的竞争力,吸引了更多客户的合作。

问答坊 | AI 解惑

GPS系统在车辆领域中的应用

GPS系统在出租车行业的应用   GPS系统在出租车行业的应用主要体现在灵活的出租车调度系统中,用户只需要拨打调度中心电话,中心将自动寻找最近的空车,在电话还没挂断之前,便可以告诉乘客“车牌号为XXX的车将在X分钟之内到达。”这种\"叫车服务 ...…

查看全部问答>

无铅工艺分析

无铅工艺分析好东西与大家分享! 《无铅工艺分析》 图文介绍: 1.锡膏印刷工艺 2.回流焊接工艺 3.波峰焊接工艺 4.手工焊接工艺 …

查看全部问答>

【藏书阁】数字电子技术电子教案

第1章 数字电子技术基础 119页.ppt 第2章 组合逻辑电路 136页.ppt 第3章 时序逻辑电路 171页.ppt 第4章 脉冲信号的产生与整形 46页.ppt 第5章 数模和模数转换 29页.ppt 数字电子技术.ppt…

查看全部问答>

新闻早班车:具有自动断电及唤醒模式的磁旋转编码器

奥地利微电子公司日前宣布推出具有自动断电及唤醒模式的磁旋转编码器AS5055。 AS5055主要适用于机器人等低功耗电池供电的应用,同时也适合需要小体积及高分辨率的其他位置检测应用。AS5055集成了4个霍尔传感元件、1个12位角度编码器、1个智能 ...…

查看全部问答>

汇编高手,ldr伪指令的奇怪问题,谁能解决

在调程序的时候老是出错,然后单步跟发现问题出在ldr伪指令上,于是专门写了个汇编文件在arm上跑了一下,发现一个奇怪的现象 开发环境ADS1.2 整个工程就这一个2410.s文件,全部代码如下: Usr_Size EQU 5         AREA  ...…

查看全部问答>

WINCE6.0的文件路径问题

我想编个能创建文件的程序,用到了CFile类,但不知道该怎样设置路径,请大侠们详细的说说路径问题。对了我用的是SD卡启动,程序也放在SD卡里面。…

查看全部问答>

单片机板块增加凌阳单片机子版块

现在语音处理应用逐渐广泛,而凌阳单片机可以低廉的价格,较短的开发周期实现初步的语音处理功能,所以建议论坛增加凌阳单片机子版块。…

查看全部问答>

STM8中是不是不可以对寄存器进行位操作?

                                 在H文件中没有对位定义…

查看全部问答>

【POS机套件】----- 晒晒

刚收到,是EMS,来自上海 …

查看全部问答>

晒一下新到的触屏故障STM32F429I-discovery和修复过程

今天怀着忐忑的心情收到了EE团的STM32F429I-discovery,但是一拆开包装一看 哇一个塞! 包装居然被挤压变形开裂了,不过没事!这种开发板一般都很耐摔 激动的拆开塑料壳上电试一试,结果:怎么触摸屏用不了呢? 然后马上来论坛看到大家有不少 ...…

查看全部问答>