0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用单片机的I/O口通过软件模拟SPI总线的实现方法

GReq_mcu168 来源:玩转单片机 2020-09-02 11:23 次阅读

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的子程序。

1. //首先定义好I/O口 2. sbit SDO=P1^0;3. sbit SDI=P1^1;4. sbit SCK=P1^ 2;5. sbit SCS=P1^3;6. sbit ACC_7= ACC^7;7. unsigned int SpiRead(unsigned char add) 8. { 9. unsigned char i;10. unsigned int datal6;11. add&=0x3f;/*6位地址*/ 12. add |=0x80;/*读操作码l0*/ 13. SDO=1;/*发送1为起始位*/ 14. SCK=0;15. SCK=1;16. for(i=0;<8;i++)/*发送操作码和地址*/ 17. { 18. if(add&0x80==1) 19. SDO=1;20. else 21. SDO=0;22. SCK=0;/*从设备上升沿接收数据*/ 23. SCK=1;24. add<<= 1;25. } 26. SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/ 27. SCK=0;28. datal6<<= 1;/*读16位数据*/ 29. for(i=0;<16;i++) 30. { 31. SCK= 1;32. _nop_();33. if(SDI==1) 34. datal6|=0x01;35. SCK =0;36. datal6< < =1;37. } 38. return datal6;39. }  对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44527

    浏览量

    633495
  • 微处理器
    +关注

    关注

    11

    文章

    2249

    浏览量

    82343
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1701

    浏览量

    91376

原文标题:单片机软件模拟SPI接口

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机io怎么配置成输出口

    单片机IO配置成输出口的过程通常涉及对单片机内部寄存器的操作。不同型号的单片机在寄存器配置和编程方式上可能有所不同,但基本原理是相似的。以下是一个通用的步骤,用于将
    的头像 发表于 09-14 14:33 660次阅读

    单片机io输出电流多大

    单片机IO的输出电流大小会受到多种因素的影响,包括单片机的型号、IO的配置模式以及外部电路的设计等。以下是对单片机IO
    的头像 发表于 09-14 14:29 1341次阅读

    单片机io的四种工作状态

    )是单片机与外部世界进行数据交换的接口。每个I/O可以配置为输入或输出状态,或者同时具备这两种功能。I/
    的头像 发表于 09-14 14:24 1177次阅读

    单片机SPI通信实现

    在深入探讨单片机(如基于STM32、AVR、PIC等)如何通过SPI(Serial Peripheral Interface)进行通信之前,我们先概述SPI通信的基本原理,随后以STM
    的头像 发表于 09-09 17:00 439次阅读

    单片机烧录程序用什么软件

    工作原理和接口方式的不同,可以分为以下几类: 1.1 并行烧录器:通过并行接口将程序数据传输给单片机,烧录速度快,但需要占用较多的I/O端口。 1.2 串行烧录器:
    的头像 发表于 09-02 10:05 969次阅读

    在用STM32的SPII2C时,是用I/O模拟还是片内外设?

    大家一起来聊一聊在用STM32的SPII2C时,用I/O模拟多些还是片内外设,用查询方式还是
    发表于 05-16 08:29

    软件可配置模拟 I/O 的设计理念

    作者: Kenton Williston 曾几何时,模拟 I/O 就是最专业、功能最固定的硬件。例如,电流驱动器和电压传感器是完全不同的零件,试图颠倒其角色可谓是荒谬至极。 软件可配置
    的头像 发表于 05-05 11:10 804次阅读
    <b class='flag-5'>软件</b>可配置<b class='flag-5'>模拟</b> <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的设计理念

    单片机I/O驱动的选择中,为什么都选用三极管而不是MOS管呢?

    单片机I/O驱动的选择中,为什么一般都选用三极管而不是MOS管呢? 在单片机I/
    的头像 发表于 03-27 15:33 1400次阅读

    什么是单片机及其特性与应用领域

    单片机除具有计算机基本逻辑与数据处理功能之外,还自带RAM、ROM、I/O以及定时器等外设,并由芯片制造商提供完备的软件和硬件开发工具及文
    发表于 02-15 15:04 555次阅读

    为什么单片机I/O驱动MOS管时,不是直接驱动,而是经过三极管

    为什么单片机I/O驱动MOS管时,不是直接驱动,而是经过三极管 单片机I/
    的头像 发表于 01-16 11:14 3184次阅读

    应用方案:MCU通用I/O引脚扩展

    MCU通用I/O引脚扩展 低端MCU由于I/O数量不足导致部分功能无法实现,用户需要使用数字集
    发表于 01-08 09:35

    STM32单片机实现固件在线升级(IAP)

    I2C、SPI等等)的FLASH引导程序,配合厂家提供的烧录软件工具或自行开发的软件实现程序烧录。3、IAP:是指
    的头像 发表于 12-16 08:00 5083次阅读
    STM32<b class='flag-5'>单片机</b><b class='flag-5'>实现</b>固件在线升级(IAP)

    单片机是如何控制数码管显示各种字符的?

    特定的接口电路进行连接。常见的连接方式有共阳极和共阴极两种。共阳极数码管是指公共阳极接地,每个数码管的阴极通过限流电阻与单片机I/O相连
    的头像 发表于 12-13 10:47 2150次阅读

    单片机的GPIO如何实现触摸按键的功能呢?

    单片机的GPIO如何实现触摸按键的功能呢? 触摸按键是一种使用触摸电容技术实现的按键,它通过利用人体的电容来
    的头像 发表于 12-07 11:43 3894次阅读

    ad7779数据输出接口和单片机该怎样连接?采用哪种通信协议来接收数据?

    AD7779有两种不同接口:SPI和数据输出接口。问题1:数据输出接口和单片机该怎样连接,到底采用哪种通信协议来接收数据?I/O?USAR
    发表于 12-07 07:42