软件模拟I2C(基于Microchip 24LC16B的操作函数库)

本文是在STM8L15x系列的芯片上,使用软件模拟的I2C来实现对24LC16B进行操作的函数库。

头文件定义:

 #ifndef _24LC16B_H
#define _24LC16B_H

#include "Hal_I2CSoft.h"

#define MAXROM_24LC16B          (2048)

extern void Hal24LC16BInit(I2CSoftConfig_t* i2cCfg);
extern u8 Hal24LC16B_ReadByte(u16 addr);
extern void Hal24LC16B_WriteByte(u16 addr, u8 data);
extern void Hal24LC16B_ReadBuf(u16 addr, u8 *buf, u16 len);
extern void Hal24LC16B_WriteBuf(u16 addr, u8 *buf, u16 len);
extern void Hal24L68B_WritePage(u16 addr, u8 *buf);

 #endif

具体操作函数:

/**
  ******************************************************************************
  * @f文件        24LC16B.c
  * @作者         huangqi
  * @版本         V1.0.0
  * @日期         2014-12-20
  * @描述         Microchip 的24LC16B的操作函数库
  ******************************************************************************
  */


#include "Hal_I2CSoft.h"
#include "24LC16B.h"


I2CSoftConfig_t *i2cCfg;

/*****************************************************************************
 * @函数名      Hal24LC16BInit
 *
 * @功能   初始化24LC16B
 *
 * @参数   i2cCfg:  I2CSoft端口信息
 *
 * @返回值  无
 *****************************************************************************/
void Hal24LC16BInit(I2CSoftConfig_t* i2cPortConfig)
{
  i2cCfg = i2cPortConfig;
  I2CSoft_Init(i2cCfg);
}

/*****************************************************************************
 * @函数名      Hal24LC16B_ReadByte
 *
 * @功能   向24LC16B读一个字节
 *
 * @参数   addr:  地址
 *
 * @返回值  读出的字节
 *****************************************************************************/

u8 Hal24LC16B_ReadByte(u16 addr)
{
  u8 tmp = 0;
  do
  {
    I2CSoft_Start(i2cCfg);
    I2CSoft_SendByte(i2cCfg, 0xA0+((addr/256)<<1));//写命令
  }
  while(I2CSoft_WaitAck(i2cCfg));
  I2CSoft_SendByte(i2cCfg, addr%256);
  I2CSoft_WaitAck(i2cCfg);

  I2CSoft_Start(i2cCfg);
  I2CSoft_SendByte(i2cCfg, 0xA0+((addr/256)<<1)+1);//写命令
  I2CSoft_WaitAck(i2cCfg);
  tmp = I2CSoft_RecvByte(i2cCfg,0);
  I2CSoft_Stop(i2cCfg);
  return tmp;
}

/***********************************************************

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值