打印
[MCU]

谁做过用MSP430F249的I2C模块与24CXX连接

[复制链接]
984|29
手机看帖
扫描二维码
随时随地手机跟帖
沙发
jiajs| | 2020-6-21 19:54 | 只看该作者
你要例程参考?

使用特权

评论回复
板凳
huangchui|  楼主 | 2020-6-21 19:57 | 只看该作者
嗯,看看寄存器的配置和时序操作

使用特权

评论回复
地板
wyjie| | 2020-6-21 20:00 | 只看该作者
你只要写出来iic的驱动,其他的都一样的。

使用特权

评论回复
5
huangchui|  楼主 | 2020-6-21 20:03 | 只看该作者
网上找不到相关的例程,MPS430论坛找好久不见

使用特权

评论回复
6
huangchui|  楼主 | 2020-6-21 20:15 | 只看该作者
网上找不到相关的例程,MPS430论坛找好久不见

使用特权

评论回复
7
huangchui|  楼主 | 2020-6-21 20:20 | 只看该作者

两个引脚摸拟的I2C时序会
MSP430F249自带的I2C模块功能不知怎么用,怎么设置

使用特权

评论回复
8
jlyuan| | 2020-6-21 20:26 | 只看该作者

你安装msp430来找,例程应该都差不多的。

使用特权

评论回复
9
yszong| | 2020-6-21 20:30 | 只看该作者
如果只搜索249资料肯定少的。

使用特权

评论回复
10
huangchui|  楼主 | 2020-6-21 20:33 | 只看该作者

MSP430 系列 IIC模块与24CXX通信的例子很少,
大都是MSP430 IIC模块与其他IC,用中断的多

使用特权

评论回复
11
zhaoxqi| | 2020-6-21 20:36 | 只看该作者
24CXX是EEPROM么?这个资料很多的,I2C总线一般用模拟的

使用特权

评论回复
12
zyf部长| | 2020-6-21 20:45 | 只看该作者
用的MSP430时, 内部有几十个字节information memory 可以当EEPROM来用

使用特权

评论回复
13
llia| | 2020-6-21 20:50 | 只看该作者
写驱动程序前要知道i2c协议,eeprom的datasheet,还有相应的引脚图。

使用特权

评论回复
14
zhanglli| | 2020-6-21 20:54 | 只看该作者

#include <msp430x14x.h>
#include"string.h"
#define SDA_1 P1OUT |= BIT3
#define SDA_0 P1OUT &= ~BIT3
#define SCL_1 P1OUT |= BIT2
#define SCL_0 P1OUT &= ~BIT2
#define SDA_out P1DIR |=BIT3
#define SDA_in P1DIR &= ~BIT3
unsigned char Readword[12];
void init_clk(void)
{
    unsigned char j;
    BCSCTL1&= ~XT2OFF ;

    do
    {
        IFG1 &= ~ OFIFG;
        for( j=0xff ; j>0 ; j--)
        {
            _NOP();
        }
    }
    while((IFG1&OFIFG)!=0);
        BCSCTL2|=SELM_2+SELS;

}
void Delay(void)        //Delay
{
  unsigned char t;
  for(t=0;t<50;t++)
    _NOP();
}
void Delay1(void)        //Delay
{
  unsigned char t;
  for(t=0;t<200;t++)
    _NOP();
}

void Start(void)         //Start
{
  SDA_out;
  SCL_1;
  _NOP();
   SDA_1;
  Delay();
   SDA_0;
  Delay();
  SCL_0;
  Delay();
}
void Stop(void)       //Stop
{
  SDA_0;
  Delay();
  SCL_1;
  Delay();
  SDA_1;
  Delay();
}

void ACK(void)        //ACK
{
  SDA_0;
  Delay();
  SCL_1;
  Delay();
  SCL_0;
  Delay();
  SDA_1;
  Delay();

}
void NACK(void)      // NOT ACK
{
  SDA_1;
  Delay();
  SCL_1;
  Delay();
  SCL_0;
  Delay();
  SDA_0;
  Delay();

}


