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

📄 24lc512.c

📁 MSP430F149控制24LC512,已经全部调通,可方便大家调试。
💻 C
字号:
#include <msp430x14x.h>
#include "24LC512.h"

#define unchar unsigned char
#define unint  unsigned int
#define unlong unsigned long

#define MEMDIR P2DIR
#define MEMSEL P2SEL
#define MEMOUT P2OUT
#define MEMIN  P2IN

#define SCL0 MEMOUT &= ~BIT3                 //   CLK 复位
#define SCL1 MEMOUT |= BIT3                  //   CLK 置位
#define SDA0 MEMOUT &= ~BIT4                 //   DATA 复位
#define SDA1 MEMOUT |= BIT4                  //   DATA 置位

/*************************************/
//       延时
void delay_memory()
{
  unchar q0 ;
  for(q0=0;q0<20;q0++)
  {
    _NOP() ;
  }
}

/***********************************/
//   开始
void start(void)
{
  MEMDIR |=  BIT4 ;
  SDA1 ;
  delay_memory() ;
  SCL1 ;
  delay_memory() ;
  SDA0 ;
  delay_memory() ;
  SCL0 ;
  delay_memory() ;
}

/**********************************/
//   停止
void stop(void)
{
  MEMDIR |= BIT4 ;
  SCL0 ;
  delay_memory() ;
  SDA0 ;
  delay_memory() ;
  SCL1 ;
  delay_memory() ;
  SDA1 ;
  delay_memory() ;
}

/**********************************/
//
void ack()
{
  MEMDIR |=  BIT4 ;
  SDA0 ;
  delay_memory() ;
  SCL1 ;
  delay_memory() ;
  SCL0 ;
  delay_memory() ;
  SDA1 ;
}

/*************************************/
//
void noack()
{
  MEMDIR |=  BIT4 ;
  SDA1 ;
  delay_memory() ;
  SCL1 ;
  delay_memory() ;
  SCL0 ;
  delay_memory() ;
}

/************************************/
//
unchar testack()
{
  unchar ack ;
  SCL1 ;
  delay_memory() ;
  MEMDIR &= ~BIT4 ;
  delay_memory() ;
  ack = (MEMIN * BIT4) ;
  delay_memory() ;
  SCL0 ;
  delay_memory() ;
  return (ack) ;
}

/*********************************/
//
void write8bit(unchar input)
{
  unchar temp , q0 ;
  MEMDIR |= BIT4 ;
  for(temp = 8 ;temp > 0 ; temp--)
  {
    q0 = input & 0x80 ;
    if(q0 == 0x80)
      SDA1 ;
    else
      SDA0 ;
    delay_memory() ;
    SCL1 ;
    delay_memory() ;
    SCL0 ;
    delay_memory() ;
    input = input<<1 ;
  }
}

/*************************************/
//
unchar read8bit()
{
  unchar temp ,q0 ,rbyte = 0 ;
  MEMDIR &= ~BIT4 ;
  for(temp=8 ;temp>0 ;temp--)
  {
    SCL1 ;
    delay_memory() ;
    rbyte = rbyte<<1 ;
    MEMDIR &= ~BIT4 ;
    q0 = (MEMIN & BIT4) ;
    if(q0 == BIT4)
      rbyte = rbyte|0x1 ;
    delay_memory() ;
    SCL0 ;
    delay_memory() ;
  }
  return (rbyte) ;
}

/***********************************/
//
void initmemory(void)
{
  //设定存储器的地址为 100 ,写保护无效
 // P2SEL &= 0X07 ;                     // P2口的 0 ~ 5 引脚为端口功能
  //MEMDIR |= BIT0 + BIT1 + BIT2 ;     //   P2口的 0 ~ 2 引脚为输出方向
 // MEMOUT &= ~BIT0 ;                  //
 // MEMOUT &= ~BIT1 ;                  //
 // MEMOUT &= ~BIT2 ;                  //    P2口的 0 ~ 1 引脚 置为 0 确定 24LC512 的地址为 100
                                     //    P2口的 2 引脚置为 0 ,关闭写保护端口
  MEMDIR |= BIT3 ;                   // P2 口的 4 脚 恒定为输出模数
}


/***********************************/
//
unchar write(unint add ,unchar *data,unchar nbyte)
{
  unchar addlow ;
  unchar addhigh ;

   addlow = add ;
   add=add>>0x08 ;
   addhigh = add ;

   start() ;
   write8bit(0xa0) ;
   if(testack()==1)
     return 1 ;
   write8bit(addhigh) ;
   if(testack()==1)
     return 1;
   write8bit(addlow) ;
   if(testack()==1)
     return 1;

  for(; nbyte > 0 ; nbyte--)
  {
   write8bit(*data) ;
   if(testack()==1)
     return 1 ;
   data++ ;
  }

  stop() ;
   delay_memory() ;
  return 0 ;
}

/***************************************/
//
unchar read(unchar *data ,unint add )
{
  unchar addlow ;
  unchar addhigh ;
  addlow = add ;
   add=add >> 8 ;
   addhigh = add ;
  start() ;
  write8bit(0xa0) ;
  if(testack()==1)
    return 1 ;
  write8bit(addhigh) ;
  if(testack()==1)
    return 1 ;
  write8bit(addlow) ;
  if(testack()==1)
    return 1 ;

  start() ;
  write8bit(0xa1) ;
  if(testack()==1)
    return 1 ;
  *data = read8bit() ;
  noack() ;
  stop() ;
  return 0 ;
}

/*******************************************************/
//
unchar readseq(unchar *data,unint add, unchar nbyte)
{
  unchar addlow ;
  unchar addhigh ;
  addlow = add ;
   add=add >> 0x08 ;
   addhigh = add ;

  start() ;
  write8bit(0xa0) ;
  if(testack()==1)
    return 1 ;
  write8bit(addhigh) ;
  if(testack()==1)
    return 1 ;
  write8bit(addlow) ;
  if(testack()==1)
    return 1 ;

  start() ;
  write8bit(0xa1) ;
  if(testack()==1)
    return 1 ;
  while(nbyte != 1)
  {
    *data = read8bit() ;
    ack() ;
    data++ ;
    nbyte-- ;
  }

  *data = read8bit() ;
  noack() ;
  stop() ;
  return 0 ;
}


⌨️ 快捷键说明

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