如何使用8051微控制器接口I2C-EEPROM

术语I2C或IIC缩写是一个inter集成电路它被称为我平方C.I2C是一种串行计算机总线该产品由恩智浦半导体公司发明,之前被命名为飞利浦半导体。I2C总线用于连接低速外围集成电路微控制器和处理器。在2006年,实现I2C协议不需要任何许可费。但是获得NXP semiconductors分配的I2C从地址需要费用。

一些竞争对手,如德克萨斯乐器,西门子AG,NEC,摩托罗拉,Intersil和STMicroelics在20世纪90年代中期宣布了市场上适合的I²C产品。bob足球体育app在1995年,SMBus由英特尔定义,即I²C的子群,指出议定书更严格。SMBus的主要目的是支持互操作性和鲁棒性。因此,当前的I²C系统包括SMBus的规则和策略,有时它支持I2C和SMBus,重新配置最小。


I2C总线
I2C总线

接口I2C总线- eeprom与8051单片机

什么是i2c公共汽车

I2C总线使用两条双向开漏线,如SDA(串行数据线)和SCL(串行时钟线),并通过电阻拉动。I2C总线允许主设备开始与从设备通信。bob的是什么网站数据在这两个设备之间互换。典型的电压使用+ 3.3V或+ 5V,尽管允许具有额外电压的系统。

I2C接口
I2C接口

EEPROM.

电可擦除可编程ROM(EEPROM)是一种用户可修改的ROM,可以通过高于正常电压的应用程序频繁地删除和重新编程。EEPROM是一种非易失性存储器,用于像计算机这样的电子设备中,用来存储在电源断开时应保存的少量数据。

8051 SLICKER板

8051个光滑板专门设计用于帮助领域的技术学生嵌入式系统。这个套件是以这样的方式设计的8051微控制器将可能被学生使用。这个前锋板支持ISP(在系统编程),是通过串行端口完成的。该套件和来自NXP的8051是为了顺利调试围绕速度8位微控制器的许多设计。

接口I2C - EEPROM

下图显示了I2C-EEPROM与8051单片机的接口。在这里,I2C是一个主从协议,它包括数据和时钟脉冲。通常,主设备切换时钟线SCL。这条线对在I2C总线上传输的数据定时进行排序。除非时钟被操作,否则不会传输数据。所有的奴隶都由同一个时钟SCL控制。


接口I2C - EEPROM
接口I2C - EEPROM

I2C总线支持各种设备如果它是唯一地址是LCD驱动器,存储卡,微控制器或键盘的接口它可以作为Tx或Rx运行的操作取决于设备的功能。控制器旨在通过I2C协议控制EEPROM设备。这里,HE I2C协议用作主设备并调节EEPROM,它将其作为从属设备。通过传送包括地址和/或数据总线的一组控制信号,R / W操作熟练。应使用合适的时钟信号参加这些信号

接口I2C总线- eeprom与8051单片机

如果你想读,写和擦EEPROM使用I2C总线在8051前锋板。I2总线- eeprom与8051单片机很简单。该接口的操作是发送像写入的信号,然后发送数据和地址总线。在此操作中,EEPROM用于存储数据。在8051套件中,通过I2C支持的驱动程序调节两个EEPROM行。SCL和SDA连接到基于I2C的串行EEPROM IC。

接口I2C总线- eeprom与8051单片机
接口I2C总线- eeprom与8051单片机

通过使用SDA和SCL I2C线路,EEPROM的读写操作在8051 Slicker套件中完成

I2C的接口是如此简单,并且在EEPROM中的每一个数据读/写入。延迟取决于编译器,它在延迟变化的选择中更改时,它会如何增强循环。

I2C接口的源代码

# include < reg51.h >
# include < stdio . h >
# include < intrins.h >

#define ack 1
#定义NO_ACK 0

无符号字符我;
无符号字符EData [5];
无符号字符数据;
空白InitSerial(无效);
void delayms(无符号int);
void writei2c(无符号字符);
空白开始(无效);
无效停止(无效);
void简介(无符号int);
空白WriteBYTE (unsigned int);
无符号字符ReadI2C(位);

