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

📄 eeprom.c

📁 程序为监测报警
💻 C
字号:
/** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 陈明计 
** 日 期: 2003年3月26日
** 描 述: 增加注释
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//#include "PUMP.h"
#include <reg52.h >
#include<INTRINS.H>
//#define SDA P3_5
//#define SCL P3_4
#define uchar  unsigned char
#define uint   unsigned int
#define TRUE    1
#define FALSE   0
//#define SDA     P3_5;
//#define SCL     P3_4;
sbit   	SDA= P3^5;
sbit    SCL = P3^4;

 void delay(void){
    unsigned char  def;
	for (def = 0; def < 70; def++ )//降低时钟频率延时
	{
//get_ADC_val(0);	  
	  }
	  return  ;
	  }

//向24XX发开始信号
//
void iicstart(void){
       SDA = 1;
	   delay();
	   SCL = 1;
	   delay();
	   SDA = 0;                    //发开始信号
	   delay();
	   SCL = 0;
	   delay();
       SDA = 1;                    //准备发送或接?
	   delay();
	   }
//********************************************************************************************************
//*********************************************************************************************************
//向24cxx发停止信号
void  iicstop(void){
      SDA = 0;
      delay();
      SCL = 1;
	  delay();
      SDA = 1;
      delay();
      SCL = 0;
	  delay();
	                   }

 void IICInit(void)
{
    SCL = 0;
	delay();
    iicstop();
}

//*******************************************************************************************************
//*******************************************************************************************************
//发送应答信号

 void iicACK(void)
{
    SDA = 0;
    delay();
    SCL = 1;
    delay();
    SCL = 0;
}

/*********************************************************************************************************
** ????: IIC_NO_ACK
** ????: ??IIC?????
** ? ?: ?
** ? ?: ?
** ????: ?
** ????: ?
********************************************************************************************************/
        void IIC_NO_ACK(void)
{
    SDA = 1;
    delay();
    SCL = 1;
    delay();
    SCL = 0;
	
    return;
}


//********************************************************************************
//********************************************************************************
//发送一个字节

unsigned char IICSend(char IIC_data)
{
    char i;
    
    for (i = 0; i < 8; i++)
    {
        IIC_data = IIC_data << 1;
        F0 = SDA = CY;
        SCL = 1;
       // if (F0 != CY)
       // {
        //    SCL = 0;
       //     return FALSE;
       // }                          //此处不明原因为什么会错
        delay();
        SCL = 0;
    }
    SDA = 1;
    delay();
    SCL = 1;
    delay();
    if (SDA == 1)
    {
        SCL = 0;
        return FALSE;
    }
    else
    {
        SCL = 0;
        return TRUE;
    }
}
//********************************************************************************************************
//********************************************************************************************************
//接收一个字节
   char IICReceive(void)
{
    char i,r;
    
    r = 0;
    SDA = 1;
	delay();
    for (i = 0; i < 8; i++)
    {
        r = r * 2;
        SCL = 1;
        delay();

        if (SDA == 1)
        {
            r++;
			delay();
        }
        SCL = 0;
		delay();
    }
    return r;
}

/*********************************************************************************************************
** 函数名称: Cat24WCxxWrite
** 功能描述: 编程Cat24WCxx(仅允许一个任务可以调用)
** 输 入:  addr]:外部引脚设置的地址(将所有Cat24WCXX看成Cat24WC02)
**         nbyte:编程字节数目
**         index:编程起始的地址
**         
** 输 出: ?
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
        char byteWrite ( char addr, char byte)  {	   
     char  k;
	  k = 0xa0;
      EA=0;
      iicstart() ;                        
	  if (IICSend(k)== FALSE)                 //发送控制字
	  {
       return FALSE;
      }     
      if (IICSend(addr)== FALSE)             //发送要写入的地址
      {
        return FALSE;
      }  
       if (IICSend(byte)== FALSE)             //发送要写入数据?
       {
       return FALSE;
      }//
	  iicstop();  
//	  get_ADC_val(0);
       EA=1;
      return   TRUE ; 
    }


/*********************************************************************************************************
** 函数名称: Cat24WCxxRead
** 功能描述: 从Cat24WCxx读数据(仅允许一个任务可以调用)
** 输 入: Data[0]:外部引脚设置的地址(将所有Cat24WCXX看成Cat24WC02)
**         Data[1]:需要读取字节数目
**         Data[2]:读取的起始地址
** 输 出: Data:读取得数据
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
        char byteRead(char addr )
{   
        char  k,L;
      EA=0;
	  k = 0xa0;
	  iicstart() ;
	    if (IICSend(k)== FALSE)                 //发送控制字
	  {//
         return FALSE;//
      }
	   if (IICSend(addr)== FALSE)             //发送要写入的地址
      {
        return FALSE;
      }
	  iicstart() ;
	  k = 0xa1;
	  if (IICSend(k)== FALSE)                 //发送控制?
      {
       return FALSE;
      }
	  L = IICReceive();
	  IIC_NO_ACK();
	  iicstop()   ;  
//	  get_ADC_val(0);
      EA=1;
	  return L;
      }
  //*******************************************************************************
  //*******************************************************************************
    char nbyteRead(char addr, char nbyte, char *index)//  addr 要读取的地址 nbyte 读取的字节
     {
      for (/*nbyte++*/; nbyte !=0 ; nbyte--) {
	  *index = byteRead(addr);
	  index ++;
	  addr++;
	  
	                                     }
	  return  TRUE ;
	  } 
	 
  
 //********************************************************************************
 //********************************************************************************
   char nbyteWrite ( char addr, char nbyte,char *index)  
   {
      for ( /*nbyte++*/; nbyte!=0 ; nbyte--)  {
	     byteWrite(addr, *index);
		 addr++;
		 index++;
		                                  }
	   return  TRUE  ;


   }

⌨️ 快捷键说明

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