打印
[DemoCode下载]

从机模拟AT24C02

[复制链接]
322|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
febgxu|  楼主 | 2023-5-27 08:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"


#define EEPROM_SLA              0xA0   //AT24C02

UINT8 data_received[64]= 0;    //change to 256 if the rom space is enough
UINT8 data_num = 0;   

UINT8 irxdata =0;
UINT8 isubaddr =0;


void I2C_ISR(void) interrupt 6
{

    static UINT8 islavecount=0;
   
    switch (I2STAT)
    {
        case 0x00:
            STO = 1;
        
            break;

        case 0x60:   
            AA = 1;
        
            islavecount=0;
        
            break;
                              
        case 0x68:   
                                P02 = 0;
        
            while(1);
            break;
        
        
        case 0x80:   
        
            if(islavecount==0)
            {
               isubaddr = I2DAT;
               AA = 1;
               islavecount++;
               
               data_num = isubaddr;
               
            }
            else  
            {
               irxdata = I2DAT;
               AA = 1;  
               
               data_received[data_num++]=irxdata;
               
               islavecount++;               
            }        
        
            break;      
        

        case 0x88:
        
            data_received[data_num] = I2DAT;
            data_num = 0;
            AA = 1;
        
            break;


        case 0xA0:     
            
            AA = 1;
            break;
        
        case 0xA8:     
        
            data_num=isubaddr;
        
            I2DAT = data_received[data_num];
            data_num++;
            AA = 1;
        
            break;        
        
        case 0xB8:   
        
            I2DAT = data_received[data_num];
            data_num++;
            AA = 1;
        
            break;

        case 0xC0:      
            AA = 1;
            break;

        case 0xC8:     
        
            AA = 1;

            break;        
    }

    SI = 0;
   
}


void Init_I2C_SLAVE(void)
{
    P13_Quasi_Mode;                         //set SCL (P13) is Quasi mode
    P14_Quasi_Mode;                         //set SDA (P14) is Quasi mode
   
    SDA = 1;                                //set SDA and SCL pins high
    SCL = 1;
   
    //--set_P0SR_6;                             //set SCL (P06) is  Schmitt triggered input select.
   
    set_EI2C;                               //enable I2C interrupt by setting IE1 bit 0
    set_EA;

    I2ADDR = EEPROM_SLA;                    //define own slave address
    set_I2CEN;                              //enable I2C circuit
    set_AA;
}


void main(void)
{

   Set_All_GPIO_Quasi_Mode;

   Init_I2C_SLAVE();                                 

   while (1);

}


使用特权

评论回复
沙发
pmp| | 2023-6-6 13:53 | 只看该作者
使用I2C总线使用AT24C02?

使用特权

评论回复
板凳
tifmill| | 2023-6-6 14:20 | 只看该作者
单片机可以同时使用一个AT24C02芯片吗

使用特权

评论回复
地板
kkzz| | 2023-6-6 14:36 | 只看该作者
如何修改 at24c02数据              

使用特权

评论回复
5
maqianqu| | 2023-6-6 17:09 | 只看该作者
有多少个字节可以用来存数据?               

使用特权

评论回复
6
Bowclad| | 2023-6-8 18:10 | 只看该作者
kkzz 发表于 2023-6-6 14:36
如何修改 at24c02数据

用iic通信

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

4540

帖子

2

粉丝