编程器提取eeprom_【图片】闲着无聊,给新手们来个24Cxxx系列EEPROM复制/烧写器。【单片机吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我来传一下我的I2C 24CXX的控制器的代码

看看有没有什么要改的地方

#include

#include

#define AT24C02_WriteDeviceAddress 0xa0

#define AT24C02_ReadDeviceAddress 0xa1

sbit SCL=P1^0;

sbit SDA=P1^1;

unsigned int addr=0;

void Delay()

{

unsigned char i, j;

_nop_();

i = 2;

j = 199;

do

{

while (--j);

} while (--i);

}

void Start()

{

SDA=1;

Delay();

SCL=1;

Delay();

SDA=0;

Delay();

SCL=0;

Delay();

}

void Stop()

{

SCL=0;

SDA=0;

Delay();

SCL=1;

Delay();

SDA=1;

Delay();

}

void Ack()

{

SDA=0;

Delay();

SCL=1;

Delay();

SCL=0;

Delay();

SDA=1;

Delay();

}

void NoAck()

{

SDA=1;

Delay();

SCL=1;

Delay();

SCL=0;

Delay();

}

bit TestAck()

{

bit ErrorBit;

SDA=1;

Delay();

SCL=1;

Delay();

ErrorBit=SDA;

Delay();

SCL=0;

Delay();

return (ErrorBit);

}

bit Write8Bit(unsigned char input)

{

unsigned char temp;

for(temp=8;temp!=0;temp--)

{

SDA=(bit)(input&0x80);

Delay();

SCL=1;

Delay();

SCL=0;

Delay();

input=input<<1;

}

return 1;

}

void WriteI2C(unsigned char *Wdata,unsigned char RomAddress,unsigned char number)

{

Start();

Write8Bit(AT24C02_WriteDeviceAddress);

TestAck();

Write8Bit(RomAddress);

TestAck();

for(;number!=0;number--)

{

Write8Bit(*Wdata);

TestAck();

Wdata++;

}

Stop();

Delay();

}

unsigned char Read8Bit()

{

unsigned char temp,rbyte=0;

for(temp=8;temp!=0;temp--)

{

SCL=1;

Delay();

rbyte=rbyte<<1;

Delay();

rbyte=rbyte|((unsigned char)(SDA));

SCL=0;

Delay();

}

return (rbyte);

}

void ReadI2C(unsigned char *Wdata,unsigned char RomAddress,unsigned char bytes)

{

Start();

Write8Bit(AT24C02_WriteDeviceAddress);

TestAck();

Write8Bit(RomAddress);

TestAck();

Start();

Write8Bit(AT24C02_ReadDeviceAddress);

TestAck();

while(bytes!=1)

{

*Wdata=Read8Bit();

Ack();

Wdata++;

bytes--;

}

*Wdata=Read8Bit();

NoAck();

Stop();

}

void Main(void)

{

unsigned char ch[]={0,0,0,0,0,0,0,0};

unsigned char i=0;

for(i=0;i<256;i++)

{

WriteI2C(ch,addr,8);

addr=addr+8;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值