有偿求两个51用三根普通的IO线模拟SPI通讯

lbkbox 2006-05-26 06:49:05
有偿求两个51用三根普通的IO线模拟SPI通讯,
谁如果给我的源程序能够实用。
我可以付适当的费用,因为公司现在布置给我的任务,我搞不定,要不然我就要走人了。
...全文
360 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbkbox 2006-05-28
  • 打赏
  • 举报
回复
谢谢上面的,你只讲到了发送和接收的过程,没有控制过程,就是怎么杂让发送的一方知道数据已经完全发送出去了呢? 要知道这是没有硬件SPI功能的通讯,所以要自已模拟一个时钟,自已要控制时间。。。。。
elec001 2006-05-27
  • 打赏
  • 举报
回复
SPI是4根线,给你个参考

sbit WM_CS=P0^0;//OUT;//初态:1
sbit WM_MOSI=P0^1;
sbit WM_MISO=P0^5;
sbit WM_SCLK=P0^4;


#define uint8 unsigned char

//spi in out
unsigned char HW_MasterIO(unsigned char HW_SPI_out)
{
uint8 BitCounter; /* bit counter */
uint8 TempWriteData; /* temporarily store the data */
uint8 TempReadData; /* temporarily store the data */

TempWriteData=HW_SPI_out;
for (BitCounter=0; BitCounter<8; BitCounter++)
{
/* give the correspond bit to mosi */
if ((TempWriteData&0x80) == 0x80)
{
WM_MOSI = 1;
}
else
{
WM_MOSI = 0;
}
/* modify the data */
TempWriteData = TempWriteData<<1;

/* generator the rising clock */
WM_SCLK = 0;
_nop_();
WM_SCLK = 1;

/* read the SPI interface */
TempReadData = TempReadData<<1;
if (WM_MISO == 1)
{
TempReadData = TempReadData + 1;
}
}
/* read the SPI interface */
return(TempReadData);
}


lala21121 2006-05-27
  • 打赏
  • 举报
回复
当然有区别
道理差不多
lbkbox 2006-05-27
  • 打赏
  • 举报
回复
还是有区别的吧?
lala21121 2006-05-26
  • 打赏
  • 举报
回复
看我的贴------“高分求救(I/O模拟串口通信问题) 急 ”---就在这个版面里
这里能实现你的要求
只不过我用的是51和pc通信 道理是一样的

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