void Write1(void)     //Write a bie : 1
{
  SDA_1;
  Delay();
  SCL_1;
  Delay();
  SCL_0;
  Delay();

}
void Write0(void)             //Write a bit : 0
{
  SDA_0;
  Delay();
  SCL_1;
  Delay();
  SCL_0;
  Delay();

}

void Writebyte(unsigned char Wchar)    //Write a byte(8 bit)
{
  unsigned char   i;
  for(i=0;i<8;i++)
  {
    if(Wchar&0x80) Write1();
    else Write0();
    Wchar<<=1;
  }
  SDA_1;
  Delay();
}

unsigned char CheckACK(void)  //receive ACK
{
  unsigned char flag;
  //SDA_1;
  Delay();
  SCL_1;
  Delay();
  SDA_in;
  _NOP();_NOP();
  flag = P1IN&BIT3 ;        //read SDA
  SCL_0;
  Delay();
  SDA_out;
  if(flag) return 0;
   else return 1;
}

unsigned char Readbyte(void)
{
  unsigned char rchar=0 ,i,flag;

   SCL_0;
   Delay();
  for(i=0;i<8;i++)
  {
    SDA_in;
    Delay();
    SCL_1;
    Delay();
    flag=P1IN&BIT3;
     rchar<<=1;
     if(flag) rchar |= 0x01;
    _NOP();
    SDA_out;
    Delay();
    SCL_0;
    Delay();
  }
     SCL_0;
     Delay();
  return rchar;
}
void  ReadNbyte(unsigned char address,unsigned char dataaddr,unsigned int n)
{
    unsigned char i;
      Start();
     Writebyte(address);    //find eeprom
     if(!CheckACK())
       {Stop();return ;}
     Writebyte(dataaddr);   //find unit address
     if(!CheckACK())
        {Stop();return ;}
     Start();
     Writebyte(0xa1);  //read
     if(!CheckACK())
        {Stop();return ;}

   for(i=0;i<n;i++)
   {
    Readword[i]=Readbyte();
    ACK();
   }
    Stop();
    Delay();
}

void WriteNbyte(unsigned char address,unsigned char dataaddr,unsigned char *sbuff,unsigned char n)
{
  unsigned char i;
      Start();
     Writebyte(address);    //find eeprom
     if(!CheckACK())
       {Stop();return ;}
     Writebyte(dataaddr);   //find unit address
     if(!CheckACK())
        {Stop();return ;}
      for(i=0;i<n;i++)
        {
            Writebyte(sbuff[i]);
            if(!CheckACK())
            {Stop();return ;}
        }
     Stop();
     Delay();

}
void main(void)
{
    unsigned char write[9],i;
    for(i=0; i<8; i++){
    write[i] =49+i;
    }

    WDTCTL = WDTPW + WDTHOLD;
//   init_clk();
    P1DIR |= (BIT2 + BIT3);
//   P1SEL = 0x0c;                      // P1.2,3 = SCL&SDA
     while(1)
     {
     //write
     WriteNbyte(0xa0,0x00,write,8);
      Delay1();
     //read
     ReadNbyte(0xa0,0x00,8);
     Delay1();Delay1();
     }

}

使用特权

评论回复
15
bqyj| | 2020-6-21 20:57 | 只看该作者
许多应用设计都需要使用EEPROM

使用特权

评论回复
16
tian111| | 2020-6-21 21:01 | 只看该作者
使用EEPROM注意设计细节,可以避免如读写时序不正确

使用特权

评论回复
17
zwll| | 2020-6-26 09:35 | 只看该作者
MSP430的EEPROM程序

使用特权

评论回复
18
pengf| | 2020-6-26 09:39 | 只看该作者
MSP430F5438的片内FLASH可以当做EEPROM

使用特权

评论回复
19
xxrs| | 2020-6-26 09:42 | 只看该作者
主要还得看硬件的设计。

使用特权

评论回复
20
ousj| | 2020-6-26 09:45 | 只看该作者
你是需要硬件还是软件的设计呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

918

主题

12323

帖子

4

粉丝