首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ADμC812的串行外设接口(SPI)及其应用(2)

ADμC812的串行外设接口(SPI)及其应用(2)

从模式的显著特征是:不论是发送还是接收始终必须在SCLOCK信号作用下进行,并且SS信号必须有效。SS在初始化之后,要设置为数字输入(CLR P1.5),当SS信号无效时,数据的发送无法进行并且输入的数据视为无效。这是因为输入的时钟信号是与SCLOCK的逻辑与操作,而SCLOCK信号是 SS的反转。这样当SS为高时,就没有时钟信号输入。 当CPHA=1时,SS始终置地;当CPHA=0时,在从机接收到第1个时钟之前SS必然置低,在接收完毕之后必然置高。数据的发送和接收的过程见图2,与主模式下基本相似,只是移位寄存器的数据移出和输入方向与之相反。从模式下的SS信号也须通过连接其他口线来读取状态。 5.从模式下的时钟同步 通过设置CPHA位可以获得从模式下的两种同步方式。由于SCLOCK信号线可能存在干扰脉冲,如果这些干扰脉冲大到一定程序,从机时就会误认为收到了时钟信号,将导致接收数据错误。这样依靠同步结构的SPI将失去同步的意义。 CPAH=1时,如果有其他脉冲的干扰,ADμC812将无法与主机获得同步。选择这种方式,当SS为低时,时钟计数器才开始工作。每经过8个时钟同周期,ISPI将置位(如果中断设置正确将产生中断),并且移位寄存器的数据锁存到SPIDAT中。SS保持低电平不会使时钟计数器复位。 CPHA=0时,如果有其他脉冲的干扰,ADμC812也可与主机获得同步。在这种方式下,从机通过SS信号获得的,而不是通过时钟信号获得的。当SS信号变低时,时钟计数器复位,数据位在此后的每一个时钟发送和接收;当SS变高时,ISPI位置位(如果中断设置正确,将产生中断),并且移位寄存器的数据锁存到SPIDAT中。ISPI置位与数据的锁存始终与时钟计数值无关,因此当SS的触发在多于或少于8个时钟时,在SS返回高电平瞬间,ADμC812 将产生中断,并且收到或发送的数据将不可靠。在这种方式下,SS不可始终置低,如果始终置低,那么从机将始终发送00。 当了与主机获得同步,从机SS的下降沿必然由主机控制。当SS变低时,从机产生外部中断,中断服务中SPE位由软件清除,然后重新置位。SPE位的置位将使时钟计数器复位到零。须注意的一点是这一中断必须有比其他中断更高的优先级,才可使从机在主机第1个时钟到来之间获得同步。主机程序必须为从机中断执行中断服务提供足够的时间,以对SPE进行操作。典型的操作是在清除SS和向SPIDAT中写数据之间用12~15个NOP指令。
二、实际应用 图3所示为1个主机和1个从机典型的电路连接图。注意主、从机要有公共的地。 根据图3的连接情况及前面分析的主、从机工作工程,绘制流程图如图4所示。 主机程序: SET EA ;打开中断允许 SET IE2.0 ;打开SPI中断 MOV SPICON,#30H ;送SPI控制字 MASTER:CLR P3.5 ;置SS为低 NOP ;等待从机中断执行完毕 NOP NOP NOP MOV SPIDAT,#DATA;向SPIDAT中写数据 LCALL DELAY ;根据选择的分频比算出数据传输的时间,确定DELAY子程序的延时时间(也可用中断方式) SETB P3.5 ;将SS置高 LJMP MASTER ;送下一个数 从机程序: ORG 0013H ;外部中断INT0入口 CLR SPE ;SPE位清除 SETB SPE ;与主机时钟获得同步 SETB P3.2 ;撤销中断 RETI …… SETB EA ;打开中断允许 SETB IE2.0 ;打开SPI中断 SETB EX0 ;打开外部中断 MOV SPICON,#20H ;送SPI控制字 CLR P1.5 ;设置为数字输入 JB P3.1$ ;判断P3.1是否为低 CLR P3.2 ;产生INT0中断 CLALL DELAY ;等待数据传送完毕 MOV A,SPIDAT ;读取数据
通过以上程序可以实现从主机向从机中发送数据的操作。在某些情况下,从微控制器所完成的功能较少,如果采用ADμC812会产生资源和经济的浪费,为此可以采用MCS-51系列的微控制器作为从机。这样不仅实现了必要的功能又节约了资源。由于MCS-51没有SPI串口,所以采用MCS-51作为从机需要模拟SPI的工作模式来完成数据的传送。下面给出模拟SPI接收数据的电路连接图(见图5)和相关程序。 ADμC812作为主机的程序与前面相同。8051模拟SPI串口接收数据程序如下: ORG 0013H INT0:MOV R0,#8 ;移位计数值 INT0":JB P3.4,INT0 ;输入时钟位高电平时等待 MOV C,P3.3 ;输入时钟下降沿接收数据 RLC A ;将数据存入A中 DJNZ R0,INT0" ;8位是否传送完 SETB P3. ;8位数据接收完毕,关中断 MOV @R1,#DATA ;将接收数据存到内部RAM INC R1 ;指向下一个内部RAM单元 CJNE R1,#00H,REC MOV R1,#80H RETI …… SETB EA SETB EX0 MOV R1,#80H ;内部存储器80H~FFH单元存储接收的数据 …… 总结 通过对SPI串口原理的介绍,SPI串行接口可以在短距离内进行主机与从机的数据传送,并且具有多种可调的传输方式、连接电路简单、使用方便等优点。为实现主机和从机及从外围设备的通信提供了一种简单、易行的方案。
返回列表