单片机高手们求解啊!!!
有关于AT24C02存储器的操作,C语言部分看不懂unsignedlongD[17]IRcvStr(AT24C02,0,&pDat[0],8);for(i=0;i<4;i...
有关于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];
以上是24C02main.c的程序
bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned 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);
}
以上是24C02.c的部分程序
这个带星号的*s 和 24C02main的看不懂啊 展开
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];
以上是24C02main.c的程序
bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned 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);
}
以上是24C02.c的部分程序
这个带星号的*s 和 24C02main的看不懂啊 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
【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]四个元素中。
【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]+PDat[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是啥,表达式含义,你应该知道吧?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询