sbit SCL = P2^0;//连接SCL引脚(时钟)
sbit SDA = P2^1;//连接到SDA引脚(Data)

// -------------
/ /主程序
// -------------
void main(空白)
{
InitSerial ();//初始化串口
PUTCHAR(0x0C);//清除超级终端
延迟(5);
WriteBYTE (0 x0000);
WriteI2C (' A ');/ /写数据
WriteI2C (B);
WriteI2C (' C ');
writei2c('d');
writei2c('e');
writei2c('f');
停止();
延迟(10);

ReadBYTE (0 x0000);
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);

for(i = 0; i <6; i ++)
{
printf(“值=%c \ n”,eData [i]);//显示数据* /
DelayMs (100);
}

(1);
}

// -------------
//初始化串口
// -------------
空隙initserial(空白)
{
scon = 0x52;//设置串行端口控制
TMOD = 0 x20;//硬件(9600波特@11.0592MHZ)
TH1 = 0 xfd;/ / TH1
TR1 = 1;//定时器1开启
}

//——————————-
/ /开始I2C
//——————————-
void开始(空白)
{
SDA = 1;
scl = 1;
_nop_ (); _nop_ ();
SDA = 0;
_nop_ (); _nop_ ();
scl = 0;
_nop_ (); _nop_ ();
}

//——————————-
//停止i2c.
//——————————-
void stop(空白)
{
SDA = 0;
_nop_ (); _nop_ ();
scl = 1;
_nop_ (); _nop_ ();
SDA = 1;
}

//——————————-
/ /写I2C
//——————————-
void writei2c(无符号char数据)
{

(我= 0;< 8;我+ +)
{
SDA = (Data & 0x80) ?1:0;
scl = 1; scl = 0;
数据<< = 1;
}

scl = 1;
_nop_ (); _nop_ ();
scl = 0;

}

//——————————-
/ /读I2C
//——————————-
unsigned char ReadI2C(bit ACK_Bit)
{

开始();
WriteI2C (0 xa1);

SDA = 1;
(我= 0;< 8;我+ +)
{
scl = 1;
数据< < = 1;
数据=(数据| SDA);
scl = 0;
_nop_();
}

if(ack_bit == 1)
SDA = 0;//发送ACK.
其他的
SDA = 1;//发送没有ack

_nop_ (); _nop_ ();
scl = 1;
_nop_ (); _nop_ ();
scl = 0;
停止();
返回数据;
}

//——————————-
//从I2C读取1字节
//——————————-
void ReadBYTE(无符号int Addr)
{
开始();
WriteI2C (0 xa0);
WriteI2C ((unsigned char) (Addr > > 8) &0xFF);
WriteI2C ((unsigned char) Addr&0xFF);
}

//——————————-
//将1字节写入i2c
//——————————-
void writebyte(无符号int addr)
{
开始();
WriteI2C (0 xa0);
WriteI2C ((unsigned char) (Addr > > 8) &0xFF);//发送地址高
WriteI2C ((unsigned char) Addr&0xFF);//发送地址低
}

// -------------
// Delay mS功能
// -------------
void DelayMs(unsigned int count)
{// mSec延迟11.0592 Mhz
unsigned int i;// keil v7.5a.
而(计数)
{
我= 115;
虽然(i> 0)i-;
数-;
}
}

因此,这一切都是关于I2C接口的实现。我们希望您对这一概念更好地了解。此外,关于这个概念或的任何疑问接口设备请在下面的评论部分给出你宝贵的建议。

4评论

  1. TejaSantosh 说:

    我需要实施NEC远程协议,请帮助我

  2. Malleswary. 说:

    先生
    我必须接口这个四字母数字显示与微控制器显示一些消息或数字最初。您能给我讲讲细节吗

  3. 普拉萨德 说:

    如何实现不同的波特率与8051?

  4. 泰德 说:

    你好
    我有一个有两个变量的生成器程序,我想知道如何实现你的程序,我的意思是如何把这个程序结合在一起。你能帮忙吗?
    问候
    泰德

添加评论