uchar 肯定不能大于255,大于255,有可能丢弃高8位或丢失低8位,分大端模式或小端模式 如果想把数据写入到第2000个字节地址时候,不可以把address直接写为2000,要分高8位和低8位
低8位就是 address write_I2C_byte(address);
高8 位就是你的下面语句的a0或a1
write_I2C_byte(0xa0);
但真正高8位=器件地址(1010 占高4位)十 要写入的地址高8位(3位有效,占D3D2D1 )+读写命令位(D0位)
高8位 低8位分离如下:
uint address;
uchar addressL,addressH
addressL=address%256; 有时可省去这一步,高8位自动丢弃
addressH=0XA0|(address>>8)|com 读命令com=1 写命令 com=0
我试验过的子程序,有点拖沓
////////从24c16的地址address中读取一个字节数据/////
unsigned char x24c16_read(uint address)
{
uchar i;
uchar addr_h,addr_h1,addr_l;
addr_h=address/256;
addr_h1=addr_h*2;
addr_l=address%256;
start();
writex(0xa0+addr_h1);
clock(); writex(addr_l);
clock(); start();
writex((0xa1+addr_h1)); clock();
i=readx(); stop();
delay1(10);
return(i);
}