电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>IC资料>IC中文资料>24c512/24c256的读写程序

24c512/24c256的读写程序

2008-08-13 | rar | 666 | 次下载 | 免费

资料介绍


#include "msp430x13x.h"
     
void nop(void)
{
  _NOP();
  _NOP();
  _NOP();
}

void start(void)     
{
  SCLEN &= (~(SDA+SCL)); 
  _NOP();
  _NOP();
  _NOP(); 
  SDAEN |= SDA;   
  SCLEN |= SCL;      
  return;
}
void stop(void)
{
  SDAEN |= SDA;          
  SCLEN &= (~SCL);  
  SDAEN &= (~SDA);  
  return;
}


unsigned char ControlByte(int AddressByte)
{
  unsigned char temp;

  _BIC_SR(0X0001);  //CLEAR SR 'C'
  temp = (char)(AddressByte>>8);
  temp <<= 1 ;
  temp &= 0X0E;
  temp += Code;
  return temp;
}


int shout( unsigned char data ) 
{
 unsigned char mask,i,temp;
 unsigned char Value;

 Value = data;
 mask=0X80;

 for (i=0;i<=7;i++){

      temp = (Value & mask);       
      if( temp !=0 ){  
          SDAEN &=  (~SDA); 
          SCLEN &=  (~SCL); 
         if( !( SDAIN & SDA ) ){
            return 1;
          }
      }
      else {
        SDAEN |= SDA ;   
        SCLEN &= (~SCL); 
      }
   
    mask>>=1;

    SCLEN |= SCL;    
 }
  SDAEN &= (~SDA);
  SCLEN &= (~SCL);

  if ( !(SDAIN & SDA )){
     // return 1;
  }
 
  SCLEN |= SCL;
  return 0;
}

// 写 Number 个字节到 E2 中
int WriteBlock(int number,unsigned char *dataadr,unsigned char *e2adr)
{
  unsigned char *p1;
  int i;
  unsigned char temp;
  unsigned int aaa;
  //unsigned char *temp1;
 
  _DINT();   
  SDADAT &= (~(SCL+SDA)); 
      
  start();                     

  aaa = (int)(e2adr );
  temp = ControlByte(aaa);
  shout(temp);

  shout( (int)(e2adr));

  p1 = dataadr;

  for (i=1;i<=8;i++) {

     shout(*p1);
     p1++;
  }
  stop(); 
  _EINT(); 
 
//Write a block use the address and back..
 return 0;             //if error return 1  right return 0
}
// 写N * 8个字节
int WriteN8Byte(int Number)
{
  unsigned char *e2adr,*dataadr;
  unsigned int i,j;

//int WriteBlock(int number,unsigned char *dataadr,unsigned char *e2adr)
  dataadr = (char*)0x200;
  e2adr = (char*)0x00;

  for( i=1;i<=Number;i++){
 
    WriteBlock(8,dataadr,e2adr);
    dataadr += 8; 
    e2adr += 8;   
    for (j=0;j<=3333;j++);           
   
  }

  return 0;
}

//; Clock out an acknowledge bit (low).
//; SCL expected low on entry. Return with SCL, SDA low.
void Ack(void)
{
  SDAEN |= SDA;
  SCLEN &= ~SCL;
  SCLEN |= SCL;
 
}
//; Clock out a negative acknowledge bit (high).
//; SCL expected low on entry. Return with SCL low, SDA high.
void Nak(void)
{
  SDAEN &= ~SDA;                    //; NAK bit
  SCLEN &= ~SCL;                    //; raise clock
  SCLEN |= SCL;                     //; drop clock

}
//由E2 中 读8位 一个字节 数据
unsigned char shin(void)
{
  int i;
  unsigned char temp;
  unsigned char Mask;

  SDAEN &= ~SDA;                  // make SDA an input
  temp =0;

//读8位数据
  for( i=1;i<=8;i++) {
   
    SCLEN &= ~SCL;                //SCL = H
    Mask = 0;

    if (SDAIN &SDA)
      Mask = 1;
    else
      Mask =0;
//    Mask = SDAIN & SDA;
    Mask <<= (8 - i);
    temp ^= Mask;
    SCLEN |= SCL;   
  }

  return temp;
 }
// 24c256 512 页 64字节 14-15bit Word Address!!!
//**********************************************************************
//  读取N 个字节 到RAM
//  参数说明: number 读取的个数,dataadr,读到RAM 的地址?e2adr,E2地址
//**********************************************************************
int  ReadNByte(int number,unsigned char *dataadr,unsigned char *e2adr)
{
 int  i;             
 unsigned char *p; 
 unsigned char temp;             
 unsigned char temp1;
 
  _DINT();   
 SDADAT &= (~(SCL+SDA));
 
 p=dataadr;   

 start();   

  temp = ControlByte((int)(e2adr ));
  shout(temp);    
 
  shout((int)(e2adr ));        

  start();

  temp |= 0X01;          
  shout(temp);         

  temp1=0;
  for (i=1;i<=number;i++){              
    temp1 = shin();
    *p++ = temp1;

    Ack();
  }
 Nak();
 stop();
 _EINT();

 return 0;
}

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1采用 CMOS传感器的监控摄像头参考设计
  2. 2.30 MB  |  6次下载  |  免费
  3. 2一线大厂的IC笔试复习题合集免费下载
  4. 1.23 MB   |  4次下载  |  2 积分
  5. 3用于晶体振荡器或陶瓷谐振器的振荡器驱动器SN74LVC1404数据表
  6. 1017.61KB   |  2次下载  |  免费
  7. 4APFC 反激 PSR 恒压控制器BP3619APFC数据手册
  8. 2.70 MB   |  2次下载  |  免费
  9. 5GD32F103xxArm®Cortex®-M3 32位MCU芯片手册
  10. 5.14 MB   |  2次下载  |  免费
  11. 6串行到并行接口SN74LV8153 数据表
  12. 494.56KB   |  1次下载  |  免费
  13. 7SmartBond™ DA14683 低功耗蓝牙 5.0 开发套件 Pro数据手册
  14. 2.33 MB  |  1次下载  |  免费
  15. 8RK3588S处理器硬件设计的要点及注意事项
  16. 11.35 MB   |  1次下载  |  免费

本月

  1. 1RSA306B频谱分析仪技术资料汇总
  2. 未知   |  204次下载  |  免费
  3. 2RSA500A系列便携式频谱分析仪技术盘点
  4. 未知   |  157次下载  |  免费
  5. 3高幅度波形/ 函数发生器汽车、半导体、科学和工业应用测量剖析
  6. 未知   |  141次下载  |  免费
  7. 4直流无刷电机驱动与失速电流限制参考设计
  8. 10.6 MB   |  32次下载  |  1 积分
  9. 5电动汽车同步快充慢充原理及测试的三种情况介绍
  10. 未知   |  30次下载  |  免费
  11. 6NI数据采集(DAQ)函数的应用
  12. 0.3 MB   |  23次下载  |  免费
  13. 7保护新能源汽车电池使用寿命的六种措施
  14. 未知   |  18次下载  |  免费
  15. 8稀土激光材料的详述
  16. 0.1 MB   |  11次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935094次下载  |  免费
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420054次下载  |  免费
  5. 3Altium DXP2002下载入口
  6. 未知  |  233070次下载  |  免费
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191334次下载  |  免费
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183318次下载  |  免费
  11. 6labview8.5下载
  12. 未知  |  81569次下载  |  免费
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73796次下载  |  免费
  15. 8NI LabVIEW中实现3D视觉的工具和技术
  16. 未知  |  70088次下载  |  免费