byte ReadTC72(byte command_byte)
{
byte tmp_data;
CS_TC72=1;
SSPBUF=command_byte;
while(!SSPSTATbits.BF);
tmp_data=SSPBUF;
SSPBUF=0x00;
while(!SSPSTATbits.BF);
tmp_data=SSPBUF;
CS_TC72=0;
return (tmp_data);
};
这是读取温度的子程序,我一直不明白红色部分有什么作用,感觉是多余的,因为第一个tem_date不就是温度值了吗?
------解决思路----------------------
没用过,但看流程应该是这样解释
SPI是全双工的,当发送command_byte时会同时收到一个字节(参考SPI逻辑), 这个字节一般没意义
所以有第一次
while(!SSPSTATbits.BF);
tmp_data=SSPBUF;
当TC72收到command_byte后, 会返回所需要的数据(这里是温度), 但SPI的特性决定, 主机想要读取这个数据的话必须再发一个过去,随便发什么字节, 所以才有SSPBUF=0x00;,发0x00的同时,接收需要的数据字节.
你仔细看SPI的逻辑流程就明白了