⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c01-64.c

📁 24c01-64
💻 C
字号:
/*以下为AT24C01/02驱动程序,时钟:22.1184MHz;通信速率:88.5Kb/S*/
/*使用时按照C语言的格式嵌入以下1--4代码*/
/*            作者:weiyi        时间:
2002.6.17*/
/*读写操作范例过程如下:    使用时根据具体型号保留将其他不用的删除便是*/
/*Write:
/*    unsigned char data i;
/*    ……
/*    StartIic;
/*    i=SlaWr;
/*    i|=A2A0;    /*装入具体线路的A2-A0值*/

/*    if(MemSize==16){    /*匹配地址AT24C16*/
/*        i&=0xf1;
/*        i|=cAddresH&0x0e;    /*根据型号将高地址转如SLA*/
/*        }
/*    if(MemSize==08){    /*匹配地址AT24C08*/
/*        i&=0xf9;
/*        i=cAddresH&0x06;    /*根据型号将高地址转如SLA*/
/*        }
/*    if(MemSize==04){    /*匹配地址AT24C04*/
/*        i&=0xfd;
/*        i=cAddresH&0x02;    /*根据型号将高地址转如SLA*/
/*        }
/*    SendIic(i);/*1010 0010*/
/*    if((MemSize==32)||(MemSize==64))    /*匹配地址AT24C32、64*/
/*        SendIic(cAddresH);    /*Send first addres*/        
/*    SendIic(cAddres);    /*Send addres(L)如果不是以上所列型号就是
AT24C01、02*/

/*    SendIic(cData0);/*写第一个字节数据*/
/*    ……
/*    SendIic(cDataN);/*写最后一个字节数据,不能超过页缓冲*/
/*    EndIic;




/*Read:    bScanErr=0;
/*    StartIic;
/*    i=SlaR;
/*    i|=A2A0;    /*装入具体线路的A2-A0值*/
/*
/*    if(MemSize==16){    /*匹配地址AT24C16*/
/*        i&=0xf1;
/*        i|=cAddresH&0x0e;
/*        }
/*    if(MemSize==08){    /*匹配地址AT24C08*/
/*        i&=0xf9;
/*        i=cAddresH&0x06;    /*根据型号将高地址转如SLA*/
/*        }
/*    if(MemSize==04){    /*匹配地址AT24C04*/
/*        i&=0xfd;
/*        i=cAddresH&0x02;    /*根据型号将高地址转如SLA*/
/*        }
/*    SendIic(i);/*1010 0010*/
/*    if((MemSize==64)||(MemSize==32)        /*匹配地址AT24C32、64*/
/*        SendIic(cAddresH);    /*Send first addres*/        
/*    SendIic(cAddres);    /*Send addres(L)如果不是以上所列型号就是
AT24C01、02*/

/*    if(bScanErr==0){
/*        cDataBuf[0]=ScanIic();/*读入第一个字节*/
/*        SendAck();
/*        ……
/*        cDataBuf[n]=ScanIic();/*读入最后一个字节*/
/*        SendNotAck();
/*        }
/*    EndIic;*/



/*在程序相应位置嵌入以下1-4代码*/

/* 1。   嵌入宏定义:*/

#include <reg51.h> /*#include <reg52.h>*/
#include <absacc.h>
#include <intrins.h>

#define Wait     {_nop_();_nop_();_nop_();_nop_();}
#define StartIic  {bSda=bScl=1;Wait;bSda=0;Wait;bScl=0;}
#define EndIic {bSda=0;bScl=1;Wait;bSda=1;}

#define    SlaWr        0xa0    /*1010 0 0 0 0*/
#define    SlaR        0xa1    /*1010 0 0 0 1*/

#define    A2A0        0x0    /*按照实际线路设置:0x00-0x14*/

#define    MemSize        01    /*EEPROM型号:01-64*/

/* 2。    嵌入变量申明:*/
sbit bSda            =Px^x;    /*使用具体线路的bSda*/    
sbit bScl             =Px^x;    /*使用具体线路的bScl*/    

unsigned char bdata cFlag;
    sbit    bScanErr    =cFlag^0;


/* 3。   嵌入涵数申明:*/
unsigned char ScanIic();
void SendIic(unsigned char cData);
void SendAck(void);
void SendNotAck(void);

/* 4。   嵌入涵数代码段:*/
/****************************************************
Name:ScanIic
Function:From IIC Read data
Time:113us        88.5K
***************************************************/
unsigned char ScanIic(){
    unsigned char data i,j;/*IIC data*/
    bSda=1;
    j=0;
    for(i=0;i<8;i++){
        bScl=1;
        Wait;    /*可以不用,但太危险了*/
        j<<=1;/*这个指令已经有15个周期,所以无须再延时*/
        j|=bSda;/*Scan 0*/    /*Scan 1*/
        bScl=0;
        Wait;
        }
    return j;
}
/***********************************************/
/****************************************************
Name:SendIic
Function:Send data to Iic
Time:116us(8位数据为:112us)        88.5k
*****************************************************/
void SendIic(unsigned char cData){
    unsigned char data i;
    for(i=0;i<8;i++){
        bSda=(bit)(cData&0x80);
        bScl=1;
        cData<<=1;
        Wait;/*都可以不用,但太危险了*/
        bScl=0;
        Wait;/*都可以不用,但太危险了*/
        }
    bSda=bScl=1;    /*检测ACK*/
    for(i=0;(bSda==1)&&(bScanErr==0);i++){
        if(i==17)        
            bScanErr=1;/*如果101us没有响应就错误*/
        }
    bScl=0;
}
/*************************************************/
/**********************************************
Name:SendAck
Function:Send IIC Ack
********************************************/
void SendAck(void){
    bSda=0;
    bScl=1;
    Wait;
    bScl=0;
    bSda=1;
}
/******************************************/
/******************************************
Name:SendNotAck
Function:Send IIC not Ack
******************************************/
void SendNotAck(void){
    bScl=bSda=1;
    Wait;
    bScl=0;
}    
/**********************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -