导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:X25045管脚说明[wcxandwxh]

 *第1564篇: 硬件:X25045管脚说明

  
楼 主:wcxandwxh 2001年12月18日20:29
 硬件:X25045管脚说明
第一脚为片选(高电平选中),第二脚为串行数据输出端,第3,8脚短接到电源,第4脚为
地,第五脚为串行数据输入端(由CPU向其发送指令),第六脚为串行移位时钟,第七脚接
CPU的复位脚。
  
2楼:寄存器 2001年12月20日08:56
 x25045的读写函数
 #pragma registerbank(0)
#define wp_addr    0xff /* wp address in fpga, 0xff=none */
//sbit WP   = P1 ^ 5;
sbit SCLK = P1 ^ 3;
sbit SDI  = P1 ^ 2;
sbit SDO  = P1 ^ 1;
sbit SCS  = P1 ^ 0;
/*-------------------------------------------------------------------*/
#ifndef XBYTE
#define XBYTE ((unsigned char volatile *)0x20000L)
#endif
#define uchar unsigned char

#define wren_inst  6    /* write enable latch instruction (wren) */
#define wrdi_inst  4    /* write disable latch instruction (wrdi) */
#define wrsr_inst  1    /* write status register instruction (wrsr) */
#define rdsr_inst  5    /* read status register instruction (rdsr) */
#define write_inst 2    /* write memory instruction (write) */
#define read_inst  3    /* read  memory instruction (read) */
#define status_reg 0    /* status register, watch dog timeout=1.4s, 
protected array=no */

/********************************************************************/
/* read/write 25165 subroutines, 02/16-2000 by hhl */

void outbyte( uchar c)
{
    uchar i;
    for (i = 0; i   < 8;i++)
    {
        SCLK = 0;
        SDI = c & 0X80;
        c   <  <= 1;
        SCLK = 1;
    }
    SDI = 0;
}

uchar inbyte(void)
{
    uchar i,c;
    c = 0;
    for (i = 0; i   <8 ;i++)
     {
        SCLK = 1;
        SCLK = 0;
        c   <  <= 1;
        c |= SDO;
     }
    return c;
}

void wren_cmd(void)
{
    SCLK = 0;
    SCS = 0;
    outbyte(wren_inst);
    SCLK = 0;
    SCS = 1;
}

uchar rdsr_cmd(void)
{
    uchar c;

    SCLK = 0;
    SCS = 0;
    outbyte(rdsr_inst);
    c = inbyte();
    SCLK = 0;
    SCS = 1;
    return c;
}

void init_x25165(void)
  {
    #if wp_addr !=0xff
        XBYTE[wp_addr]=1;     /* x25045 /wp high */
    #endif
    wren_cmd();               /* x25045 write enable */
    SCLK = 0;
    SCS = 0;
    outbyte(wrsr_inst);
    outbyte(status_reg);
    SCLK = 0;
    SCS = 1;
    while ((rdsr_cmd() & 0X01) == 1);
    #if wp_addr !=0xff
        XBYTE[wp_addr]=0;         /* x25045 /wp low */
    #endif
  }


/*===================================================================
读 X25165 中数据放入外部RAM中
入口:X25165地址:dog_add,外部RAM地址:add,要读的字节数:len
===================================================================*/
void rdata( unsigned int dog_add, unsigned int add,  unsigned int len)
{
    uchar c = read_inst;
    unsigned int j;

    SCLK = 0;
    SCS = 0;
    outbyte(c);
    outbyte(dog_add>  >  8);
    outbyte(dog_add);
    for (j = 0;j   < len; j++)
       {
          c = inbyte();
          XBYTE[0xfff6]=add>  >  8;
          XBYTE[0xfff7]=add;
          XBYTE[0xfff8]=c;
          add++;
       }
    SCLK =0;
    SCS = 1;
}

/*===================================================================
将外部RAM中数据写入 X25165 中
入口:X25165地址:dog_add,外部RAM地址:add,要写的字节数:len
===================================================================*/
void sdata( unsigned int dog_add, unsigned int add,  unsigned int len)
  {
    unsigned char c;
    unsigned int j;
    unsigned int B_TEMP = dog_add;

    #if wp_addr !=0xff
        XBYTE[wp_addr]=1;         /* x25045 /wp high */
    #endif

    for (j = 0;j != len; j++)
      {
        wren_cmd();               /* x25045 write enable */
        SCLK = 0;
        SCS = 0;
        c = write_inst;
        outbyte(c);
        outbyte(B_TEMP>  >  8);
        outbyte(B_TEMP);
        
        XBYTE[0xfff6]=add>  >  8;
        XBYTE[0xfff7]=add;
        c=XBYTE[0xfff3];        /* 读 RAM 中的数据 */
        outbyte(c);
        SCLK =0;
        SCS = 1;
        B_TEMP++;
        add++;
        while ((rdsr_cmd() & 0X01) == 1);   /* wait for write finish */
      }

    #if wp_addr !=0xff
        XBYTE[wp_addr]=0;         /* x25045 /wp low */
    #endif
  }

void rst_wdog(void)
  {
    SCS = 0;
    SCS = 1;
  }
/****************************************************************/

  
3楼:寄存器 2001年12月20日16:42
 x25045的程序

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:硬件:求解新版atmel89c52 

[下一篇主题]:AVR单片机:SPI