直接上代码
//首先定义好I/O口
sbit SDO=P1^0;
sbit SDI=P1^1;
sbit SCK=P1^ 2;
sbit SCS=P1^3;
sbit ACC_7= ACC^7;
unsigned int SpiRead(unsigned char add)
{
unsigned char i;
unsigned int datal6;
add&=0x3f;/*6位地址*/
add |=0x80;/*读操作码l0*/
SDO=1;/*发送1为起始位*/
SCK=0;
SCK=1;
for(i=0;<8;i++)/*发送操作码和地址*/
{
if(add&0x80==1)
SDO=1;
else
SDO=0;
SCK=0;/*从设备上升沿接收数据*/
SCK=1;
add<<= 1;
}
SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/
SCK=0;
datal6<<= 1;/*读16位数据*/
for(i=0;<16;i++)
{
SCK= 1;
_nop_();
if(SDI==1)
datal6|=0x01;
SCK =0;
datal6< < =1;
}
return datal6;
}