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)的输出电平顺序进行相应调整即可。

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

    关注

    6074

    文章

    45351

    浏览量

    663954
  • 微处理器
    +关注

    关注

    11

    文章

    2416

    浏览量

    85363
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1867

    浏览量

    99898

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机系统进行扩展时需要遵循的原则有哪些

    一个单片机应用系统的硬件电路设计包含两部门内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、间断系统等不能知足应用系统的要求时,必需在片外进行扩展,
    发表于 12-09 07:56

    单片机硬件设计原则,抗干扰常用方法

    方法。提高敏感器件抗干扰性能的常用措施如下: 布线时尽量减少回路环的面积,以降低感应噪声。 布线时,电源线和地线要尽量粗。除减小压降外,更重要的是降低耦合噪声。 对于单片机闲置的I/
    发表于 12-09 06:30

    单片机系统硬件的调试方法

    单片机的系统硬件调试,通常有静态调试和动态调试两种不同,前者是通过目测、万能表测试、加电检查、联机检查的方法,在加电于样机之前.对样机的型号规格,以及安装要求等进行核对,同时检查 电源 系统.防止
    发表于 12-03 06:10

    如何巧妙甚至避免单片机的干扰问题

    平衡功耗与抗干扰能力。 2、利用数字电路降低阻抗 将I/O与其他数字电路输出脚相连,利用数字电路的低阻抗特性,提升抗干扰能力。 在工
    发表于 11-26 06:48

    单片机原理及应用详解

    单片机(Microcontroller Unit, MCC)  是一种集成计算机核心功能(CPU、存储器、I/O接口等)的微型芯片,广泛应用于嵌入式系统中。以下是其原理及应用的详细介绍: 一、
    的头像 发表于 08-11 13:57 1604次阅读

    单片机的储存优点是什么

    场景。深圳市安凯星科技有限公司在单片机应用开发中,充分利用这些储存优点,为拓邦、朗科、安徽龙多等客户打造了高效稳定的解决方案。 1.集成度高,节省硬件空间 单片机将程序存储器(ROM)、数据存储器(RAM)与 CPU、
    的头像 发表于 07-31 10:09 501次阅读

    单片机采用什么电流输出

    能力 单片机I/O 接口直接输出的电流较小,通常在 10-20mA 范围内。这是因为其内部输出电路由小型 MOS 管或三极管构成,主要用于传输控制信号,而非直接驱动大功率设备。例如,8 位
    的头像 发表于 07-30 11:13 770次阅读

    怎么放大单片机输出电流

    单片机作为电子系统的控制核心,其 I/O 输出电流通常较小(一般在 10-20mA 左右),难以直接驱动继电器、电机、大功率 LED 等需要较大工作电流的外设。因此,在实际应用中需
    的头像 发表于 07-25 13:47 509次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 495次阅读

    ads7886的输出接口 *CS SDO SCLK可以直接连接到单片机I/O上吗?

    请问一下,ads7886的输出接口 *CSSDOSCLK 可以直接连接到单片机I/O上,还是一定要上拉一个电阻然后在连接单片机I/
    发表于 02-08 07:08

    单片机I/O接口的传输方式

    单片机(Microcontroller Unit,MCU)作为嵌入式系统的核心部件,其输入输出(Input/Output,I/O)接口是实现与外部设备数据交换的关键。
    的头像 发表于 02-02 15:56 1663次阅读

    I2C总线单片机的连接

    在现代电子系统中,单片机(MCU)是核心控制单元,而I2C总线作为一种多主机、多从的串行通信协议,因其简单、高效和节省引脚的特性而被广泛应用于各种电子设备中。
    的头像 发表于 01-17 15:18 2007次阅读

    I2C总线SPI总线的比较

    在现代电子系统中,微控制器与各种外设之间的通信是必不可少的。I2C和SPI是两种流行的串行通信协议,它们各自具有独特的特点和应用场景。 I2C总线
    的头像 发表于 01-17 15:08 1779次阅读

    单片机Debug与仿真区别

    是指在软件或硬件开发过程中,通过特定的工具和技术来查找、诊断和修复错误的过程。在单片机开发中,Debug通常涉及到以下几个方面: 硬件调试 :检查单片机的硬件连接是否正确,包括电源、时
    的头像 发表于 12-19 09:47 1428次阅读

    如何通过总线来初始化ADS1256的寄存器?

    我用STC89C52来驱动ADS1256时,发现需要用到SPI协议,单片机需要用IO模拟SPI总线
    发表于 12-16 06:47