本帖最后由 Designner 于 2012-2-10 15:06 编辑
请教各位老大,如下是网络上找的IO口模拟SPI总线发送接收数据的程序,已知从设备上升沿采集数据,下降沿输出数据。有几个问题不明白,用红色标出来了,请老大指点一下,谢谢!
INT8U SpiTxRxByte(INT8U dat)
{
INT8U i,temp;
temp = 0;
SCK = 0; //已知从设备上升沿采集。时钟置低,准备发送一BIT数据
for(i=0; i<8; i++)
{
if(dat & 0x80)
{
MOSI = 1; //数据已经准备好
}
else MOSI = 0;
dat <<= 1;
SCK = 1; //时钟置高,制造一个上升沿,数据打入从设备
_nop_;
_nop_;
_nop_;
_nop_;
temp <<= 1; //这里开始不明白了,怎么没有制造下降沿就读从设备的数据呢。从设备是下降沿才出数据的啊。我感觉是"temp<<1;"应该放在SCK=0之
if(MISO)temp++; //后才对
SCK = 0;
_nop_;
_nop_;
}
return temp;
}
请老大解释一下为什么这样写,谢谢了哈! |