EEPROM芯片AT2402驱动

 1  /*************************此部分为AT2402的驱动程序使用I2C总线连接*************************************/
 2 
 3 #include<I2C.c>
 4 
 5 //AT2402的功能函数
 6 /*******************************************************************
 7                     向有子地址器件发送多字节数据函数               
 8 函数原型: bit  ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);  
 9 功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
10           地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
11           如果返回1表示操作成功,否则操作有误。
12 注意:    使用前必须已结束总线。
13 ********************************************************************/
14 bit ISendStr(unsigned char  sla,unsigned char  suba,unsigned char  *s,unsigned char  no)
15 {
16    unsigned char i;
17 
18    Start_I2c();               /*启动总线*/
19    SendByte(sla);             /*发送器件地址*/
20    if(ack==0)return(0);
21    SendByte(suba);            /*发送器件子地址*/
22    if(ack==0)return(0);
23 
24    for(i=0;i<no;i++)
25    {   
26      SendByte(*s);            /*发送数据*/
27      if(ack==0)return(0);
28      s++;
29    } 
30    Stop_I2c();                /*结束总线*/ 
31 
32    return(1);
33 }
34 
35 /*******************************************************************
36                     向有子地址器件读取多字节数据函数               
37 函数原型: bit  RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);  
38 功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
39           地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
40            如果返回1表示操作成功,否则操作有误。
41 注意:    使用前必须已结束总线。
42 ********************************************************************/
43 bit IRcvStr(unsigned char  sla,unsigned char  suba,unsigned char  *s,unsigned char  no)
44 {
45    unsigned char i;
46 
47    Start_I2c();                  /*启动总线*/
48    SendByte(sla);                /*发送器件地址*/
49    if(ack==0)return(0);
50    SendByte(suba);               /*发送器件子地址*/
51    if(ack==0)return(0);
52 
53    Start_I2c();                 /*重新启动总线*/
54    SendByte(sla+1);
55    if(ack==0)return(0);
56    for(i=0;i<no-1;i++)
57    {   
58      *s=RcvByte();               /*发送数据*/
59       Ack_I2c(0);                /*发送就答位*/  
60      s++;
61    } 
62    *s=RcvByte();
63    Ack_I2c(1);                   /*发送非应位*/
64    Stop_I2c();                   /*结束总线*/ 
65    return(1);
66 }
原文地址:https://www.cnblogs.com/sky1991/p/2573635.html