STC单片机的SPI调试程序问题,感激不尽!!!!

以下是我师兄的程序,问一下:
执行了SPTAT=0xc0之后SPIF是不是等于零(SPIF为SPTAT的最高位)????
SPDAT = SPDAT什么意思?什么用处?
谢谢大侠们对小虾的指教!!!!
void main()
{
uchar i;
initUART(); //串口初始化
initSPI(); //SPI初始化

while (1)
{
if (RI) //判断RI是否为1,确定是否从串口接收到数据
{
SPCTL=0xdc; //设置为主机
i=SPIswap(recvUART());//将串口接收的数据用于SPI数据交换
sendUART(i); //接收到从机发回的数据经串口发送
SPCTL=0x4c; //发送完重置为从机
}
if (SPSTAT&0x80) //判断SPI传输是否完成
{
SPSTAT = 0xc0; //清SPI状态,写一清零
SPDAT = SPDAT; //mov data from receive buffer to send buffer
}
}
}

1、SPTAT=0xc0;之后SPIF是不是等于零。如Datasheet,是的。置1清零。
2、SPDAT = SPDAT;两个形式相同,含义却不同。因为发送缓冲和接收缓冲,一个只写,一个只读。所以,没有必要安排两个寄存器分别存放。而是复用了一个地址。左边的是发送缓冲,可以被赋值,如SPDAT =0x11;表示发数据0x11。右边的是接收缓冲,如i=SPDAT;表示接收到的内容读取到i变量中。=赋值语句,是有要求的,左边和右边是不同的。比如0=i;就是不合法的。这样你能理解了为什么是SPDAT = SPDAT了吧。就是把收到的内容再写到发缓冲的意思。
温馨提示:答案为网友推荐,仅供参考