• 大小: 4KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2023-02-07
  • 语言: C/C++
  • 标签: I2C  

资源简介

I2C软件模拟时序,独立文件,可以直接调用,移植性高,只需修改数据时钟线

资源截图

代码片段和文件信息

sbit	  SCL=P1^0;      //IIC时钟引脚定义
sbit    SDA=P1^1;      //IIC数据引脚定义
#define   uchar unsigned char
#define   uint unsigned int
#define SlaveAddress   0xA6   //定义器件在IIC总线中的从地址根据ALT  ADDRESS地址引脚不同修改
                              //ALT  ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef unsigned char  BYTE;
typedef unsigned short WORD;
void Delay5us()
{
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}

void Delay5ms()
{
    WORD n = 560;

    while (n--);
}
void I2C_Start()
{
    SDA = 1;                    //拉高数据线
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    SDA = 0;                    //产生下降沿
    Delay5us();                 //延时
    SCL = 0;                    //拉低时钟线
}
void I2C_Stop()
{
    SDA = 0;                    //拉低数据线
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    SDA = 1;                    //产生上升沿
    Delay5us();                 //延时
}
void I2C_SendACK(bit ack)
{
    SDA = ack;                  //写应答信号
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时
}
bit I2C_RecvACK()
{
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    CY = SDA;                   //读应答信号
    SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时

    return CY;
}
void I2C_SendByte(BYTE dat)
{
    BYTE i;

    for (i=0; i<8; i++)         //8位计数器
    {
        dat <<= 1;              //移出数据的最高位
        SDA = CY;               //送数据口
        SCL = 1;                //拉高时钟线
        Delay5us();             //延时
        SCL = 0;                //拉低时钟线
        Delay5us();             //延时
    }
    ADXL345_RecvACK();
}

BYTE I2C_RecvByte()
{
    BYTE i;
    BYTE dat = 0;

    SDA = 

评论

共有 条评论