单片机软件模拟SPI接口

姓名:周崇杰   学号:16140120059    专业:机械设计制造及其自动化

转载自:http://blog.csdn.net/ce123_zhouwei/article/details/6905630,有删节

【嵌牛导读】:在嵌入式系统开发中,微处理器周围的外接设备越来越多,微处理器与外围扩展芯片的通信越来越重要,SPI接口在众多通信协议中脱颖而出,本文详细介绍SPI的使用。

【嵌牛鼻子】:单片机,SPI

【嵌牛提问】:没有SPI接口的51单片机如何进行模拟SPI总线呢?

【嵌牛正文】:

SPI(Serial Peripheral Interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准,目前,各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,EEPROM,FlashROM,A/D转换器、D/A转换器、LED/LED显示驱动器、I/O接口芯片、实时时钟、UART收发器等等,为用户的外围扩展提供了极其灵活而价廉的选择。由于SPI总线接口只占用微处理器四个I/O口线,采用SPI总线接口可以简化电路没计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。

现以 AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。


93C46存储器SPI总线的工作原理

93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。


软件模拟SPI接口的实现方法

对于不带SPI串行总线接口的AT89C2051单片 机来说,可以使用软件来模拟SPI的操作,图1所示 为AT89C2051单片机与串行EEPROM 93C46的硬件 连接图,其中,P1.0模拟SPI主设备的数据输出端 SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟 SPI的从机选择端SCS,P1.1模拟SPI的数据输入 SDI。

上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。

读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。

写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。

写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。

写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。

下面介绍用C51模拟SPI的子程序。

//首先定义好I/O口

sbit SDO=P1^0;

sbit SDI=P1^1;

sbit SCK=P1^ 2;

sbit SCS=P1^3;

sbit ACC_7= ACC^7;

unsignedintSpiRead(unsignedcharadd)

{

unsignedchari;

unsignedintdatal6;

add&=0x3f;/*6位地址*/

add |=0x80;/*读操作码l0*/

SDO=1;/*发送1为起始位*/

SCK=0;

SCK=1;

for(i=0;<8;i++)/*发送操作码和地址*/

{

if(add&0x80==1)

SDO=1;

else

SDO=0;

SCK=0;/*从设备上升沿接收数据*/

SCK=1;

add<<= 1;

}

SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/

SCK=0;

datal6<<= 1;/*读16位数据*/

for(i=0;<16;i++)

{

SCK= 1;

_nop_();

if(SDI==1)

datal6|=0x01;

SCK =0;

datal6< < =1;

}

returndatal6;

}

对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo阅读 9,220评论 1 20
  • SPI通信实验 SPI简介 串行外设接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb阅读 13,258评论 1 12
  • 1、嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本...
    荣卓然阅读 6,001评论 0 5
  • 总线 计算机的各个功能部件通过总线连接在一起构成完整的计算机系统,总线是多个系统功能部件之间进行数据传送的公共通路...
    罗蓁蓁阅读 10,561评论 0 10
  • 从春到夏的两季从厚重的棉袄换成清爽的短袖,有晴有雨,有落叶有花开,当然还有你…… 从一句简单的新年问候到后来的无话...
    小企鹅懒懒阅读 1,382评论 0 1

友情链接更多精彩内容