打印

可以通过软件手段对93c86达成页写功能吗?

[复制链接]
1632|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xianting77|  楼主 | 2009-8-27 22:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近调试93C86 ,可以正确的读写, 但联想到别的EEPROM支持页写功能,可以通过软件手段对93c86达成页写功能吗?
刚刚开始写代码,请各位多提宝贵意见
void _WaitTime1us(void)
{
    // +14cycle
    DelayNop(); // +1cycle
    DelayNop(); // +1cycle = 16cycle
}

//发送操作码
void  Send(UBYTE Command, UBYTE opCode)
{
           UBYTE i ,data ;

     for(i=0;i<opCode;i++)
     {
      data=Command&(0x80>>i);                
      if(data)
                      SET_DI;
          else
                    CLR_DI;
          SET_SK;
      CLR_SK;
     }
}


/*以8bit形式发送操作码
void  Send(UBYTE Command)
{
           UBYTE i ,data ;

     for(i=0;i<8;i++)
     {
      data=Command&(0x80>>i);                
      if(data)
                      SET_DI;
          else
                    CLR_DI;
           SET_SK;
       CLR_SK;
     }
}
*/

//发送16bit数据
void  SendData(UWORD Data)
{
         
         UBYTE  i ;
         UWORD  data ;
     for(i=0;i<16;i++)
     {
      data=Data&(0x8000>>i);                
      if(data)
                      SET_DI;
          else
                    CLR_DI;
           SET_SK;
       CLR_SK;
     }
       
}

//发送地址
void SendAddr(UWORD Addr ,UBYTE mode)
{

   UBYTE  i, AddrLength =0;
   UWORD  data ;
    if (mode)
        AddrLength = 10 ;
    else
        AddrLength = 9 ;       

     for(i=0 ;i<=AddrLength;i++)
     {
      data=Addr&(0x0200>>i) ;                
      if(data)
                      SET_DI ;
           else
                    CLR_DI;
                       
                     SET_SK;
           CLR_SK;
                      
      }
   
       
}
//写允许
void Send_EWenable(void)
{
    SET_CS ;
    Send(ep_ewenable,ep_ewen_op)        ;
//        Send(ep_ewenable);
        Send(0x00, ep_null_op);
    CLR_CS ;       
}
//写禁止
void Send_EWdisable(void)
{
    SET_CS ;
        Send(ep_ewdisable,ep_ewds_op );
    Send(0x00, ep_null_op);
    CLR_CS ;       
}

//全写
void WriteAll(UWORD  Data)
{
        Send_EWenable();
        SET_CS ;
        Send( ep_write_all,ep_write_all_op);
        Send(0x00, ep_null_op);
    SendData(Data);
    CLR_CS ;
        DelayNop();
        DelayNop();
         CLR_DI ;
        DelayNop();
        DelayNop();
        SET_CS ;
        while(!TST_DO){};
    CLR_CS ;       

}
//全擦
void EraseAll(void)
{
        SET_CS ;
        Send(ep_erase_all,ep_erase_all_op);
    Send(0x00, ep_null_op);
    CLR_CS ;
        CLR_DI ;
        DelayNop();
        DelayNop();
       
        SET_CS ;
         while(!TST_DO){};
     CLR_CS ;
         
}


//读取指定地址的数据
UWORD ReadEEP_WORD(UWORD  Addr )
{
     UWORD  EEP_WORD ,i ;
     SET_CS ;
//    Send(ep_read ,3) ;
     Send(ep_read,ep_read_op) ;
     SendAddr(Addr , mode16bit ) ;

     CLR_DI ;       
     EEP_WORD =0;       
     for(i=0;i<16;i++)
             {
          SET_SK;
          CLR_SK;
         if(TST_DO)   
          EEP_WORD|=0x8000>>i ;
         
             }
         
      CLR_CS ;         
     return(EEP_WORD);       
         
}


/*  连续读数据
void ReadEEP_SEQ_WORD(UWORD *ptr,UWORD Length, UWORD Addr)
{
     while(Length>0)
         {
                 *ptr=  ReadEEP_WORD( Addr );
                 
                 Length-- ;
                 Addr++ ;
                 ptr++;
                }       
}
*/

void ReadEEP_SEQ_WORD(UWORD *ptr,UWORD Length, UWORD Addr)
{

     UWORD  i ;                 
     SET_CS ;
     Send(ep_read,ep_read_op) ;
     
          SendAddr(Addr , mode16bit ) ;
      CLR_DI ;
         
         while(Length>0)
         {
        
      for(i=0;i<16;i++)
             {
               SET_SK;
               CLR_SK;
         if(TST_DO)   
           *ptr|=0x8000>>i ;
                }  
           Length-- ;
           ptr++;          
                  
           }
         
      CLR_CS ;         
}
//连续写多个数据
void Write_SEQ_WORD( UWORD Length, UWORD Addr)
{
        UWORD Data =200 ;
         while(Length>0)
        {
                 
          WriteEEP_BYTE ( Addr,  Data);
          Data++ ;  
          Addr++;
          Length--;
        }
}       

//写一个数据
void  WriteEEP_BYTE(UWORD Addr, UWORD Data)
{
   
    Send_EWenable();
    SET_CS ;
//   Send( ep_write,3) ;
        Send( ep_write,ep_write_op ) ;
    SendAddr(Addr , mode16bit ) ;
        SendData(Data) ;
   
    CLR_CS;
        DelayNop();
        DelayNop();

    CLR_DI ;
        DelayNop();
        DelayNop();       
        SET_CS;
        while(!TST_DO){};
    CLR_CS ;
       
    Send_EWdisable;         
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

45

帖子

2

粉丝