• 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 }
  • 相关阅读:
    OpenCV 创建Mat图像
    OpenCV Mat数据类型及位数总结
    OpenCV 使用at和ptr指针访问像素的区别
    OpenCV 16位深度图片显示并保存
    PyCharm 安装教程(Windows)
    Qt 安装图解(Windows平台)
    Qt 下载(多种下载通道+所有版本)
    QtCreator怎样编辑运行Python脚本
    Python 怎么运行代码
    Qt for Python 怎样搭建开发环境
  • 原文地址:https://www.cnblogs.com/sky1991/p/2573635.html
Copyright © 2020-2023  润新知