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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3074|回复: 0
打印 上一主题 下一主题

一个高效的模拟SPI的读写函数。

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-18 13:40:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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的其它模式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-5-2 19:49 , Processed in 0.051062 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表