i2c.c
来自「这是用W77E58编写的控制GSM模块」· C语言 代码 · 共 113 行
C
113 行
/* YuanGao electronic designe co.ldt
(c) Copyright 2000,2001, All Rights Reserved */
#include "global.h"
#include "util.h"
#include "i2c.h"
void I2C_Init(void)
{
I2C_SCL = 1;
I2C_SDA = 1;
i2c_delay();
I2C_SCL = 0;
I2C_SDA = 0;
I2C_SDA = 0;
I2C_SCL = 1;
I2C_SDA = 1;
i2c_delay();
i2c_delay();
I2C_SCL = 0;
I2C_SDA = 0;
i2c_delay();
I2C_SDA = 0;
I2C_SCL = 1;
I2C_SDA = 1;
}
bit I2C_Clock(void)
{
bit bdata sample;
I2C_SCL = 1;
i2c_delay();
sample = I2C_SDA;
I2C_SCL = 0;
return(sample);
}
void I2C_Start(void)
{
I2C_SCL = 1;
I2C_SDA = 1;
I2C_SDA = 0;
i2c_delay();
I2C_SCL = 0;
i2c_delay();
}
void I2C_Stop(void)
{
I2C_SDA = 0;
i2c_delay();
I2C_SCL = 1;
i2c_delay();
I2C_SDA = 1;
}
bit I2C_Send(unsigned char I2C_Data)
{
unsigned char i;
/*send 8 bits data*/
for(i = 0;i<8;i++){
I2C_SDA =(bit)(I2C_Data & 0x80);
I2C_Data = I2C_Data << 1;
I2C_Clock();
}
/*ask ack:*/
I2C_SDA = 1;
return(~I2C_Clock());
}
void write_i2c(unsigned char I2C_ADDR,unsigned char I2C_DATA)
{
I2C_Start();
I2C_Send(I2C_ADDR);
I2C_Send(I2C_DATA);
I2C_Stop();
}
void i2c_delay(void)
{
char i;
for(i=0;i<2;i++);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?