以下为向AT24C02写入数据的函数,其中unit类型为unsigned int,uchar类型为unsigned char, firstw_ad为要写入的AT24C02单元首地址,*firstr_ad为被写入数据的首地址指针,counter为要写入数据字节数。
bit write_8bit(uchar ch) //写一个字节
{
uchar i=8;
bit fan_w;
SCL=0;_nop_();
while(i--)
{
SDA=(bit)(ch&0x80);
_nop_();
ch<<=1;
SCL=1; _nop_();
SCL=0; _nop_();
}
SDA=1; _nop_();
SCL=1; _nop_();
fan_w=SDA;
SCL=0; _nop_();
return(fan_w);
}
uchar page_write(uint firstw_ad,unit counter,uchar *firstr_ad)
{
uchar data *ufirstr_ad;
ufirstr_ad=firstr_ad;
start_bit();
if(write_8bit(0xA0)!=0) {stop_bit();return(0);} //写入写命令
if(write_8bit(firstw_ad)!=0) {stop_bit();return(0);} //写入要写入数据的首地址
while(counter--)
{
if(write_8bit(*ufirstr_d)!=0) {stop_bit();return(0);}
ufirstr_ad++;
}
stop_bit();
return(1);
}
1)不明白向AT24C02写入数据的过程,单片机向数据线写入写命令、指定AT24C02接受数据的首地址后再向SDA上写数据AT24C02就会自动接收。
2)
uchar data *ufirstr_ad;
ufirstr_ad=firstr_ad;
为什么要再定义一个指针函数,直接用*firstr_ad不行吗 |