本帖最后由 jyynl 于 2014-4-8 18:52 编辑
时序图如下
我是用的51单片机做MCU,模拟SPI,用的是11.0592的晶振
我写的程序如下
//写入控制寄存器
void Write_CommandReg(uchar add,uchar com)
{
uchar i;
uchar mark;
cs=0;
mark=0x80;
_nop_();
for(i=0;i<8;i++)
{
sck=0;
if(add&mark)
{
MOSI=1;
}
else
{
MOSI=0;
}
sck=1;
mark>>=1;
}
mark=0x80;
for(i=0;i<8;i++)
{
sck=0;
if(com&mark)
{
MOSI=1;
}
else
{
MOSI=0;
}
sck=1;
mark>>=1;
}
_nop_();
cs=1;
}
//读取控制寄存器
uchar Read_CommandReg(uchar add)
{
uchar i;
uchar mark;
uchar readdata;
cs=0;
mark=0x80;
readdata=0;
_nop_();
for(i=0;i<8;i++)
{
sck=0;
if(add&mark)
{
MOSI=1;
}
else
{
MOSI=0;
}
sck=1;
mark>>=1;
}
_nop_();
for(i=0;i<8;i++)
{
readdata<<=1;
sck=0;
sck=1;
if(MISO)
{
readdata|=0x01;
}
}
_nop_();
cs=1;
return(readdata);
}
//写入数据寄存器
void Write_DataReg(uchar add,uint dat)
{
uchar i;
uchar mark;
uint marklong;
cs=0;
mark=0x80;
marklong=0x8000;
_nop_();
for(i=0;i<8;i++)
{
sck=0;
if(add&mark)
{
MOSI=1;
}
else
{
MOSI=0;
}
sck=1;
mark>>=1;
}
for(i=0;i<16;i++)
{
sck=0;
if(dat&marklong)
{
MOSI=1;
}
else
{
MOSI=0;
}
sck=1;
marklong>>=1;
}
_nop_();
cs=1;
}
//读取数据寄存器
uint Read_DataReg(uchar add)
{
uchar i;
uchar mark;
uint readdata;
cs=0;
mark=0x80;
readdata=0;
_nop_();
for(i=0;i<8;i++)
{
sck=0;
if(add&mark)
{
MOSI=1;
}
else
{
MOSI=0;
}
sck=1;
mark>>=1;
}
_nop_();
for(i=0;i<16;i++)
{
readdata<<=1;
sck=0;
sck=1;
if(MISO)
{
readdata|=0x0001;
}
}
_nop_();
cs=1;
return(readdata);
}
希望各位高手给指正一下 |
|