单片机 模拟SPI程序

int SPI_readByte(void)
{
  int i;//j,k;
  int CTdata=0;
  i=7;
 
  for(i=7;i>=0;i--)
  {

    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
   
    CTdata=CTdata<<1;
    SPI_CLK=1;
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
     //}
     if(SPI_MISO) CTdata|=0x01;
     else CTdata&=0xFE;
    SPI_CLK=0;
   
    
  }
   SPI_CLK=0;
  return CTdata;
}
void SPI_SendByte(unsigned char data)
{
  int i,j;
 // int CTdata=data;
  i=7;
 // for(i=7;i>=0;i--)
  do
  {
    SPI_CLK=0; 
    j=0x01<<i;  
    if(data&j)
      SPI_MOSI=1;
    else
      SPI_MOSI=0;
    SPI_CLK=1;
   
   
     i--;
  }while(i>=0);
   SPI_CLK=0; 
}

 

在读和写的时候根据需要进行一定的延时等待

 

posted @ 2013-03-17 17:17  天涯海角路  阅读(378)  评论(0)    收藏  举报