新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2012-11-8
- 在线时间
- 0 小时
|
在一块测试板上做实验,用的是从网上找的代码,有的是从STC公司上下载的,但是,在操作24C16的时候出错了,如果是一个字节,一个字节的写,不会出错,但是,如果是写一串的数据,就会出现各种问题,下面是部分代码
int xdata tempnum=100;
char i;
char xdata tempdata[10];
for(i=0;i<=10;i++)
{
tempnum=tempnum+1;
write_24c02(tempnum,'0');
Delay_ms(10);
}
void write_24c02(unsigned char addr,unsigned char dete) reentrant
{
start();
write_int_rs(0xa0);
get_ack_rs();
write_int_rs(addr);
get_ack_rs();
write_int_rs(dete);
get_ack_rs();
stop();
delay_iir(55);
delay_iir(55);
}
下面是写入一页数据
char xdata tempdata[10];
strcpy(tempdata,"");
AT24C04_WritePage(tempdata,0,10);
void AT24C04_WritePage(unsigned char getdata[],int getaddr,unsigned char getlen) reentrant
{
BYTE i;
AT24C04_Start(); //起始信号
AT24C04_SendByte(0xa0); //发送设备地址+写信号
AT24C04_SendByte(getaddr); //发送存储单元地址
for (i=0; i<getlen; i++)
{
AT24C04_SendByte(getdata);
}
AT24C04_Stop(); //停止信号
}
void AT24C04_SendByte(BYTE dat)
{
BYTE i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
SDA = CY; //送数据口
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
AT24C04_RecvACK();
}
|
|