导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请看一下我的5045为什么写不进去?[guest]

 *第9780篇: 请看一下我的5045为什么写不进去?

  
楼 主:guest 2003年4月3日16:16
 请看一下我的5045为什么写不进去?
#include   <at89x52.h>  
#include   <intrins.h>  
#include   <ABSACC.h>  

#define  uchar unsigned char
#define  uint  unsigned int


sbit SO=P2^4;           /*5045输出*/
sbit SI=P2^3;           /*5045输入*/
sbit SCK=P2^2;          /*5045时钟*/
sbit SCS=P3^5;          /*5045片选*/

/******************************************************************************
向 X25045 发送命令 (8 bit) (初始:SCS = 0), SCK上升沿锁存数据
******************************************************************************/
void    sent_X25045( uchar n )
{
uchar    i;

    for ( i=0x80; i>  =0x01; i=i>  >  1 )
    {
     SCK = 0;    /* SCK=0 */
     if ( ( n & i ) == 0 ) SI = 0; else SI = 1;    /* 置SI */
     SCK = 1;    /* SCK=1 */
     SI=0;        /* 清SI */
    }
}

/******************************************************************************
从 X25045 读出数据 (8 bit) (初始:SCS = 0), SCK下降沿输出数据
******************************************************************************/
uchar    get_X25045()
{
uchar    i,n;

    n=0x00;
    for ( i=0x80; i>  =0x01; i=i>  >  1 )
    {
       SCK = 1;
       SO = 1;        /* 置 SO 为读 */
       SCK = 0;

      if ( SO == 1 ) n = ( n | i );
    }
    return( n );
}

/******************************************************************************
读 X25045 状态寄存器 (8 bit)
******************************************************************************/
uchar    rdsr_X25045()
{
uchar    n;
    SCK = 0;
    SCS = 0;
    sent_X25045( 0x05 );     /* RDSR =>   X25045 */
    n = get_X25045( );
    SCK = 0;
    SCS = 1;
    return( n );
}

/******************************************************************************
写 X25045 等待完成
******************************************************************************/
void    wrok_X25045()
{
uchar    i;
    for ( i=0; i  <=99; i++ )
    {
     if ( ( rdsr_X25045() & 0x01 ) == 0x00 ) break;
    }
}

/******************************************************************************
写 X25045 状态寄存器 (8 bit)
******************************************************************************/
void    wrsr_X25045( uchar n )
{

    SCK = 0;
    SCS = 0;
    sent_X25045( 0x01 );     /* WRSE =>   X25045 */
    sent_X25045( n );        /* n =>   X25045 看门狗定时, 块保护范围,  */
    SCK = 0;
    SCS = 1;
    wrok_X25045();
}

/******************************************************************************
置 X25045 写使能
******************************************************************************/
void    wren_X25045()
{
    SCK = 0;
    SCS = 0;
    sent_X25045( 0x06 );     /* WREN =>   X25045 写使能 */
    SCK = 0;
    SCS = 1;
}

/******************************************************************************
置 X25045 写禁止
******************************************************************************/
void    wrdi_X25045()
{
    SCK = 0;
    SCS = 0;
    sent_X25045( 0x04 );     /* WREN =>   X25045 写使能 */
    SCK = 0;
    SCS = 1;
}

/*从5045的地址add读出数据  */
uchar  rdbyte_X5045(uchar add)
 {
    uchar ret;
 SCK=0;
 SCS=0;
 sent_X25045(0x03);/*read data from low 8 bit*/
 sent_X25045(add);
 ret=get_X25045();
 SCK=0;
 SCS=1;
 return(ret);

}

/******************************************************************************
初始化 X25045
******************************************************************************/
void    csh_X25045()
{
uchar    n;

    n = 0x00;     /* 0x00 =>   X25045状态寄存器
                   看门狗定时:1.4s, 块保护范围: NO  */

    if ( rdsr_X25045() != n )
    {
    wren_X25045();
    wrsr_X25045( n );
    wrdi_X25045();
    }
}


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


uchar code  mm[1]={0x99};

main()
{

uchar i;
csh_X25045();
//rst_wdog();
SCS=1;
wren_X25045();
sent_X25045(0x02);    /*send write data command */
sent_X25045(0);       /*send data address*/
sent_X25045(mm[0]);  /*send data*/
wrok_X25045();        /*write finished*/ 
i=rdbyte_X5045(0x00);/*read out the byte*/
}


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

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


[上一篇主题]:[em00] 求助,急急!HA17358:

[下一篇主题]:急!模拟spi接口在硬件上如何实现?[原创]