求两个51单片机模拟SPI通信程序,主机和从机的程序!! 20

我写的程序,但是就是接受不到正确的数据主机发送程序:voidSendData_SPI(ucharDATA)//主设备向从设备发送数据{uchari;SCLK=1;MOSI... 我写的程序,但是就是接受不到正确的数据
主机发送程序:
void SendData_SPI(uchar DATA) //主设备向从设备发送数据
{
uchar i;
SCLK=1;
MOSI=1;
delay(5);

for(i=0;i<8;i++)
{

SCLK=0;
if(DATA&0x80)
MOSI=1;
else
MOSI=0;
DATA=DATA<<1;
delay(20);//延时10个指令周期,以备从设备接收
SCLK=1;
delay(20);
}
SCLK=0;
MOSI=1;
delay(20);
SCLK=1;
}
从机接受程序:
uchar RecData()
{
uchar j;
uchar inbuf=0;
for(j=0;j<8;j++)
{
while(!SCLK)//等待下降沿
{

inbuf=inbuf<<1;
if(MOSI)
inbuf=inbuf|0x01;
else
inbuf=inbuf&0xfe;

}
}

return inbuf;
}
片选信号也选则了,就是不能正确是接受数据,求指点
展开
 我来答
滓明07
2017-10-14 · TA获得超过288个赞
知道小有建树答主
回答量:445
采纳率:68%
帮助的人:57.2万
展开全部
1.定义三个gpio: p0-sclk, p1-sdi, p2-sdo;p0用于模拟spi的clock,p1用于接收数据,p2用于f发送数据;硬件上单片机A的p0接单片机B的p0,A的p1接B的p2,A的p2接B的p12.发送程序:clock拉低,sdo输出0或1(数据),延时一定时间,clock拉高,延时一定时间,这样A就发送一位数据到B,循环8次就发送一个字节数据3.接收程序:检测clock状态,如果为低,就读取sdi,直到clock拉高,结束该次输入,重复8次,读取一个字节注意:1。clock空闲状态为高,发送数据就拉低;2.还需要加入起始停止同步协议,可根据需要进行完善
做而论道
高能答主

推荐于2017-10-14 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
while(!SCLK)//等待下降沿
{

……
接收方,不仅仅要有《等待下降沿》,还要有《等待上升沿》。

等到了这两个,才算收到了一位数。

然后再:inbuf=inbuf<<1;。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式