Chinese English 切换到窄版

 找回密码
 立即注册
搜索
查看: 1069|回复: 0

外挂EEPROM,IIC通讯参考代码

[复制链接]

主题

0

回帖

0

积分

版主

积分
0
发表于 2025-2-13 09:17:12 | 显示全部楼层 |阅读模式

#include "MDT10F272.h"
#include "typedef.h"
#include "common.h"


#define        EEPROM_VCC                PC3               
#define        EEPROM_SCL                PC6       
#define        EEPROM_SDA                PC7
#define SET_SDA_IN()                do {CPIOC|=0X80;} while (0)       
#define SET_SDA_OUT()                do {CPIOC&=~0X80;} while (0)       

#define                c_E2Address_R                0XA1                //器件地址-读
#define                c_E2Address_W                0XA0                //器件地址-写



extern        void EEPROM_Init();
extern        u8 Read_EEPROM(u8 address);

extern        void Write_EEPROM(u8 address,u8 data );

extern        void EEPROM_OFF();
#include "eeprom.h"

BIT        b_E2WriteFail;                //写失败标志

void I2c_Stat()
{
        EEPROM_SCL=1;
        Delay_us(5);
        EEPROM_SDA=1;
        Delay_us(5);
        EEPROM_SDA=0;
        Delay_us(5);
}

void I2c_Stop()
{
        EEPROM_SDA=0;
        Delay_us(5);
        EEPROM_SCL=1;
        Delay_us(5);
        EEPROM_SDA=1;
        Delay_us(5);
}

void I2c_Response()
{
        u8 i=0;
        SET_SDA_IN();
        EEPROM_SCL=1;
       
        while((EEPROM_SDA==1) && (i<200))        i++;
        Delay_us(5);

        EEPROM_SCL=0;
        SET_SDA_OUT();
        EEPROM_SDA=1;
        Delay_us(5);
       
}

void I2c_NoResponse()
{
        SET_SDA_OUT();
        EEPROM_SDA=1;
        Delay_us(5);

        EEPROM_SCL=1;
        Delay_us(5);
        EEPROM_SCL=0;
        Delay_us(5);
}

u8 ReadByte()
{
        u8 i,data=0;

        SET_SDA_IN();
       
        for(i=0;i<8;i++)
        {
                data=data<<1;
               
                EEPROM_SCL=1;
                Delay_us(5);
                if(EEPROM_SDA)
                {
                        data|=0x01;                // 先读取高位
                }
               
                EEPROM_SCL=0;
                Delay_us(5);
        }
        return        data;
}

void WriteByte(u8 data)
{
        u8 i;
        SET_SDA_OUT();
        EEPROM_SCL=0;
       
        for(i=0;i<8;i++)
        {
                if(data&0x80)                // 先发送高位
                {
                        EEPROM_SDA=1;
                }
                else
                        EEPROM_SDA=0;
                data=data<<1;
               
                Delay_us(5);
                EEPROM_SCL=1;       
                Delay_us(5);
                EEPROM_SCL=0;
        }
        Delay_us(5);
}

void EEPROM_Init()
{
        b_E2WriteFail=0;         // 清除写入失败标志
        CPIOC &=0X37;                //PC3、PC6、PC7输出高
        PORTC |=0XC8;
        PCPHR |=0X80;                //PC7上拉使能

        Delay_us(5);
}

void EEPROM_OFF()
{
        CPIOC &=0X37;                //PC3、PC6、PC7输出低
        PCPHR &=0X7f;                //PC7上拉禁止

        EEPROM_VCC=0;       
        EEPROM_SDA=0;
        EEPROM_SCL=0;
}

u8 Read_EEPROM(u8 address)
{
        u8 data;
        EEPROM_Init();
        I2c_Stat();
        WriteByte(c_E2Address_W);
        I2c_Response();
        WriteByte(address);
        I2c_Response();
        I2c_Stat();
        WriteByte(c_E2Address_R);
        I2c_Response();
        data=ReadByte();
        I2c_NoResponse();
         I2c_Stop();
         EEPROM_OFF();                        // 关机,减少功耗
         return        data;

}

void Write_EEPROM(u8 address,u8 data )
{
        EEPROM_Init();
       
        I2c_Stat();
        WriteByte(c_E2Address_W);
        I2c_Response();
        WriteByte(address);       
        I2c_Response();
        WriteByte(data);       
        I2c_Response();
         I2c_Stop();

         Delay_us(200);                //写入后延时,等待数据保存

         if(Read_EEPROM(address)!=data)
         {
                b_E2WriteFail=1;                // 写入失败
         }
         EEPROM_OFF();                        // 关机,减少功耗
}






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|汇春技术社区 ( 粤ICP备08030648号-1 )

GMT+8, 2025-7-9 07:10 , Processed in 0.132559 second(s), 19 queries .

Powered by Discuz! X3.5

Copyright © 2024 YSPRING. All Rights Reserved. 汇春科技,版权所有。

快速回复 返回顶部 返回列表