#include
sbit SCLK = P2^0; /*时钟线 */
sbit MOSI = P2^1; /*从进主出 */
sbit MISO = P2^2; /*主进从出 */
sbit CS = P2^3; /*片选 */
typedef unsigned char u8;
/**-------------------------------------------------------------------------------------
*brief 带收发的模拟spi总线
*param
Data:发送到从机的数据
*retval
返回主机的数据
*attention 工作在SPI的模式1
---------------------------------------------------------------------------------------*/
u8 SPI_WriteRead(u8 Data)
{
u8 i;
u8 retval = 0; /*返回值 */
for (i = 0; i < 8; i++) /*并串转换
*/
{
SCLK = 0;
retval <<= 1;
MOSI = (Data & 0x80)? 1: 0; /*将最高位输出到SI线上 */
SCLK = 1; /*上升沿送出数据 */
MISO = 1;
retval |= MISO; /*读入从机数据
*/
Data <<= 1; /*移向高位 */
}
SCLK = 0;
return retval;
}