英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 一个高效的模拟SPI的读写函数。 [打印本页]

作者: winnie    时间: 2009-4-18 13:40
标题: 一个高效的模拟SPI的读写函数。
unsigned char RW_SPI(unsigned char val){
unsigned char BitCounter;
for (BitCounter=8;BitCounter!=0;BitCounter--){
  CLK=0;
  //write
  DI=0;
  if(val&0x80)                                
   DI=1;
  val<<=1;
  CLK=1;
  //read
  if(DO)
   val|=1;                                       
}
CLK=0;
return val;
}
此函数把SPI的读写功能集成在一块,传递的val既是向SPI写的数据,也是从SPI读取的数据,只需要在执行读或写之前把MCU的I/O脚设置成相应的输出或输入即可。(因为在大部分应用中,是把SPI的DI和DO相连并用MCU的一个IO口来读写)。
调用示例:
#define NULL 0
SETIO=OUTPUT;
CS=0;
RW_SPI(0xab);
CS=1;
//向SPI写0xab数据。


CS=0;
SETIO=INPUT;
Byte=RW_SPI(NULL);                  //这里传递的NULL是没有任何意义的,可以是任何数据,只是为了保证函数
                                                               //的格式.
CS=1;
//读取SPI数据。

此函数对于许多低档片子来模拟SPI非常有用,代码量小,功能齐全。稍微修改,可以模拟SPI的其它模式。




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2