您现在的位置: 主页 > MCU > 单片机技术应用 > 51proteus仿真:I2c总线和EEPROM2404的读写 -
本文所属标签:
为本文创立个标签吧:

51proteus仿真:I2c总线和EEPROM2404的读写 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]仿真电路图:仿真程序:#include#include#define uchar unsigned char#define uint unsigned intsbit SCL=P1^0;sbit SDA=P1^1;void delay(void){_nop_();_nop_();_nop_();_nop_();}void InitI2C(void){ SDA = 1; SCL

仿真电路图:

本文引用地址: http://www.21ic.com/app/mcu/201808/783001.htm

仿真程序:

#include
#include

#define uchar unsigned char
#define uint unsigned int

sbit SCL=P1^0;
sbit SDA=P1^1;

void delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();

}

void InitI2C(void)
{
SDA = 1;
SCL = 1;
}

void I2CStart(void)
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
SCL=0;
}

void I2CStop(void)
{
SCL=0;
delay();
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();


}


void I2CSend(uchar byte)
{
uchar mask;
uchar i,j;

mask=0x80;

for(i=0;i<8;i++)
{
SCL=0;
delay();
if((mask & byte)==0)
{
SDA=0;
}
else
{
SDA=1;
}
mask>>=1;
delay();
SCL=1;
delay();

}
SCL=0;
SDA=1;
delay();
SCL=1;
j=SDA;
delay();
SCL=0;

}

void write_eeprom(uchar addr, uchar databyte)
{
I2CStart();
I2CSend(0xa0);
I2CSend(addr);
I2CSend(databyte);
I2CStop();
}

uchar I2CRead(void)
{
uchar byte;
uchar i;

byte = 0;
for(i = 0; i < 8; i++)
{
SCL = 0;
SDA = 1;
delay();
SCL = 1;
delay();
byte <<= 1;
if(SDA == 1)
{
byte |= 0x01;
}
delay();
}
SCL = 0;
SDA = 1;
delay();
SCL = 1;
delay();
SCL = 0;

return byte;

}

uchar read_eeprom(uchar addr)
{
uchar databyte;

I2CStart();
I2CSend(0xa0);
I2CSend(addr);
I2CStart();
I2CSend(0xa1);
databyte = I2CRead();
I2CStop();

return databyte;

}

main()
{
uchar addr=0x00,databyte=0xaa;
uchar c=0;
uint i;

InitI2C();

while(1)
{

write_eeprom(addr,databyte);
for(i = 0; i < 1000; i++)
{
delay();
}

c = read_eeprom(addr);

P2=c;


}


}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > 51proteus仿真:I2c总线和EEPROM2404的读写 -
 

"51proteus仿真:I2c总线和EEPROM2404的读写 -"的相关文章

网站地图

围观()