中职学校专家评估意见:SPI单主单从问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 02:55:56
//以下为从机程序
while(1)
{
while(SS);
SPSTAT = 0xc0;
while( (SPSTAT & 0x80) == 0);
temp = SPDAT;
SPSTAT = 0xc0;
SPDAT = 0x98;
}

//以下为主机程序
while(1)
{
KB1=0;
SPSTAT=0xc0;
SPDAT=0x12;

while ((SPSTAT&0x80)==0); // 等待SPIF 位为1,数据发送完毕
KB1=1;
dat=SPDAT;
send_char_com2(dat) ; //发送数据至串口
delay(1000);
}

为什么我串口收到的数据是很多垃圾数据(12和00,12是我主机发到从机的)中间夹杂着我需要的98这个数呢?是不是程序有问题呢?
zzp1219:

等待只有一个,因为这里主机下传数据的时候从机同时上传数据的。所以只有一次等待SPIF置位

你这个问题太专业了,在这问不大合适,
程序流程看上去是主机发送12到从机,然后从机发送98到主机,这样,主机应该等待发送结束,然后等待接受,所以应该有两个while等待过程,你再仔细看看,建议修改主机
//以下为主机程序
while(1)
{
KB1=0;
SPSTAT=0xc0;
SPDAT=0x12;

while ((SPSTAT&0x80)==0); // 等待SPIF 位为1,数据发送完毕
while ((SPSTAT&0x80)==0); // 等待SPIF 位为1,数据接收完毕
KB1=1;
dat=SPDAT;
send_char_com2(dat) ; //发送数据至串口
delay(1000);
}