单片机模拟spi通信

2019-04-15 12:19发布

#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; }