单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(c源代码)
/* 51系列单片机在使用时,有时需要模拟I2C总线, */
/* 这里举出一个实例(读写串行EEPROM芯片at2402) */
/************************************************************************/
/* Name:AT24C02存储器的读写程序,用到I2C总线,含相对独立的I2C总线读写函数 */
/* Language: C51单片机编程语言 */
/* Platform: Win98,Intel Celeron 433 Processor,伟福仿真器,仿真8751 */
/* Author: StephenZhu javasdk@163.com */
/* Date: 2003年5月21日,5月22日,5月29日 */
/* Version: 1.1.1 */
/* Others: None */
/************************************************************************/
#include
#include
#include
#define DELAY_TIME 60 /*经实验,不要小于50!否则可能造成时序混乱*/
#define TRUE 1
#define FALSE 0
sbit SCL=P1^7;/*假设由P1.7和P1.6控制*/
sbit SDA=P1^6;
/********** Function Definition函数定义 ************/
void DELAY(unsigned int t) /*延时函数*/
{
while(t!=0)
t--;
}
void I2C_Start(void)
{
/*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);
SDA=0;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
void I2C_Stop(void)
{
/*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
SDA=0;
SCL=1;
DELAY(DELAY_TIME);
SDA=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
void SEND_0(void) /* SEND ACK */
{
/*发送0,在SCL为高电平时使SDA信号为低*/
SDA=0;
SCL=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
void SEND_1(void)
{
/*发送1,在SCL为高电平时使SDA信号为高*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}
bit Check_AcknowLEDge(void)
{
/*发送完一个字节后检验设备的应答信号*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME/2);
F0=SDA;
DELAY(DELAY_TIME/2);
SCL=0;
DELAY(DELAY_TIME);
if(F0==1)
return FALSE;
return TRUE;
}
void WriteI2CByte(char b)reentrant
{
/*向I2C总线写一个字节*/
char i;
for(i=0;i<8;i++)
if((b< SEND_1();
else
SEND_0();
}
char ReadI2CByte(void)reentrant
{
/*从I2C总线读一个字节*/
char b=0,i;
for(i=0;i<8;i++)
{
SDA=1; /*释放总线*/
SCL=1; /*接受数据*/
DELAY(10);
F0=SDA;
DELAY(10);
SCL=0;
if(F0==1)
{
b=b<<1;
b=b|0x01;
}
else
b=b<<1;
}
return b;
}
上一篇:51单片机的启动文件内容
下一篇:基于AT89S52单片机实现激光雷达门控控制系统的软硬件设计
推荐阅读最新更新时间:2024-11-02 18:04
设计资源 培训 开发板 精华推荐
- 51单片机stc15w学习板驱动ACDC及PC817隔离输入
- C5137699_TP5400移动电源芯片方案验证板
- IP5306 充电电路
- LTC3421 的典型应用 - 具有输出断开连接的 3A、3MHz 微功率同步升压转换器
- LT8331IMSE 10V 至 48V 输入、240V 升压转换器的典型应用电路
- ADR423 超精密、低噪声、3.00 Vout XFET 电压基准的典型应用
- LT1086CT-12 受保护大电流灯驱动器的典型应用
- 【训练营】立创EDA—悬浮云小夜灯-680014A
- AP2120 高速、极低噪声 LDO 稳压器的典型应用
- LD29150DT25R 1.5A超低压降稳压器典型应用电路
- 下载有好礼!TE 户外监控,创建安全稳定社会的重要保障和趋势之选!
- Microchip 有奖直播|如何构建车载充电器
- 逆袭新机会!来EEWorld 下载中心,做任务赚200积分,轻松实现积分自由
- TI 处理器主题月:三场直播精彩这个八月!报名且看直播就能得好礼!更有提问奖相送!
- 【已结束】R&S 直播【PCI Express Gen 3 一致性测试(含demo演示)】
- 有奖直播:ams投影照明(MLA)增强汽车与道路的沟通
- 有奖直播|MPS电感解决方案,助力更好的开关电源设计
- 帮忙他人,成就自我——EEWORLD问答榜(10期)
- ADI•世健工业嘉年华——工业趴主题征文及投票活动!
- 助力初创公司~21种Maxim评估板来了!免费领取进行中!