在使用硬件SPI时,例程里的Spi376Exchange( UINT8 d )能实现输出且输入8个位数据吗? UINT8 Spi376Exchange( UINT8 d ) /* 硬件SPI输出且输入8个位数据 */ { /* 为了提高速度,可以将该子程序做成宏以减少子程序调用层次 */ SPDR = d; /* 先将数据写入SPI数据寄存器,然后查询SPI状态寄存器以等待SPI字节传输完成 */ while ( ( SPSR & SPI_IF_TRANS ) == 0 ); /* 查询SPI状态寄存器以等待SPI字节传输完成 */ SPSR &= ~ SPI_IF_TRANS; /* 清除SPI字节传输完成标志,有的单片机会自动清除 */ return( SPDR ); /* 先查询SPI状态寄存器以等待SPI字节传输完成,然后从SPI数据寄存器读出数据 */ }
我感觉此程序只能输出8个位数据吧?
void xWriteCH376Data( UINT8 mData ) /* 向CH376写数据 */ { Spi376Exchange( mData ); // mDelay0_5uS( ); /* 确保读写周期大于0.6uS */ } UINT8 xReadCH376Data( void ) /* 从CH376读数据 */ { // mDelay0_5uS( ); /* 确保读写周期大于0.6uS */ return( Spi376Exchange( 0xFF ) ); }
从376读数据时,为什么形参要带0xff,这样能对写入的数据取反吗?请多指教