单片机模拟1位数据输入/输出的过程:MCU输出1位SCK时钟的低电平 ,使接口芯片串行左移,1位数据输入至89C51的P1.3(模拟MCU的MISO线);再置P1.1为1,使89C51从P1.0输出1位数据(先为高位)至串行接口芯片。依次循环8次,完成1次通过SPI传输1个字节的操作。用于89C51模拟SPI串行输入、串行输出和串行输入/输出的3个子程序如下。它们适用于在串行时钟的下降沿输出和上升沿输入的各种串行外围接口芯片,如A/D芯片,74系列输出芯片等。
对于在SCK的下降沿输入、上升沿输出的器件,只须改变P1.1的输出顺序。可取串行时钟输出的初态为0,在接口芯片允许时,先置P1.1为1,接口芯片输出1位数据(MCU接收1位数据);再置P1.1为0,接口芯片接收1位数据(MCU发送1位数据),完成1位数据的传送。