iic通信和晶振频率24c02的地址都有关系,错一点都可能导致通信失败。
分享一下自用的驱动程序,仅供参考。
晶振12MHz或者11.0592MHz,24c02的3个地址全接地。
at24c02.c
at24c02.h
- #ifndef __AT24C02_H__
- #define __AT24C02_H__
- #include<reg52.h>
- sbit SCL1=P2^1;
- sbit SDA1=P2^0;
- void Start(void);
- void Stop(void);
- bit Check_Ack(void);
- void Ack(void);
- void NoAck(void);
- void Send_Byte(unsigned char dat);
- unsigned char Receive_Byte(void);
- void At24c02_RW(unsigned char addr,unsigned char *dat,unsigned char length,bit RW);
- #endif
复制代码
delay.c
- #include "delay.h"
- /*******************************************************************************
- * 函 数 名 : Delay_Us()
- * 函数功能 : 延时1us
- * 输 入 : i
- * 输 出 : 无
- *******************************************************************************/
- void Delay_Us(int i)
- {
- while(i--);
- }
- /*******************************************************************************
- * 函 数 名 : Delay_Ms()
- * 函数功能 : 延时1Ms
- * 输 入 : m
- * 输 出 : 无
- *******************************************************************************/
- void Delay_Ms(int m)
- {
- while(m--)
- {
- Delay_Us(125);
- }
- }
复制代码 |