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

📄 eeprom.c

📁 51开发板调试程序
💻 C
字号:
#include<reg52.h>
#include <intrins.h>
#include "Define.h"
#include "Set.h"


/*有关全局变量*/
sbit Sda= P1^7; /*串行数据*/
sbit Scl= P1^6; /*串行时钟*/

//////////////////////////////////////////////////////////////////////////////
void mDelay(UCHARIDATA j)
{ 
    UCHARIDATA i;

    for(;j>0;j--)
    { 
	    for(i=0;i<125;i--)
        {
		    ;
		}
    }
}

/*发送起始条件*/
void Start(void) /*起始条件*/
{
    Sda=1;
    Scl=1;
    _nop_ ();
    _nop_ ();
    _nop_ ();
    Sda=0;
    _nop_ ();
    _nop_ ();
    _nop_ ();
}

void Stop(void) /*停止条件*/
{
    Sda=0;
    Scl=1;
    _nop_ ();
    _nop_ ();
    _nop_ ();
    Sda=1;
    _nop_ ();
    _nop_ ();
    _nop_ ();
}

void Ack(void) /*应答位*/
{
    Sda=0;
    _nop_ ();
    _nop_ ();
    _nop_ ();
    Scl=1;
    _nop_ ();
    _nop_ ();
    _nop_ ();
    Scl=0;
}

void NoAck(void) /*反向应答位*/
{
    Sda=1;
    _nop_ ();
    _nop_ ();
    _nop_ ();
    Scl=1;
    _nop_ ();
    _nop_ ();
    _nop_ ();
    Scl=0;
}

void Send(UCHARIDATA Data) /*发送数据子程序,Data为要求发送的数据*/
{
    UCHARIDATA BitCounter=8; /*位数控制*/
    UCHARIDATA temp; /*中间变量控制*/

	do
    {
        temp=Data;
        Scl=0;
        _nop_ ();
        _nop_ ();
        _nop_ ();

        if((temp&0x80)==0x80)/* 如果最高位是1*/
		{
            Sda=1;
	    }
        else
		{
            Sda=0;
		}

        Scl=1;
        temp=Data<<1; /*RLC*/
        Data=temp;
        BitCounter--;
    }while(BitCounter);

    Scl=0;
}


UCHAR Read(void) /*读一个字节的数据,并返回该字节值*/
{
    UCHARIDATA temp=0;
    UCHARIDATA temp1=0;
    UCHARIDATA BitCounter=8;

    Sda=1;
    do
	{
        Scl=0;
        _nop_ ();
        _nop_ ();                                                                                                
        _nop_ ();
        Scl=1;
        _nop_ ();
        _nop_ ();
        _nop_ ();

        if(Sda) /*如果Sda=1;*/
		{
            temp=temp|0x01; /*temp的最低位置1*/
		}
        else
		{
            temp=temp&0xfe; /*否则temp的最低位清0*/
        }

		if(BitCounter-1)
        { 
		    temp1=temp<<1;
            temp=temp1;
        }

        BitCounter--;
    }while(BitCounter);

    return(temp);
}

void ByteWrite(UCHARIDATA Data[],UCHARIDATA Address,UCHARIDATA Num)
{
    UCHARIDATA i;
    UCHARIDATA *PData;
    PData=Data;

    for(i=0;i<Num;i++)
    {
        Start(); /*发送启动信号*/

        Send(0xa0); /*发送SLA+W*/
        Ack();
        Send(Address+i); /*发送地址*/
        Ack();
        Send(*(PData+i));
        Ack();

        Stop();
        mDelay(20);
    }
}

///////////////////////////PAGE WRITE////////////////////////////////////
void PageWrite(UCHARIDATA Data[],UCHARIDATA Address)
{
    UCHARIDATA i;
    UCHARIDATA *PData;
    PData=Data;

	Start(); /*发送启动信号*/

    Send(0xa0); /*发送SLA+W*/
    Ack();
    Send(Address); /*发送地址*/
    Ack();

    for(i=0;i<6;i++)
    {
        
        Send(*(PData+i));
        Ack();

    }

	Stop();
    mDelay(20);
}
///////////////////////////RandomRead////////////////////////////////////

void RandomRead(UCHARIDATA Data[],UCHARIDATA Address,UCHARIDATA Num)
{
    UCHARIDATA i;
    UCHARIDATA *PData;
    PData=Data;

    for(i=0;i<Num;i++)
    {
        Start();

        Send(0xa0);
        Ack();
        Send(Address+i); 
        Ack();

        Start();
        Send(0xa1);
        Ack();

        *(PData+i)=Read();
        mDelay(20);
        Scl=0;
        NoAck();

        Stop();
    }

    mDelay(10);
    
}

//////////////////////Current Address Read//////////////////////////////////
void CurrentAddressRead(UCHARIDATA *pData)
{
    UCHARIDATA *pTemp;
    pTemp=pData;

	Start();
    Send(0xa1);
    Ack();

   *pTemp=Read();
    mDelay(20);

	Scl=0;
    NoAck();

    Stop();
  
}


void SequentialRead(UCHARIDATA Data[],UCHARIDATA Num)
{
    UCHARIDATA i;
    UCHARIDATA *PData;
    PData=Data;

	Start(); /*发送启动信号*/
    Send(0xa1);
    Ack();

    for(i=0;i<Num-1;i++)
    {
        *(PData+i)=Read();
		mDelay(20);
        Scl=0;
        Ack();
		
    }

	*(PData+Num-1)=Read();
	mDelay(20);
    Scl=0;
    NoAck();

	Stop();
    
}

⌨️ 快捷键说明

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