找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2217|回复: 0
收起左侧

求助单片机EEPROM问题

[复制链接]
ID:60407 发表于 2014-4-6 22:00 | 显示全部楼层 |阅读模式
             #include<reg52.h>
             #include <intrins.h>
    #define ucr8 unsigned char
    #define AT24c16 0xa0

sbit SDA = P2^0;
sbit SCL = P2^1;  

      
   
/***************************************************************
函数名称:delay5us1;
函数类型:无;
函数参数:无;     
子函数顺序:1;
函数功能:产生大约5US的延迟;
****************************************************************/   

   void delay5us1(void)   //误差 -0.659722222222us
      
   {
         _nop_();  //if Keil,require use intrins.h
         _nop_();  //if Keil,require use intrins.h
      }
/*_____________________________________________________子函数结束*/
/*______________________________________________________________*/

/***************************************************************
函数名称:IICStart2;
函数类型:无;
函数参数:无;      
子函数顺序:2;
函数功能:启动IIC总线;
****************************************************************/
       void IICStart2(void)
   
    {
        SDA = 1;
     SCL = 1;
      delay5us1();
  
     SDA = 0;

    delay5us1();
   
    }
/*_____________________________________________________子函数结束*/
/*______________________________________________________________*/


/***************************************************************
函数名称:IICStop3;
函数类型:无;
函数参数:无;
子函数顺序:3;
函数功能:结束IIC总线;
****************************************************************/
     void IICStop3(void)
  
  {
  
      SDA = 0;
   SCL = 0;
     delay5us1();
      SCL = 1;
   SDA = 1;
  }
/*_____________________________________________________子函数结束*/
/*______________________________________________________________*/



    /***************************************************************
函数名称:IICSend4;
函数类型:无;
函数参数:unsigned char型;
子函数顺序:4;
函数功能:向IIC发送数据传输信号,并传输数据或者地址;
子函数内变量:i、dat、Judge;
****************************************************************/
      void IICSend4(ucr8 dat)
   {
  
     ucr8 i,Judge;
      
    Judge = 0x80;
       for(i=0;i<8;i++)
        {
     
         SCL = 0;
       delay5us1();
           if( dat & Judge == 0) {SDA = 0;}
        else        {SDA = 1;}
      
       Judge >>= 1;
       delay5us1();
            
      
         SCL = 1;      
   
     
     }
   }
/*_____________________________________________________子函数结束*/
/*______________________________________________________________*/

/***************************************************************
函数名称:IICReceive5;
函数类型:unsigned char型;
函数参数:无;
子函数顺序:5;
函数功能:向IIC接收数据,并返回应答信号;
子函数内变量:i、dat、Judge;
****************************************************************/
       ucr8 IICReceive5()
    {
      ucr8 i,dat;
     
     dat = 0;
         for(i=0;i<8;i++)
      {
      
          SCL = 0;   
       SDA = 1;
      
     delay5us1();
     
       SCL = 1;
      
     delay5us1();
     
        dat <<= 1;
              
             if(SDA == 1) {dat|= 0x01;}
     
     delay5us1();
      
      }

       SCL = 0;
    SDA = 1;
     delay5us1();
       SCL = 1;
    return dat;
    }
/*_____________________________________________________子函数结束*/
/*______________________________________________________________*/

           void main(void)
     {
     
     
       IICStart2();
    IICSend4(AT24c16);
    IICSend4(0);
    IICSend4();
    IICStop3();
   
   
    IICStart2();
    IICSend4(AT24c16);
    IICSend4(0);
    IICStart2();
    IICSend4(AT24c16+1);
      P0 = IICReceive5();
    IICStop3();
        while(1);

     
     }


帮忙看下程序  EEPROM数值总是读不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表