有关于 AT24C02 存储器的操作, C语言部分看不懂 unsigned long D[17] IRcvStr(AT24C02, 0, &pDat[0], 8); for (i=0; i<4; i++) { D[14+i]=pDat[i*2+0]+pDat[i*2+1]*0x100; Count1 = D[14]; 以上是 的程序 bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,uns igned char no) { unsigned char i; Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack==0)return(0); SendByte(suba); /*发送器件子地址*/ if(ack==0)return(0); Start_I2c(); /*重新启动总线*/ SendByte(sla+1); if(ack==0)return(0); for(i=0;i<no-1;i++) { *s=RcvByte(); /*发送数据*/ Ack_I2c(0); /*发送就答位*/ s++; } *s=RcvByte(); Ack_I2c(1); /*发送非应位*/ Stop_I2c(); /*结束总线*/ return(1); }以上是 的部分程序这个带星号的*s和 24C02main 的看不懂啊分享到: 2013-04-23 21:03 提问者采纳【 1】*s是指针 s所指向的内容。 s++ 将改变地址,指向下一个字节存放地址。【 2】主程序中, pDat 数组的地址是实参。子程序中 s是形参。主程序调用 IRcvStr(AT24C02, 0, &pDat[0], 8)函数,就是从地址为"AT24C02 "(IIC 器件地址宏名)的 24C02 芯片中,从 0起始地址连续读取 8个字节内容,送到数组 pDat[] 中。调用子程序时刻, s就是 pDat[] 的首地址。在子程序里面, *s=RcvByte(); ... s++; 实际的情况,可以这样理解: pDat[x]=RcvByte(); ... x++; 【 3】主程序中将 pDat[] 连续的每两个字节,低地址在低 8位,转换成 1个整形字。数组 pDat 的前 8个字节,共 4次转换,并把他们存放到数组 D[14] 、 D[15] 、 D[16] 、 D[17] 四个元素中。追问我不明白的是&PDAT[0], 只有0个元素怎么读取啊? D[14]=PDat[i*2]+PD at[i*2+1]*100 怎么理解。就是这些数组把我晕了回答【1】&PDAT[0] 表示数组的首地址。传递的并不是数组本身,而是数组的首地址。【2】 D[14+i]=PDat[i*2]+PDat[i*2+1]*100 你把 i=0 …… i=3 代进去看,如下。再理解。 D[14]=PDat[0]+PDat[1]*0x100; D[15]=PDat[2]+PDat[3]*0x100; D[16]=PDat[4]+PDat[5]*0x100; D[17]=PDat[6]+PDat[7]*0x100; 0x100 是啥,表达式含义,你应该知道
AT24C02程序 来自淘豆网m.daumloan.com转载请标明出处.