| 本帖最后由 XIANSir 于 2011-4-23 21:22 编辑 
 部分代码:
 
 /******************************************************************************************************************************************
 * 函数名称: DS13GetX()
 * 功能说明: 从DS1307地址addr开始获取size个字节的数据,获取的数据存储在全局变量Buff中,分别为addr->Buff[0] addr+1->Buff[1] ...
 * 输    入: ui08 addr   获取数据从addr开始,即从DS1302的地址addr处获取第一个要获取的数据
 *                       ui08 size       要获取的数据个数,不能等于0
 * 输    出: ui08                RET_OK 成功从DS1307获取数据                     RET_ERR 从DS1307获取数据过程中出现错误
 * 注意事项: 1、获取的数据存储在全局变量Buff中,分别为addr->Buff[0] addr+1->Buff[1] ...
 *                       2、调用函数时给size赋值0会导致函数返回RET_ERR
 ******************************************************************************************************************************************/
 ui08 DS13GetX(ui08 addr,ui08 size)
 {
 ui08 i = 0;
 
 if(addr+size > 64)                              //要访问的所有数据的地址都不能大于63
 {
 return RET_ERR;
 }
 if((size > 8) || (size == 0))   //size不能超过Buff[]的容量,且size为0无意义
 {
 return RET_ERR;
 }
 
 /* 这里的写操作实际是一个伪写操作,作用是设置下面的读数据的起始地址 */
 iic_genS();                                             //产生起始信号
 iic_send(DS1307_ADDR|0);                //发送DS1307芯片地址及读写位,0表示写
 if(ACK_NO == iicIsAck())                //检测DS1307是否有响应
 {
 iic_genP();                                     //产生停止信号
 return RET_ERR;
 }
 iic_send(addr);                                 //发送读取数据的起始地址
 if(ACK_NO == iicIsAck())                //检测DS1307是否有响应
 {
 iic_genP();                                     //产生停止信号
 return RET_ERR;
 }
 
 iicgenSr();                                             //产生Repeated Start
 iic_send(DS1307_ADDR|1);                //发送DS1307芯片地址及读写位,1表示读
 if(ACK_NO == iicIsAck())                //检测DS1307是否有响应
 {
 iic_genP();                                     //产生停止信号
 return RET_ERR;
 }
 
 for(i=0;size>0;i++,size--)              //从addr处读取size个字节的数据
 {
 Buff = iic_reci();
 iicDoAck();
 }
 
 iic_reci();                                             //DS1307要求必须使用NOAck来结束数据读取
 iicNoAck();                                             //DS1307要求必须使用NOAck来结束数据读取
 
 iic_genP();                                             //产生停止信号
 return RET_OK;
 }
 
 /******************************************************************************************************************************************
 * 函数名称:     DS13SetX()
 * 功能说明: 向DS1307地址addr开始写入size个字节的数据,将要写入的数据存储在全局变量Buff中,分别为Buff[0]->addr Buff[1]->addr+1 ...
 * 输    入: ui08 addr   数据被写入从addr开始的地址处,即向DS1302的地址addr处写入第一个要设置的数据
 *                       ui08 size       要设置的数据个数,不能等于0
 * 输    出: ui08                RET_OK 成功向DS1307设置数据                     RET_ERR 向DS1307设置数据过程中出现错误
 * 注意事项: 1、将要写入的数据存储在全局变量Buff中,分别为Buff[0]->addr Buff[1]->addr+1 ...
 *                       2、调用函数时给size赋值0会导致函数返回RET_ERR
 ******************************************************************************************************************************************/
 ui08 DS13SetX(ui08 addr,ui08 size)
 {
 ui08 i = 0;
 
 if(addr+size > 64)                              //要访问的所有数据的地址都不能大于63
 {
 return RET_ERR;
 }
 if((size > 8) || (size == 0))   //size不能超过Buff[]的容量,且size为0无意义
 {
 return RET_ERR;
 }
 
 iic_genS();                                             //产生起始信号
 iic_send(DS1307_ADDR|0);                //发送DS1307芯片地址及读写位,0表示写
 if(ACK_NO == iicIsAck())                //检测DS1307是否有响应
 {
 iic_genP();                                     //产生停止信号
 return RET_ERR;
 }
 
 iic_send(addr);                                 //发送数据要写入的地址
 if(ACK_NO == iicIsAck())                //检测DS1307是否有响应
 {
 iic_genP();                                     //产生停止信号
 return RET_ERR;
 }
 
 for(i=0;size>0;i++,size--)
 {
 iic_send(Buff);
 if(ACK_NO == iicIsAck())        //检测DS1307是否有响应
 {
 iic_genP();                             //产生停止信号
 return RET_ERR;
 }
 }
 
 iic_genP();                                             //产生停止信号
 return RET_OK;
 }
 |