• 芯片制造中的阻挡层沉积技术介绍
  • 接地搭接电缆布局屏蔽!!!
  • 北美液冷生态解码:超微spuermicro,24年营
  • SK海力士全球首发HBM4-16层堆叠、2.0TB/s
  • 2纳米Nanosheet技术及其以后的选择性层减薄

SHT30温湿度传感器单片机模拟I2C代码实现

[复制链接]
查看908 | 回复5 | 2020-9-2 17:12:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include "EW_iic.h"

void EW_IIC_Start(void )
{
  SDA_H;
  __delay_cycles(8); //1us
  SCL_H;
  __delay_cycles(8); //1us
  SDA_L;
  __delay_cycles(80); //10us
  SCL_L;
  __delay_cycles(80); //10us
}

void EW_IIC_Stop(void )
{
  SDA_L;
  __delay_cycles(8); //1us
  SCL_L;
  __delay_cycles(8); //1us
  SCL_H;
  __delay_cycles(80); //10us
  SDA_H;
  __delay_cycles(80); //10us
}

void EW_IIC_WriteByte(INT8U txbyte)
{
  INT8U mask;
  
  for(mask = 0x80; mask > 0; mask >>= 1)
  {
    if((mask & txbyte) == 0) SDA_L;
    else SDA_H;
    __delay_cycles(16); //2us
    SCL_H;
    __delay_cycles(16); //2us
    SCL_L;
    if(mask == 1)
    {
      SDA_InitInputF();
    }
  }
  __delay_cycles(16); //2us
  SCL_H;
  /*
  if(!SDA_READ)
  {
   LED_TOG;
  }
  */
  __delay_cycles(16); //2us
  SCL_L;
  __delay_cycles(16); //2us
  SDA_H;
  SDA_InitOutHigh();
}

void EW_IIC_ReadByte(INT8U *rxbyte, AckDef ack)
{
  INT8U mask;
  *rxbyte = 0x00;
  
  SCL_L;
  SDA_InitInputF();
  
  for(mask = 0x80; mask > 0; mask >>= 1)
  {  
    __delay_cycles(16);  
    SCL_H;
    if(SDA_READ) *rxbyte |= mask;
    __delay_cycles(16);
    SCL_L;
  }
  SDA_InitOutHigh();
  if(ack == ACK) SDA_L;
  else SDA_H;
  __delay_cycles(16);  
  SCL_H;   
  __delay_cycles(40);
  SCL_L;
  SDA_H;
  __delay_cycles(16);  
}
回复

使用道具 举报

longxuekai | 2020-9-3 05:51:42 | 显示全部楼层
回复

使用道具 举报

会飞的鱼589 | 2020-9-3 07:22:12 | 显示全部楼层
回复

使用道具 举报

wangy2000 | 2020-9-3 07:41:28 | 显示全部楼层
回复

使用道具 举报

刘七 | 2020-9-3 08:02:19 | 显示全部楼层
回复

使用道具 举报

郑先生 | 2020-9-3 08:18:28 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则