程序如下:程序运行时,对25c040不能写入,更别说读出啦。基于Protues仿真的,请各位高手不吝赐教...
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPI_SCK = P2^3;
sbit SPI_SI = P2^4;
sbit SPI_SO = P2^5;
sbit SPI_CS = P2^6;
sbit SPI_LED = P2^7;
void Data_Send(uchar Sdata);//数据传送函数,方便调用
uchar Data_Rece(void);//数据接收函数,方便调用
void Write_Enable(void);//写使能函数
void Write_Disable(void);//写禁止函数
void Byte_Write(uchar Addr,uchar Wdata);//字节写函数
void Page_Write(uchar Addr,uchar *s);//页写函数
uchar Byte_Read(uchar Addr);//读数据函数
void main(void)
{
SPI_CS = 0;
_nop_();
SPI_LED = 0;
Write_Enable();//写使能函数
_nop_();
_nop_();
// Write_Disable();//写禁止函数
Byte_Write(0xaa,0xaa);//字节写函数
SPI_LED = 1;
// while(1);
// Byte_Read(0x00);//读数据函数
// while(1);
}
void Data_Send(uchar Sdata)//数据传送函数,方便调用
{
uint i;
for(i=8; i>0; i--)
{
SPI_SCK = 0;
_nop_();
_nop_();
_nop_();
if(Sdata&0x80)//判断高位是否为1
SPI_SO = 1;
else
SPI_SO = 0;
_nop_();
_nop_();
SPI_SCK = 1;
Sdata <<= 1;
}
}
uchar Data_Rece(void)//数据接收函数,方便调用
{
uint i;
uchar Temp_data;
for(i=8; i>0; i--)
{
SPI_SCK = 1;
_nop_();
_nop_();
_nop_();
if(SPI_SI)
Temp_data |= 0x01;
_nop_();
_nop_();
_nop_();
SPI_SCK = 0;
Temp_data <<= 1;
}
return Temp_data;
}
void Write_Enable(void)//写使能函数
{
SPI_CS = 0;
_nop_();
Data_Send(0x06);//发送写使能指令
_nop_();
SPI_CS = 1;
}
void Write_Disable(void)//写禁止函数
{
SPI_CS = 0;
_nop_();
Data_Send(0x04);//发送写禁指令
_nop_();
SPI_CS = 1;
}
void Byte_Write(uchar Addr,uchar Wdata)//字节写函数
{
SPI_CS = 0;
_nop_();
Data_Send(0x02);//发送写数据止指令
Data_Send(Addr);
Data_Send(Wdata);
_nop_();
SPI_CS = 1;
}
void Page_Write(uchar Addr,uchar *s)//页写函数
{
SPI_CS = 0;
_nop_();
Data_Send(0x02);//发送写数据指令
Data_Send(Addr);
Data_Send(*s++);
_nop_();
SPI_CS = 1;
}
uchar Byte_Read(uchar Addr)//读数据函数
{
uchar Rdata;
SPI_CS = 0;
_nop_();
Data_Send(0x03);//发送读数据指令
Data_Send(Addr);
Rdata = Data_Rece();
_nop_();
SPI_CS = 1;
return Rdata;
} |