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

📄 eeprom.c

📁 应用KEILC写的一个C51程序
💻 C
字号:
#include "eeprom.h"
void start_24c16(void)
{   
   SDA=1;_nop_();
   SCL=1;
   _nop_(); _nop_();_nop_();_nop_();
   SDA=0;
   _nop_(); _nop_();_nop_();_nop_();  
   SCL=0;   
   _nop_();_nop_();
}

void stop_24c16(void)
{   
   SDA=0;
   _nop_();_nop_();_nop_();_nop_();
   SCL=1;   
   _nop_();_nop_();_nop_();_nop_();
   SDA=1;   
   _nop_();_nop_();_nop_();_nop_();   
}
/*-----------------------------------------------
调用方式:void ack(void)
函数说明:应答函数  ack低电平脉冲
-----------------------------------------------*/
void ack(void)
{
   SCL=0;_nop_();
   SDA=0;_nop_();
   SCL=1;_nop_();_nop_();_nop_();_nop_();
   SCL=0;_nop_();
   SDA=1;_nop_();
}


/*-----------------------------------------------
调用方式:void no_ack(void)
函数说明:无需应答位,在读程序中用到
-----------------------------------------------*/
void no_ack(void)
{
   SDA=1;_nop_();
   SCL=1;_nop_();_nop_();_nop_();_nop_();   
   SCL=0;_nop_();
   SDA=0;_nop_();
}
/*-----------------------------------------------
调用方式:write_8bit(uchar ch)
函数说明:写一个字节(8位)数据
-----------------------------------------------*/
void write_8bit(uchar ch)
{
   uchar i=8;
   SCL=0;_nop_();
   while(i--)
   {
      SDA=(bit)(ch&0x80);_nop_();
      ch<<=1;
      SCL=1;_nop_();_nop_();_nop_();_nop_();
      SCL=0;_nop_();_nop_();_nop_();_nop_();
   }
}
/*-----------------------------------------------
调用方式:void write24c16(uint address,uchar ddata)
函数说明:写数据到24c16的指定地址(字节写)
-----------------------------------------------*/
void write24c16(uint address,uchar ddata)
{
   uchar ddd;
   EA=0;  //避免与串口通讯等中断冲突
   ddd=((address&0x7ff)/256)<<1;   //7ff=2048-1
   ddd=ddd & 0x0e;//求出在第几页写
   start_24c16();
   write_8bit(0xA0|ddd); //A=1010器件地址高4位
   ack();
   write_8bit(address);
   ack();
   write_8bit(ddata);
   ack();
   stop_24c16();
   EA=1;
}
/*----------------------------------------------
调用方式:uchar read24c16(uint address)
函数说明:读24c16指定地址数据(字节读)
-----------------------------------------------*/
uchar read24c16(uint address)
{
   uchar data rdata;
   uchar i=8;
   uchar ddd;
   EA=0;  //避免与串口通讯等中断冲突
   ddd=((address&0x7ff)/256)<<1;
   ddd=ddd & 0x0e; //求出在第几页写
   start_24c16();
   write_8bit(0xA0|ddd);
   ack();
   write_8bit(address);
   ack();//伪写 随机地址读前按定义伪写
   start_24c16();
   write_8bit(0xA1|ddd);//在指定的页读
   ack();
   while(i--)
   {
      rdata<<=1;
      SCL=0;_nop_(); SCL=1;
      if(SDA) rdata|=0x01;
   }
   no_ack();
   stop_24c16();
   EA=1;
   return rdata;
}

⌨️ 快捷键说明

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