如何将I2C-EEPROM与8051单片机连接

术语I2C或IIC缩写是一个帧集成电路叫做I²C。i2c是一个串行计算机总线,它由先前的NXP半导体发明它被命名为飞利浦半导体。I2C总线用于将低速外围集成电路连接到微控制器和处理器。在2006年,实施I2C议定书,不需要许可费。但是,需要收费,以获取由NXP半导体分配的I2C从地址。

一些竞争对手,如德州仪器公司、西门子公司、NEC、摩托罗拉、Intersil和意法半导体公司,都在20世纪90年代中期宣布了非常适合I²C的产品。在1995年,SMBus被Intel定义,它是I²C的一个子组,声明协议更加严格。SMBus的主要目的是支持互操作性和健壮性。因此,当前的I²C系统包括来自SMBus的规则和策略,有时它同时支持I2C和SMBus,只需最少的重新配置。


I2C总线
I2C总线

具有8051微控制器的接口I2C BUS-EEPROM

什么是I2C总线

I2c总线采用SDA(串行数据线)和SCl(串行时钟线)两条双向开路漏极线,通过电阻器拉出。I2C总线允许主设备与从设备开始通信。数据在这两个设备之间交换。使用的典型电压是+3.3V或+5V,尽管系统允许有额外的电压。

I2C接口
I2C接口

eepm

2021欧洲杯足球竞猜官方平台电可擦可编程ROM(EEPROM)是一种用户可修改的ROM,可以通过高于正常电压频繁地移除和重新编程。2021欧洲杯足球竞猜官方平台EEPROM是一种用于电子设备中使用的非易失性存储器,如计算机存储少量数据,当断开电源时应保存。

8051年刮刀董事会

8051滑板是专门设计来帮助技术学生的领域嵌入式系统。这个套件的设计方式是这样的,所有的功能8051单片机将可能被学生使用。此前锋板支持通过串口完成的ISP(在系统编程中)。本套件和8051来自恩智浦,以平滑调试速度8位微控制器周围的许多设计的进展。

接口I2C - EEPROM

下图显示了具有8051微控制器的接口I2C-EEPROM。这里,I2C是一种主从协议,它包括数据以及时钟脉冲。通常,主设备切换时钟线SCL。此行订购了在I2C总线上传输的数据定时。无价运行时钟,不会传输数据。所有奴隶都由同一时钟SCL控制。


接口I2C  -  EEPROM
接口I2C - EEPROM

I2C总线支持各种设备无论它是一个LCD驱动程序,记忆卡,微控制器或接口的键盘它可以作为Tx或Rx,这取决于设备的功能。该控制器通过I2C协议对EEPROM器件进行控制。在这里,I2C协议作为一个主设备,控制EEPROM,它作为一个从设备。通过传输一组控制信号构成地址与/或数据总线,读写操作是熟练的。这些信号应配以适当的时钟信号

具有8051微控制器的接口I2C BUS-EEPROM

如果要在8051前锋板中使用I2C总线读取,写入和擦除EEPROM。I2总线 - EEPROM的接口8051微控制器非常简单。该接口的操作是发送一个类似WRITE的信号,然后是数据和地址总线。在此操作中,EEPROM用于存储数据。在8051套件中,两条EEPROM线由I2C支持的驱动程序进行调节。SCL和SDA与基于I2C的串行EEPROM集成电路相连。

具有8051微控制器的接口I2C BUS-EEPROM
具有8051微控制器的接口I2C BUS-EEPROM

利用SDA和SCL I2C线,在8051 Slicker Kit中完成EEPROM的读写操作

I2C的接口是如此的简单,并且在EEPROM中对每个单独的数据进行读写。延迟取决于编译器如何增强循环,一旦您对选择做出更改,延迟就会变化。

I2C接口的源代码

#include
#include
#include

#定义ACK 1
#define no_ack 0.

unsigned char i;
unsigned char edata [5];
无符号CHAR数据;
空隙initserial(空虚);
空白DelayMs (unsigned int);
空白WriteI2C (unsigned char);
void开始(空白);
空白停止(无效);
空白ReadBYTE (unsigned int);
void writebyte(无符号int);
unsigned char Readi2c(bit);

