利用单片机来模拟SPI时序

2019-04-15 12:08发布

直接上代码 //首先定义好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;
}