求救~5045读全是ff...
调5045调了两天了,自己写的程序,网上拷的程序通通都读出来是ff,连读标志寄存器也是,也加了很多的延迟,电路就是面包板上搭建的,只接了个5045,实在是不知道什么地方出错了,求大家帮忙.
我写的程序如下,大家帮忙看看有什么问题吧.
#include <REG52.H>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_();_nop_();_nop_();
#define STATUS_REG 0x00
#define MAX_POLL 99
//-----------x5045指令-----------------//
#define WREN 0x06 //写允许
#define WRDI 0x04 //写禁止
#define RDSR 0x05 //读状态寄存器
#define WRSR 0x01 //写状态寄存器
#define READ0 0x03 //读数据
#define WRITE0 0x02 //写数据
#define READ1 0x0B //读数据
#define WRITE1 0x0A //写数据
//-----------SPI通讯接口-----------------//
sbit SI=P1^5;
sbit SCK=P1^6;
sbit SO=P1^4;
sbit CS=P1^3;
void wren_cmd();
void wrdi_cmd();
void wrsr_cmd();
uchar rdsr_cmd();
uchar byte_read(uchar add,bit block);
void byte_write(uchar add,uchar bytedata,bit block);
void rst_wdog();
void wip_poll();
void outbyt(uchar bytedata);
uchar inbyt();
//**********************WREN************************
void wren_cmd()
{
SCK=0;
CS=0;
outbyt(WREN);
SCK=0;
CS=1;
}
//**********************WRDI************************
void wrdi_cmd()
{
SCK=0;
CS=0;
outbyt(WRDI);
SCK=0;
CS=1;
}
//**********************WRSR************************
void wrsr_cmd()
{
SCK=0;
CS=0;
outbyt(WRSR);
_nop_();_nop_();_nop_();
outbyt(STATUS_REG);
_nop_();_nop_();_nop_();
SCK=0;
CS=1;
wip_poll();
}
//**********************RDSR************************
uchar rdsr_cmd()
{
uchar buff;
SCK=0;
CS=0;
outbyt(RDSR);
_nop_();_nop_();_nop_();
buff=inbyt();
_nop_();_nop_();_nop_();
SCK=0;
CS=1;
return buff;
}
//**********************byte_WR*********************
void byte_write(uchar add,uchar bytedata,bit block)
{
SCK=0;
CS=0;
if(!block)
{
outbyt(WRITE0);
}
else
{
outbyt(WRITE1);
}
_nop_();_nop_();_nop_();
outbyt(add);
_nop_();_nop_();_nop_();
outbyt(bytedata);
_nop_();_nop_();_nop_();
SCK=0;
CS=1;
wip_poll();
}
//**********************byte_RD*********************
uchar byte_read(uchar add,bit block)
{
uchar buff;
SCK=0;
CS=0;
if(!block)
{
outbyt(READ0);
}
else
{
outbyt(READ0);
}
_nop_();_nop_();_nop_();
outbyt(add);
_nop_();_nop_();_nop_();
buff=inbyt();
_nop_();_nop_();_nop_();
SCK=0;
CS=1;
return(buff);
}
//**********************rst_dog*******************
void rst_wdog()
{
CS=0;
_nop_();_nop_();_nop_();
CS=1;
}
//**********************wip_poll******************
void wip_poll()
{
uchar i;
for(i=0;i <MAX_POLL;i++)
{
if(rdsr_cmd()&0x01)
continue;
return;
}
}
//**********************outbyt********************
void outbyt(uchar bytedata)
{
uchar i;
for(i=0;i <8;i++)
{
SCK=0;
_nop_();_nop_();_nop_();
if(bytedata&0x80)
SI=1;
else
SI=0;
SCK=1;
_nop_();_nop_();_nop_();
bytedata=bytedata < <1;
}
SI=0;
}
//**********************inbyt********************
uchar inbyt()
{
uchar buff,i;
SCK=1;
_nop_();_nop_();_nop_();
SCK=0;
_nop_();_nop_();_nop_();
buff=buff|(uchar)(SO);
for(i=0;i <7;i++)
{
buff=buff < <1;
SCK=1;
_nop_();_nop_();_nop_();
SCK=0;
_nop_();_nop_();_nop_();
buff=buff|(uchar)(SO);
}
return buff;
}
//**********************test********************测试读它的状态寄存器,结果读出ff...
main()
{
uchar aa;
aa=rdsr_cmd();
_nop_();_nop_();_nop_();
}
发表时间:2006年8月1日16:53:51