SBIT SCL = P2 ^ 0;//连接到SCL引脚(时钟)
SBIT SDA = P2 ^ 1;//连接到SDA引脚(数据)

//—————————————
//主计划
//—————————————
void main(空白)
{
Initserial();//初始化串口
putchar (0 x0c);//清除超级终端
DelayMs (5);
WriteByte(0x0000);
writei2c('a');//写下数据
writei2c('b');
writei2c('c');
WriteI2C (' D ');
WriteI2C(“E”);
WriteI2C (F);
停止();
DelayMs (10);

readbyte(0x0000);
EData [0] = ReadI2C (NO_ACK);
EData [1] = ReadI2C (NO_ACK);
eData [2] = Readi2c(no_ack);
EData [3] = ReadI2C (NO_ACK);
eData [4] = Readi2c(no_ack);
eData [5] = Readi2c(no_ack);

(我= 0;< 6;我+ +)
{
printf (" value = % c \ n ", EData[我]);//显示数据*/
延迟(100);
}

而(1);
}

//—————————————
//初始化串口
//—————————————
空白InitSerial(空白)
{
SCON = 0 x52;//设置串口控制
tmod = 0x20;//硬件(9600波特@ 11.0592MHz)
th1 = 0xFd;// th1.
tr1 = 1;//定时器1开
}

// ---------- -
//启动i2c.
// ---------- -
空白开始(空白)
{
SDA = 1;
sci = 1;
_nop _(); _ nop_();
SDA = 0;
_nop _(); _ nop_();
sci = 0;
_nop _(); _ nop_();
}

// ---------- -
/ /停止I2C
// ---------- -
无效停止(空白)
{
SDA = 0;
_nop _(); _ nop_();
sci = 1;
_nop _(); _ nop_();
SDA = 1;
}

// ---------- -
//写i2c.
// ---------- -
void WriteI2C(unsigned char Data)
{

for(i = 0; i <8; i ++)
{
SDA =(数据&0x80)?1:0;
sci = 1, sci = 0;
数据< < = 1;
}

sci = 1;
_nop _(); _ nop_();
sci = 0;

}

// ---------- -
//阅读I2C.
// ---------- -
未签名的char Readi2c(bit ack_bit)
{

开始();
Writei2c(0xA1);

SDA = 1;
for(i = 0; i <8; i ++)
{
sci = 1;
数据<< = 1;
数据=(数据| SDA);
sci = 0;
_nop_ ();
}

if (ACK_Bit == 1)
SDA = 0;/ /发送应答
别的
SDA = 1;//不发送ACK

_nop _(); _ nop_();
sci = 1;
_nop _(); _ nop_();
sci = 0;
停止();
返回数据;
}

// ---------- -
//读取1字节形式I2C
// ---------- -
void readbyte(无符号int addr)
{
开始();
Writei2c(0xA0);
WriteI2C ((unsigned char) (Addr > > 8) &0xFF);
WriteI2C ((unsigned char) Addr&0xFF);
}

// ---------- -
//向I2C写入1字节
// ---------- -
void WriteBYTE(无符号int Addr)
{
开始();
Writei2c(0xA0);
WriteI2C ((unsigned char) (Addr > > 8) &0xFF);//发送地址高
WriteI2C ((unsigned char) Addr&0xFF);//发送地址低
}

//—————————————
//延迟MS函数
//—————————————
void delayms(无符号int count)
{// msec延迟11.0592 MHz
unsigned int我;/ /凯尔v7.5a
而(计数)
{
我= 115;
虽然(我> 0)i -;
数数-;
}
}

因此,这就是关于I2C接口的实现。我们希望你们对这个概念有更好的理解。此外,任何关于此概念的查询或界面设备请通过评论下面的评论部分来提供宝贵的建议。

4评论

  1. Tejasantosh. 说:

    我需要执行NEC远程协议,请帮助我

  2. malleswary 说:

    先生
    我必须用微控制器接口这个四边形字母数字显示器,以显示一些消息或数量。请使用详细信息指南.0

  3. 普拉萨德 说:

    我们如何通过8051实现不同的波特率?

  4. 泰德 说:

    你好
    我有一个具有两个变量的发电机程序,我想知道如何实现你的程序我的意思是如何将这个程序组合在一起。你能帮我吗 ?
    问候
    泰德

添加评论