以下是我的读写函数,请高手拍砖
#define write 0xfe //最低位保证为0则为写命令
#define read 0x01 //最低位保证是1则为读命令
void WriteSPI(unsigned char index, Parameter)
{ unsigned char data i,temp;
temp=index<<1&write;
SPI_CS=1;
SPI_SCL=1;
SPI_CS=0;
delay_ms(2);
for(i=0x80;i!=0;i/=2) //发送地址码和写命令
{ //SPI_SCL=0;
//SPI_CS=0;
//SPI_SDA=index&i;
SPI_SDA=temp&i;
SPI_SCL=0;
delay_ms(3);
SPI_SCL=1;
delay_ms(2);
}
// delay_ms(5);
for(i=0x80;i!=0;i/=2) //先高后低,写数据
{
// SPI_SCL=0;
SPI_SDA=Parameter&i;
SPI_SCL=0;
delay_ms(3);
SPI_SCL=1;
delay_ms(2);
}
delay_ms(2);
SPI_CS=1;
}
unsigned char ReadSPI(unsigned char index)
{ unsigned char i,temp,temp2=0;
temp=index<<1|read;
SPI_CS=1;
SPI_SCL=1;
SPI_CS=0;
delay_ms(1);
for(i=0x80;i!=0;i/=2)
{ //SPI_SCL=0;
SPI_SDA=temp&i;
//delay_ms(1);
SPI_SCL=0;
delay_ms(3);
SPI_SCL=1;
delay_ms(2);
}
for(i=8;i>0;i--)
{
SPI_SCL=0;
temp2<<=1;
temp2|=SPI_SDA;
//delay_ms(1);
//SPI_SCL=0;
delay_ms(3);
SPI_SCL=1;
delay_ms(2); //5
}
delay_ms(2); //5
SPI_CS=1;
return temp2;
}
|