请看一下我的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*/
}
发表时间:2003年4月3日16:16:42