OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 131|回复: 2

msp430f149+ds3231 模拟iic没有sda信号怎么回事

[复制链接]

  离线 

1

主题

2

帖子

0

精华

新手上路

Rank: 1

积分
23
金钱
23
注册时间
2017-9-19
在线时间
2 小时
发表于 2017-9-19 17:08:00 | 显示全部楼层 |阅读模式
1金钱
本人刚接触430不久 如果还有很多错误请大神指出

#define DS_SCL  BIT4        //DS_SCL = P5.4
#define DS_SDA  BIT6        //DS_SDA = P2.6
#define DS_SCL_IN P5DIR &= ~DS_SCL
#define DS_SCL_OUT P5DIR |= DS_SCL
#define DS_SCL0 P5OUT &= ~DS_SCL
#define DS_SCL1 P5OUT |= DS_SCL
#define DS_SDA_IN P2DIR &= ~DS_SDA
#define DS_SDA_OUT P2DIR |= DS_SDA
#define DS_SDA0 P2OUT &= ~DS_SDA
#define DS_SDA1 P2OUT |= DS_SDA
#define DS_SDA_BIT P2IN & DS_SDA

void Init_CLK(void)
{
  unsigned int i;
  BCSCTL1 &= ~XTS;
  do{
    IFG1 &= ~OFIFG;
    for(i=0xFF;i>0;i--);
  }
  while((IFG1 & OFIFG)!=0);
  BCSCTL2 |= SELS+SELM1;
  _EINT();
  P5SEL|=0x30;
    DS_SCL_OUT;  //SCLK对应的IO设置为输出状态
    P2DIR&=0xbf;
    P2OUT|=BIT6;
    DS_SCL0;     //SCLK=0
    delay_us(5);
}
void DS3231_Write(u8 write_address,u8 write_data)
{
  u8 Device_Address = 0xD0; //DS3231写设备地址
        iic_Start();                   //开始
        iic_SendByte(Device_Address);  //发送设备地址
        iic_Ack();
       
        iic_SendByte(write_address);   //发送地址
        iic_Ack();                     //应答
       
        iic_SendByte(write_data);      //发送数据
        iic_Ack();                     //应答
       
        iic_Stop();                    //停止
}
u8 DS3231_Read(u8 read_address)
{
  u8 Receive_Data;          //数据接收
        u8 Device_Address = 0xD0; //DS3231写设备地址
       
        iic_Start();                   //开始
        iic_SendByte(Device_Address);  //发送设备地址
        iic_Ack();                     //应答
       
        iic_SendByte(read_address);    //发送地址
        iic_Ack();                     //应答
       
        iic_Start();                   //重复开始
        Device_Address = 0xD1;         //DS3231读设备地址
        iic_SendByte(Device_Address);  //发送地址
        iic_Ack();                     //应答
       
        iic_in();
        Receive_Data = iic_ReceiveByte();  //接收数据
  iic_out();
        iic_NAck();                    //不应答
       
        iic_Stop();                    //停止
       
        return Receive_Data;           //返回数据
}
void delay_us(u8 time)
{
  for(int i=0;i<time;i++)
   _NOP();
}
//------------iic开始-----------
void iic_Start(void)
{
  DS_SDA_OUT;
  DS_SCL_OUT;

  DS_SCL1;
   delay_us(5);  
  DS_SDA1;
   delay_us(10);
  DS_SDA0;
  delay_us(5);
  DS_SCL0;
  delay_us(5);
  DS_SDA_IN;

}

//------------iic结束-----------
void iic_Stop(void)  
{   DS_SDA_OUT;
  DS_SCL_OUT;
    DS_SCL1;
    delay_us(10);   
    DS_SDA0;
    delay_us(5);
    DS_SDA1;
    delay_us(5);
      DS_SDA_IN;
}

//------------iic应答-----------
void iic_Ack(void)
{
        DS_SCL0;
  DS_SDA0;
  delay_us(5);
  DS_SCL1;
  delay_us(5);
  DS_SCL0;
  delay_us(5);

}

//------------iic不应答---------
void iic_NAck(void)
{
DS_SCL0;
  DS_SDA1;
  delay_us(5);
  DS_SCL1;
  delay_us(5);
  DS_SCL0;
  delay_us(5);

}

//------------iic发送-----------
void iic_SendByte(u8 SendData)
{
  DS_SDA_OUT;
  DS_SCL_OUT;
  DS_SCL0;
  u8 i;
  for(i=0;i<8;i++)
  {
                DS_SCL0;
    delay_us(5);
    if(SendData&0x80)         //MSB在前
                        DS_SDA1;
    else
                        DS_SDA0;
    DS_SCL1;
    delay_us(2);
    DS_SCL0;
    SendData<<=1;
  }

  //delay_us(5);
  //DS_SDA1;
//delay_us(5);
  //DS_SDA_IN;
}

//------------iic接收-----------
u8 iic_ReceiveByte(void)
{
   u8 i,temp=0;
   delay_us(5);
  DS_SDA1;
  delay_us(5);
  for(i=0;i<8;i++)
  {
                temp<<=1;
    DS_SCL0;
    delay_us(5);
    DS_SCL1;
    delay_us(2);
    temp=DS_SDA_BIT;
    if(temp==0x80)
                        temp=temp|0x01;
    else
                        temp=temp&0xFE;
  }
  DS_SCL0;
  delay_us(2);
  return temp;
}
void iic_in()
{
  DS_SCL_OUT;

  DS_SDA_IN;
}

void iic_out()
{
  DS_SCL_OUT;
  DS_SDA_OUT;

  DS_SCL1;
  delay_us(5);
  DS_SDA1;
    delay_us(2);
}


回复

使用道具 举报

  离线 

1

主题

2

帖子

0

精华

新手上路

Rank: 1

积分
23
金钱
23
注册时间
2017-9-19
在线时间
2 小时
 楼主| 发表于 2017-9-19 22:42:03 | 显示全部楼层
回复

使用道具 举报

  在线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117164
金钱
117164
注册时间
2010-12-1
在线时间
899 小时
发表于 2017-9-20 00:40:38 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-21 01:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */