微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 EEPROM 24c02 I2C代码封装保存实现流水灯

51单片机 EEPROM 24c02 I2C代码封装保存实现流水灯

时间:11-19 来源:互联网 点击:
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC

>_<:i2c.c

1 /*--2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器4 周期,即晶振频率要小于12MHZ)5 */  6 #include "i2c.h"7 #define  _Nop()  _nop_()  //定义空指令8 bit ack;                  //应答标志位9 sbit SDA=P2^1;10 sbit SCL=P2^0;11 /*12 uS延时函数,含有输入参数 unsigned char t,无返回值13 unsigned char 是定义无符号字符变量,其值的范围是14 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时15 长度如下 T=tx2+5 uS 16 */17 void DelayUs2x(unsigned char t)18 {   19     while(--t);20 }21 /*22 mS延时函数,含有输入参数 unsigned char t,无返回值23 unsigned char 是定义无符号字符变量,其值的范围是24 0~255 这里使用晶振12M,精确延时请使用汇编25 */26 void DelayMs(unsigned char t)27 {28     while(t--)29     {30         //大致延时1mS31         DelayUs2x(245);32         DelayUs2x(245);33     }34 }35 /*36 启动总线37 */38 void Start_I2c()39 {40     SDA=1;   //发送起始条件的数据信号41     _Nop();42     SCL=1;43     _Nop();    //起始条件建立时间大于4.7us,延时44     _Nop();45     _Nop();46     _Nop();47     _Nop();    48     SDA=0;     //发送起始信号49     _Nop();    //起始条件锁定时间大于4μ50     _Nop();51     _Nop();52     _Nop();53     _Nop();       54     SCL=0;    //钳住I2C总线,准备发送或接收数据55     _Nop();56     _Nop();57 }58 /*59 结束总线60 */61 void Stop_I2c()62 {63     SDA=0;    //发送结束条件的数据信号64     _Nop();   //发送结束条件的时钟信号65     SCL=1;    //结束条件建立时间大于4μ66     _Nop();67     _Nop();68     _Nop();69     _Nop();70     _Nop();71     SDA=1;    //发送I2C总线结束信号72     _Nop();73     _Nop();74     _Nop();75     _Nop();76 }77 /*-78 字节数据传送函数               79 函数原型: void  SendByte(unsigned char c);80 功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对81 此状态位进行操作.(不应答或非应答都使ack=0 假)     82 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。83 */84 void  SendByte(unsigned char c)85 {86     unsigned char BitCnt;87     for(BitCnt=0;BitCnt<8;BitCnt++)  //要传送的数据长度为8位88     {89         if((c

>_<:i2c.h

1 /*--2   名称:IIC协议 头文件3 */  4 #ifndef __I2C_H__5 #define __I2C_H__           6 #include           //头文件的包含7 #include 8 #define  _Nop()  _nop_()        //定义空指令9 /*--10  uS延时函数,含有输入参数 unsigned char t,无返回值11  unsigned char 是定义无符号字符变量,其值的范围是12  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时13  长度如下 T=tx2+5 uS 14 */15 void DelayUs2x(unsigned char t);16 /*17  mS延时函数,含有输入参数 unsigned char t,无返回值18  unsigned char 是定义无符号字符变量,其值的范围是19  0~255 这里使用晶振12M,精确延时请使用汇编20 */21 void DelayMs(unsigned char t);22 /*23                     启动总线24 */25 void Start_I2c();26 /*27                     结束总线28 */29 void Stop_I2c();30 /*-31                  字节数据传送函数               32 函数原型: void  SendByte(unsigned char c);33 功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对34      此状态位进行操作.(不应答或非应答都使ack=0 假)     35      发送数据正常,ack=1; ack=0表示被控器无应答或损坏。36 */37 void  SendByte(unsigned char c);38 /*-39                  字节数据传送函数               40 函数原型: unsigned char  RcvByte();41 功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),42      发完后请用应答函数。  43 */    44 unsigned char  RcvByte();45 /*-46                      应答子函数47 原型:  void Ack_I2c(void);48 -*/49 void Ack_I2c(void);50 /*-51                      非应答子函数52 原型:  void NoAck_I2c(void);53 -*/54 void NoAck_I2c(void);55 /*-56                     向无子地址器件发送字节数据函数               57 函数原型: bit  ISendByte(unsigned char sla,ucahr c);  58 功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.59            如果返回1表示操作成功,否则操作有误。60 注意:    使用前必须已结束总线。61 -*/62 bit ISendByte(unsigned char sla,unsigned char c);63 64 /*-65                     向有子地址器件发送多字节数据函数               66 函数原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  67 功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件68           地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。69            如果返回1表示操作成功,否则操作有误。70 注意:    使用前必须已结束总线。71 -*/72 bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);73 /*-74                     向无子地址器件读字节数据函数               75 函数原型: bit  IRcvByte(unsigned char sla,ucahr *c);  76 功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地77           址sla,返回值在c.78            如果返回1表示操作成功,否则操作有误。79 注意:    使用前必须已结束总线。80 -*/81 bit IRcvByte(unsigned char sla,unsigned char *c);82 /*-83                     向有子地址器件读取多字节数据函数               84 函数原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  85 功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件86           地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。87            如果返回1表示操作成功,否则操作有误。88 注意:    使用前必须已结束总线。89 -*/90 bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);91 #endif

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top