求两个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;
}
片选信号也选则了,就是不能正确是接受数据,求指点 展开
主机发送程序:
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;
}
片选信号也选则了,就是不能正确是接受数据,求指点 展开
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.还需要加入起始停止同步协议,可根据需要进行完善
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询