使用51读写24c256的程序

/*the header files name is AT24C01-512.h
include AT24C01/01A/02/04/08/16/32/64/128/256/512
*the header files program's function is link exterior extend E2PROM
*the link chip's name is AT24C01A-512
* Debug frequency:22.1184MHz
*the program's synopsis as follows
* Author by:weiyi
* Establish on Date:27-12-2002
* Modified on Date:31-10-2002
* Edition NO.:V1.0
#define    Wait_1us    {_nop_();_nop_();}
#define    Wait_2us    {Wait_1us;Wait_1us;}
#define    Sla_Wr        0xa0    /*0000 0 0 0 0*/
#define    Sla_Rd        0xa1    /*0000 0 0 0 1*/
#define    AT24C01        0x01
#define    AT24C01A    0x02
#define    AT24C02        0x03
#define    AT24C04        0x04
#define    AT24C08        0x05
#define    AT24C16        0x06
#define    AT24C32        0x07
#define    AT24C64        0x08
#define    AT24C128    0x09
#define    AT24C256    0x0a
#define    AT24C512    0x0b
#define    Mem_Size    AT24C256    //
01/01A/02/04/08/16/32/64/128/256/512
#define    Chip_1        0x00    //本器件的器件地址,可以第一8个不同地
址的芯片使之能用同一段程序进行读写
sbit    bSda        =P3^3;
sbit    bScl        =P3^4;   
bit bScan_Err;
unsigned char idata cShare_Buf[2];    //I2c read and write buffer
void Start_I2c(void);
void End_I2c(void);
unsigned char Scan_I2c();
void Send_I2c(unsigned char cData);
void Send_Ack(void);
void Send_Not_Ack(void);
void Write_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int
cStart_Address);
void Read_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int
cStart_Address);
/************Name:ScanI2c***********
Function:read 1byte from 24C01/512
NO.:1
Run time:79us    1=4+2us    0=5+1us    f=111kbps/83.3Kbps
**********Function Start************/
void Start_I2c(void)
{
    unsigned char /*idata*/ i;
    bSda=bScl=1;
    for(i=0;i<2;i++);    //wait 7us
    bSda=0;
    for(i=0;i<2;i++);    //wait 7us
    bScl=0;
}
/**********Function End*************/
/************Name:ScanI2c***********
Function:read 1byte from 24C01/512
NO.:1
Run time:79us    1=4+2us    0=5+1us    f=111kbps/83.3Kbps
**********Function Start************/
void End_I2c(void)
{
    unsigned char /*idata*/ i;
    bSda=0;
    bScl=1;
    for(i=0;i<2;i++);    //wait 7us
    bSda=1;
}
/**********Function End*************/
/************Name:ScanI2c***********
Function:read 1byte from 24C01/512
NO.:1
Run time:79us    1=3/5us    0=1/5us    f=250/100kbps
**********Function Start************/
aaaaaaaaaaaaaaaaaaunsigned char Scan_I2c()
{
    unsigned char /*idata*/ i,j;//IIC data
    Stop_Dog;    //喂
    bSda=1;
    j=0;
    for(i=0;i<8;i++)
    {
        bScl=1;
        j<<=1;
        Wait_2us;
        j|=bSda; 
万花茶//Scan 0    Scan 1
        bScl=0;
        Wait_2us;
        Wait_2us;
    }
    return j;
}
/**********Function End*************/
/************Name:SendI2c***********
Function:Send 1byte to 24C01/512
NO.:2
Run time:82us    1=1/3us    0=3us    f=250/100kbps
**********Function Start************/
void Send_I2c(unsigned char cData)弧形门
{
    unsigned char /*idata*/ i;
    Stop_Dog;    //喂狗
    for(i=0;i<8;i++)
    {
        bSda=(bit)(cData&0x80);
        bScl=1;
        cData<<=1;
        Wait_2us;
        Wait_2us;
        bScl=0;
        Wait_2us;
    }
    bSda=bScl=1;    //检测ACK
    for(i=0;(bSda==1)&&(bScan_Err==0);i++)
    {
        if(i==30)       
            bScan_Err=1; //如果101us没有响应就错误
        Stop_Dog;    //喂狗
    }
    bScl=0;
}
/**********Function End************/
/************Name:SendAck***********
Function:Send ack
NO.:3
Run time:10us+4us
**********Function Start************/
void Send_Ack(void)
{
    unsigned char /*idata*/ i;
    bSda=0;
    bScl=1;
    for(i=0;i<2;i++);    //wait 8us
    bScl=0;靠背轮
    bSda=1;
u型卡子}
/**********Function End*************/
/************Name:SendNotAck***********
Function:send not ack
NO.:4
Run time:10us+4us
**********Function Start************/
void Send_Not_Ack(void)
{
    unsigned char /*idata*/ i;
    bScl=bSda=1;
    for(i=0;i<2;i++);    //wait 8us
    bScl=0;
}   
/**********Function End*************/
/************Name:WriteMem***********
Function:write data to 24C01/512
NO.:5
Run time:80us(1byte)*cData_Size+
**********Function Start************/
void Write_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int
>动态投影灯

本文发布于:2024-09-20 20:28:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/98768.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:能用   器件   进行   程序   错误   投影   没有响应   动态
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议