Intel8051软件SPI

在Intel8051架构MCU上运行的,使用汇编代码编写的软件模拟SPI通信接口。

--by Captdam @ 2018-11-13 12:56 GMT edited

目的

虽然现在(hobby和教育目的)用的更多的是AVR架构的单片机(STM32或者ATmega328之类的),但是更老一点的Intel8051架构的单片机还是有不少使用的。而且,相对于AVR单片机,Intel8051提供4个port共32个GPIO(某些厂家后期改进型号甚至可以支持更多GPIO),可以连接更多外设,且价格也相对便宜。

最近在测试一个陀螺仪模块。陀螺仪模块使用的是SPI接口;但是,Intel8051只提供UART接口。虽然不能直接连接,但是好在SPI接口协议非常简单,所以可以使用普通GPIO进行模拟。

为了最大可能性节约性能,于是就使用汇编代码进行编写了。其实只是老学校情怀

通信方式

因为这个模块的工作方式是这样:

Start - MasterCommand - DataExchange - End

T0: Slave Select (Start)
SS写低,开始通信

T1: Byte 0: Master command
主机(单片机)发送指令给从机(陀螺仪)

T2: Byte 1: Master/Slave data exchange
根据指令是read/write,主机从从机接受数据、主机向从机发送数据。如果是read,主机发出的数据将会被抛弃。

T3: Slave Select (End)
SS写高,通信结束

所以代码也相对于这个通信模式进行编写。

这里的SPI协议是先发送MSB

这里的SPI协议是上升沿为准:发送的数据应该在上升沿前准备好;应该在上升沿后读数据。

代码

使用的时候,在主代码中$include,然后call就可以了。