STM32F103读93C46程序 点击:428 | 回复:0



kuailedan168

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 3回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2015年3月13日
发表于:2017-10-31 16:44:56
楼主

//////////////////////////////读93C46一个字节//////////////////////////////////////
unsigned char read_byte()
{
u8 data_byte,ji;
SCK_L;
__nop();
__nop();
SCK_H;
__nop();
__nop();
SCK_L;
__nop();
__nop();
for(ji=0;ji<8;ji++)
   {
  data_byte<<=1; 
  if(DO==1)
        {
        data_byte|=0x01;
        }
   else
        {
        data_byte&=0xfe;
        } 
   SCK_H;
  __nop();
   __nop();
  SCK_L;
  __nop();
  __nop();
    }
 return data_byte;
}

//////////////////////////93C46写一个字节/////////////////////////////////
void write_byte(u8 tmp)
 {
 u8 h;
for(h=0;h<8;h++)
     {
      SCK_L;
      __nop();
   __nop();
   __nop();
   __nop();
      if(tmp&0x80)
         {
         DI_H;
         }
      else
          {
          DI_L;
          }
      SCK_H;
      __nop();
   __nop();
   __nop();
   __nop();
   tmp<<=1;
      }
 }
 ///////////////////////////以下93C46擦写允许////////////////////////////////////////
 void write_en()
 {
  DI_L;
  CS_H;
  write_byte(0X02);
  write_byte(0X60);
  CS_L;
  DI_L;
 }
 ////////////////////////////以下93c46擦写禁止/////////////////////////////////////////////////////
 void write_ds()
 {
  DI_L;
  CS_H;
  write_byte(0X02);
  write_byte(0X00);
  CS_L;
  DI_L;
 }
//////////////////////////////////////////////////////////////////
unsigned char read_eeprom (u8 addr)
   {
  u8 data_r;
  addr&=0x7f;
  DI_L;
  CS_H;
   write_byte(0X03);    ///读操作码
  write_byte(addr);    ///要读的地址
  data_r=read_byte();  ///读数据
  CS_L;
    return data_r;
   }
 

/////////////////////////////////////////////////////////////////////
void  write_eeprom(u8 edata,u8 addr)
  {
 u8 user_d;    ////写指令码
 user_d=addr|0x80;
 
 DI_L;     
 CS_H;
  write_byte(0x02);
 write_byte(user_d);
 write_byte(edata);
 display(); 
 DI_L;
  CS_L;
 
 }


//////////////////////////////////////////////////////////////////////////
 void save_key(u16 save_d,u8 ad_h,u8 ad_l)
    {  
     u8 ele_tmp;   
     write_en();   
     ele_tmp=(unsigned char)save_d;      ////字节低位
     write_eeprom(ele_tmp,ad_l); ////写93C46
     save_d>>=8;
     ele_tmp=save_d;    
   display(); 
     write_eeprom(ele_tmp,ad_h);  
     write_ds();   
     }
 
 ///////////////////////////////////////////////////////////////////////////////////
 int read_int(unsigned char h_addr,unsigned char l_addr)
      {
      u8 load_tmp;
      u16 load_int_tmp;
      load_tmp=read_eeprom(h_addr);       ////加载数据高位
      load_int_tmp=load_tmp;
      load_int_tmp=load_int_tmp<<8;
      load_tmp=read_eeprom(l_addr);      ////加载数据低位
      load_int_tmp+=load_tmp;   
      return load_int_tmp;
      }



热门招聘
相关主题

官方公众号

智造工程师