用单片机软件模拟spi接口的操作方法

玩转单片机 2017-11-13 14:27 次阅读

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

热门推荐

原文标题:单片机软件模拟SPI接口—加深理解SPI总线协议

文章出处:【微信号:mcu168,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

关于高性能主从模式动态可重构的SPI IP核的设计

随着集成电路设计的快速发展,系统芯片(System-on-a-Chip,SoC)的集成度越来越高,从....

的头像 电子设计 发表于 06-14 15:26 130次 阅读
关于高性能主从模式动态可重构的SPI IP核的设计

SPI接口之间数据传输中故障分析

单片机(MCU)系统为了与SPI标准外围接口器件进行通信,必须使用SPI( Serial Perip....

发表于 06-02 07:17 125次 阅读
SPI接口之间数据传输中故障分析

TLV2541、TLC2551、TLC3541和TLC4541设备的系统的SPI接口实现的概述

该应用报告讨论了具有以下设备的系统的SPI接口实现:TLV2541、TLC2551、TLC3541和....

发表于 05-25 15:22 58次 阅读
TLV2541、TLC2551、TLC3541和TLC4541设备的系统的SPI接口实现的概述

TLC2552,TLV2542和MSP430F149的特点及接口代码的详细概述

本应用笔记讨论了TLC2552和TLV2542 ADC的特点。还介绍了MSP430F149到TLC2....

发表于 05-25 15:00 43次 阅读
TLC2552,TLV2542和MSP430F149的特点及接口代码的详细概述

具有SPI接口的触摸屏控制器TSC2005的详细资料免费下载

TSC2005是一种非常低功耗的触摸屏控制器,它设计用于基于先进的低压处理器的功率敏感的手持应用。它....

发表于 05-18 15:51 31次 阅读
具有SPI接口的触摸屏控制器TSC2005的详细资料免费下载

SPI接口的模拟开关提高通道密度

设计一个要求高通道密度的系统时,例如在测试仪器仪表中,电路板上通常需要包括大量开关。当使用并行接口控....

发表于 03-07 14:49 59次 阅读
SPI接口的模拟开关提高通道密度

创建主/从SPI接口的两种方法详谈

最近,Digilent开源技术社区收到了两个关于如何在Zynq SoC和Zynq UltraScal....

发表于 12-30 05:03 302次 阅读
创建主/从SPI接口的两种方法详谈

基于SPI通信接口的两片DSP的双向通信和任务同步

在载人航天、无人机、火控雷达等尖端技术领域的作动系统中,常用双控制器余度技术来提高系统的可靠性。两个....

发表于 10-30 15:00 182次 阅读
基于SPI通信接口的两片DSP的双向通信和任务同步

8通道、12位、可配置ADC/DAC,集成片内基准电压源和SPI接口

DAC是数字模拟转换器(英语:Digital to analog converter,英文缩写:DA....

发表于 06-07 10:09 505次 阅读
8通道、12位、可配置ADC/DAC,集成片内基准电压源和SPI接口

【VEML6075紫外线检测试用体验】+3.SPI接口测试

发表于 04-16 14:20 1240次 阅读
【VEML6075紫外线检测试用体验】+3.SPI接口测试

71m65xxSPI接口

In order to avoid access conflicts and to ensure d....

发表于 04-05 16:13 196次 阅读
71m65xxSPI接口

MSP430的spi时钟始终没有输出

发表于 02-28 15:09 1956次 阅读
MSP430的spi时钟始终没有输出

【LinkIt 7687试用体验】spi接口应用

发表于 12-15 14:28 549次 阅读
【LinkIt 7687试用体验】spi接口应用

求助。SPI接口主模式电路设计。

发表于 11-25 00:00 1032次 阅读
求助。SPI接口主模式电路设计。

MSP430单片机与TLV5620通讯(SPI接口)

MSP430单片机与TLV5620通讯(SPI接口),感兴趣的小伙伴们可以瞧一瞧。

发表于 11-17 17:44 477次 阅读
MSP430单片机与TLV5620通讯(SPI接口)

SPI接口参数配置

11.小钢炮Cannon-SPI,感兴趣的小伙伴们可以瞧一瞧。

发表于 11-16 17:27 204次 阅读
SPI接口参数配置

SPI的工作原理讲解

SPI 接口的英文全称是"Serial Peripheral Interface",翻译成中国话就是....

发表于 11-11 15:51 620次 阅读
SPI的工作原理讲解

基于nRF905射频收发模块的设计

本文介绍了单片射频收发器nRF905的芯片结构、工作模式、射频收发流程以及nRF905片内SPI接口....

发表于 10-25 18:04 205次 阅读
基于nRF905射频收发模块的设计

SPI接口

电子专业单片机开发中的学习教程资料——SPI接口

发表于 08-08 15:17 202次 阅读
SPI接口

用SPI接口读写AT25F1024

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 348次 阅读
用SPI接口读写AT25F1024

SPI接口温度传感器TC72应用测试

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 289次 阅读
SPI接口温度传感器TC72应用测试

用带SPI接口的数模转换芯片MAX515调节LED亮度

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 364次 阅读
用带SPI接口的数模转换芯片MAX515调节LED亮度

用带SPI接口的MCP23S17扩展16位通用IO端口

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 752次 阅读
用带SPI接口的MCP23S17扩展16位通用IO端口

SPI接口扩展RF通信

基础的电子类资料,电子工程师必备文档,快来下载学习吧。

发表于 07-04 15:02 115次 阅读
SPI接口扩展RF通信

串口 pSRAM,Serial pSRAM,SPI接口 pSRAM大容量32Mbit,SQPI pSRAM,QPI pSRAM JSC一级代理

发表于 05-10 09:49 1644次 阅读
串口 pSRAM,Serial pSRAM,SPI接口 pSRAM大容量32Mbit,SQPI pSRAM,QPI pSRAM JSC一级代理

SPI接口和DS1302实时时钟(12864显示)

SPI接口和DS1302实时时钟(12864显示),有兴趣的同学可以下载学习

发表于 04-27 16:18 228次 阅读
SPI接口和DS1302实时时钟(12864显示)

基于SPI接口的凌阳单片机键盘设计

本文介绍了一种通过凌阳单片机SPCE061A的SPI接口进行键盘扩展的设计 方案。该方案采用具有SP....

发表于 03-28 16:42 88次 阅读
基于SPI接口的凌阳单片机键盘设计

基于ENC28J60以太网控制器及其应用

SPI接口以太网控制器ENC28J60介绍、工作过程、及应用

发表于 03-01 17:46 289次 阅读
基于ENC28J60以太网控制器及其应用

SPI接口发片选信号导致死机

STM32F103 SPI接口发片选信号导致死机

发表于 12-08 11:53 158次 阅读
SPI接口发片选信号导致死机

支持单线SPI接口的烧录技术实现

常规的SPI接口总线是双数据线全双工的同步通讯总线,在芯片的管脚上占用四根线。这里将介绍一种半双工的....

发表于 10-15 11:02 883次 阅读
支持单线SPI接口的烧录技术实现

无法往SPIBUF里写入数据的原因是什么?pic24FJGA110,是因为寄存器设置不对吗

发表于 09-28 21:32 1080次 阅读
无法往SPIBUF里写入数据的原因是什么?pic24FJGA110,是因为寄存器设置不对吗

PIC24FJGA110与FPGA通信验证,有时钟、片选信号没有数据的问题?

发表于 09-27 17:15 1100次 阅读
PIC24FJGA110与FPGA通信验证,有时钟、片选信号没有数据的问题?

MSP430F543x利用SPI接口对AT25010器件进行读写操作

发表于 09-02 15:00 246次 阅读
MSP430F543x利用SPI接口对AT25010器件进行读写操作

I2C总线接口、SPI接口、I/O接口之间区别

发表于 07-17 14:59 620次 阅读
I2C总线接口、SPI接口、I/O接口之间区别

SPI接口及应用

发表于 06-11 12:02 310次 阅读
SPI接口及应用

SPI接口TM7705 AD7705 16位ADC数据采集模块输入增益可编程资料

发表于 03-30 14:40 1099次 阅读
SPI接口TM7705 AD7705 16位ADC数据采集模块输入增益可编程资料

MP3-VS1003驱动(MP3模块)

发表于 09-26 15:48 563次 阅读
MP3-VS1003驱动(MP3模块)

250 MHz带宽DPD观测接收机 AD6641

发表于 09-24 10:29 277次 阅读
250 MHz带宽DPD观测接收机 AD6641

如何把一个OLED屏幕用在树莓派上(希望能帮到大家)

发表于 09-05 11:47 15522次 阅读
如何把一个OLED屏幕用在树莓派上(希望能帮到大家)

MSP430系列单片机模拟SPI串行口

发表于 01-21 13:24 327次 阅读
MSP430系列单片机模拟SPI串行口

AVR单片机中的SPI接口

发表于 01-19 09:22 278次 阅读
AVR单片机中的SPI接口

DSP2812 SPI接口控制SD卡读写操作

发表于 05-12 12:57 1135次 阅读
DSP2812 SPI接口控制SD卡读写操作

全功能SPI接口的设计与实现

SPI(Serial Peripheral Interface,串行外围接口)是Motorola公司....

发表于 01-08 18:17 327次 阅读
全功能SPI接口的设计与实现

MB85RS256A-DS501-00007-4v0-E

发表于 12-08 11:54 340次 阅读
MB85RS256A-DS501-00007-4v0-E

DS1390-DS1394数据资料

The low-voltage serial-peripheral interface (SPI)D....

发表于 11-15 12:09 638次 阅读
DS1390-DS1394数据资料

DS1390-DS1394低电压SPI/3线接口RTC

低电压串行外设接口(SPI™) DS1390/DS1391/DS1394和低电压3线DS1392/D....

发表于 11-15 11:56 1418次 阅读
DS1390-DS1394低电压SPI/3线接口RTC

MAX5700双通道DAC的家庭内部电压基准和SPI接口

MAX5700/MAX5701/MAX5702双通道,低功耗,8/10/12位,电压输出数字模拟转换....

发表于 10-08 11:28 689次 阅读
MAX5700双通道DAC的家庭内部电压基准和SPI接口

基于FPGA的可复用SPI接口设计

根据业界通用的SPI总线的标准,本文设计一种可复用的高速SPI总线。设计过程中很多变量都采用参数形式....

发表于 09-04 14:22 3132次 阅读
基于FPGA的可复用SPI接口设计

SPI总线协议的通信原理及应用举例

SPI的通信原理 很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根....

发表于 08-28 11:16 2509次 阅读
SPI总线协议的通信原理及应用举例

基于SPI接口和FIFO缓冲器的大容量高速实时数据存储方案

发表于 07-30 10:06 487次 阅读
基于SPI接口和FIFO缓冲器的大容量高速实时数据存储方案

FPGA在智能手机设计中的应用

简介 世界领先的手机制造商们的广告有什么共同点? 答:他们几乎从来都不说他们的产品能够打电话除非是某....

发表于 07-23 09:31 3491次 阅读
FPGA在智能手机设计中的应用

MAX5113带SPI接口的14位电流DAC

MAX5113是14位,9通道,电流输出数字-模拟转换器(DAC)。该器件采用低为+3.0 V电源,....

发表于 07-16 15:11 697次 阅读
MAX5113带SPI接口的14位电流DAC

通过SPI接口协议实现DSP与其它设备的通信

随着信息技术革命的深入和计算机技术的飞速发展,DSP技术也正以极快的速度被应用到科技和国民经济的各信....

发表于 04-15 10:56 1254次 阅读
通过SPI接口协议实现DSP与其它设备的通信

MAX1441与触摸屏传感器的SPI接口设计指南

MAX1441为双通道接近检测与触摸屏传感器,本文介绍了在产品开发过程中如何使用其接口固件,以简化M....

发表于 04-09 11:06 615次 阅读
MAX1441与触摸屏传感器的SPI接口设计指南

SPI接口AD转换器代码

MOV C,1FH ;15(MSB) MOV DIN,C SETB CLK NOP MOV C,DO....

发表于 12-01 16:50 420次 阅读
SPI接口AD转换器代码

AVR单片机串行接口SPI接口应用设计

使用的同步串行三线SPI接口,可以方便的连接采用SPI通信协议的外围或另一片AVR单片机,实现在短距....

发表于 11-09 17:37 1551次 阅读
AVR单片机串行接口SPI接口应用设计

TMS320F240与外围器件的SPI接口设计

TMS320F240 是由美国TI 公司推出的一种新型数字信号处理芯片。文中介绍了该芯片的结构、性能....

发表于 07-18 15:19 340次 阅读
TMS320F240与外围器件的SPI接口设计

MCP2510与F149-SPI接口的CAN实现程序

这个是调试通过了的SPI CAN2510全部完整程序了,初始化430的SPI、2510,读指令、写指....

发表于 07-07 15:49 553次 阅读
MCP2510与F149-SPI接口的CAN实现程序