惠州信息港
生活
当前位置:首页 > 生活

MCS51系列单片机模拟SPI总线的方法

发布时间:2019-10-13 05:48:49 编辑:笔名

  MCS-51系列单片机模拟SPI总线的方法

  SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有SPI总线接口功能的各种I/O器件进行接口,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。由此可见,在MCS51系列等不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。

  2 SPI总线的组成

  利用SPI总线可在软件的控制下构成各种系统。如1个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。在大多数应用场合,可使用1个MCU作为控机来控制数据,并向1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。其数据的传输格式是高位(MSB)在前,低位(LSB)在后。SPI总线接口系统的典型结构如图1所示。

  当一个主控机通过SPI与几种不同的串行I/O芯片相连时,必须使用每片的允许控制端,这可通过MCU的I/O端口输出线来实现。但应特别注意这些串行I/O芯片的输入输出特性:首先是输入芯片的串行数据输出是否有三态控制端。平时未选中芯片时,输出端应处于高阻态。若没有三态控制端,则应外加三态门。否则MCU的MISO端只能连接1个输入芯片。其次是输出芯片的串行数据输入是否有允许控制端。因此只有在此芯片允许时,SCK脉冲才把串行数据移入该芯片;在禁止时,SCK对芯片无影响。若没有允许控制端,则应在外围用门电路对SCK进行控制,然后再加到芯片的时钟输入端;当然,也可以只在SPI总线上连接1个芯片,而不再连接其它输入或输出芯片。

  3 在MCS-51系列单片机中的实现方法

  对于不带SPI串行总线接口的MCS-51系列单片机来说,可以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。对于不同的串行接口外围芯片,它们的时钟时序是不同的。对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置为1,而在允许接收后再置P1.1为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至MCS-51单片机的P1.3口(模拟MCU的MISO线),此后再置P1.1为1,使MCS-51系列单片机从P1.0(模拟MCU的MOSI线)输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便宣告完成。此后再置P1.1为0,模拟下1位数据的输入输出……,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,即在接口芯片允许时,先置P1.1为1,以便外围接口芯片输出1位数据(MCU接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(MCU发送1位数据),从而完成1位数据的传送。

  图2所示为MCS-51系列单片机与存储器X25F008(E2PROM)的硬件连接图,图2中,P1.0模拟MCU的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端(MISO)。下面介绍用MCS-51单片机的汇编语言模拟SPI串行输入、串行输出和串行输入/输出的3个子程序,实际上,这些子程序也适用于在串行时钟的上升沿输入和下降沿输出的其它各种串行外围接口芯片(如A/D转换芯片、络控制器芯片、LED显示驱动芯片等)。对于下降沿输入、上升沿输出的各种串行外围接口芯片,只要改变P1.1的输出电平顺序,即先置P1.1为低电平,之后再次置P1.1为高电平,再置P1.1为低电平……,则这些子程序也同样用。

  3.1 MCU串行输入子程序SPIIN

  从X25F008的SPISO线上接收8位数据并放入寄存器R0中的应用子程序如下:

  SPIIN:SETB P1.1 ;使P1.1(时钟)输出为1

  CLR P1.2 ;选择从机

  MOV R1,#08H ;置循环次数

  SPIIN1: CLR P1.1 ;使P1.1(时钟)输出为0

  NOP ;延时

  NOP

  MOV C,P1.3 ;从机输出SPISO送进位C

  RLC A ;左移至累加器ACC

  SETB P1.1 ;使P1.0(时钟)输出为1

  DJNZ R1,SPIIN1 ;判断是否循环8次(8位数据)

  MOV R0,A ;8位数据送R0

  RET

  3.2 MCU串行输出子程序SPIOUT

  将MCS-51单片机中R0寄存器的内容传送到X25F008的SPISI线上的程序如下:

  SPIOUT:SETB P1.1 ;使P1.1(时钟)输出为1

  CLR P1.2 ;选择从机

  MOV R1,#08H ;置循环次数

  MOV A,R0 ;8位数据送累加器ACC

  SPIOUT1:CLR P1.1 ;使P1.1(时钟)输出为0

  NOP ;延时

  NOP

  RLC A ;左移至累加器ACC位至C

  MOV P1.0,C ;进位C送从机输入SPISI线上

  SETB P1.1 ;使P1.1(时钟)输出为1

  DJNZ R1,SPIOUT1 ;判是否循环8次(8位数据)

  RET

  3.3 MCU串行输入/输出子程序SPIIO

  将MCS-51单片机R0寄存器的内容传送到X25F008的SPI SI中,同时从X25F008的SPI SO接收8位数据的程序如下:

  SPIIO:SETB P1.1 ;使P1.1(时钟)输出为1

  CLR P1.2 ;选择从机

  MOV R1,#08H ;置循环次数

  MOV A,R0 ;8位数据送累加器ACC

  SPIIO1:CLR P1.1 ;使P1.1(时钟)输出为0

  NOP ;延时

  NOP

  MOV C,P1.3 ;从机输出SPISO送进位C

  RLC A ;左移至累加器ACC位至C

  MOV P1.0,C ;进位C送从机输入

  SETB P1.1 ;使P1.1(时钟)输出为1

  DJNZ R1,SPIIO1 ;判断是否循环8次(8位数据)

  RET

  4 结束语

  本文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用MCS-51单片机汇编语言模拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可以根据SPI串行总线的操作时序特点来在MCS-96系列、ATMEL89系列等单片机上实现SPI总线的接口。

财经新闻
跑步
清洗/清理设备
友情链接
重庆有哪些血管外科医院 重庆有哪些口腔急诊科医院 成都检验科医院哪家好 吉林有哪些微创外科医院 吉林有哪些心外科医院 泸州体检科医院哪家好 海南有哪些室缺医院 宜宾妇科内分泌医院哪家好 达州中医推拿按摩科医院哪家好 韶关有哪些种植科医院 达州中医男科医院哪家好 达州眼科医院哪家好 深圳有哪些妇科内分泌医院 深圳有哪些消化内科医院 巴中口腔粘膜科医院哪家好 珠海有哪些内分泌外科医院 汕头有哪些屈光医院 资阳中医肝病科医院哪家好 汕头有哪些眼底医院 湛江有哪些综合科医院 凉山耳鼻喉医院哪家好 茂名有哪些成瘾医学科医院 惠州有哪些精神科医院 邯郸儿科医院哪家好 惠州有哪些法四医院 邯郸心外科医院哪家好 梅州有哪些胸外科医院 保定体检科医院哪家好 保定其他医院哪家好 河源有哪些中医内分泌医院 保定耳鼻喉医院哪家好 保定口腔科医院哪家好 河源有哪些全科医院 河源有哪些结核病科医院 河源有哪些麻醉科医院 定州麻醉医学科医院哪家好 河源有哪些骨关节科医院 定州肿瘤综合科医院哪家好 定州肿瘤外科医院哪家好 河源有哪些复杂先心病医院 衡水营养科医院哪家好 潮州有哪些耳鼻喉医院 潮州有哪些室缺医院 揭阳有哪些传染病科医院 衡水小儿免疫科医院哪家好 长沙心血管外科医院哪家好 枣庄有哪些中医肛肠科医院 东营有哪些耳鼻咽喉头颈科医院 岳阳小儿内分泌科医院哪家好 岳阳小儿免疫科医院哪家好 东营有哪些肿瘤综合科医院 岳阳小儿眼科医院哪家好 郴州小儿免疫科医院哪家好 郴州小儿泌尿科医院哪家好 湖州有哪些房缺医院 龙岩小儿心内科医院哪家好 龙岩心胸外科医院哪家好 龙岩儿童口腔科医院哪家好 龙岩牙体牙髓科医院哪家好 宁德其他内科医院哪家好 宁德心胸外科医院哪家好 宁德正畸科医院哪家好 太原产前诊断科医院哪家好 太原生殖医学科医院哪家好 太原小儿营养保健科医院哪家好 朔州消化内科医院哪家好 朔州头颈外科医院哪家好 晋中外科医院哪家好 晋中耳鼻喉医院哪家好 运城骨科医院哪家好 运城肿瘤外科医院哪家好 运城骨肿瘤科医院哪家好 运城产科医院哪家好 运城感染内科医院哪家好 运城小儿神经外科医院哪家好 运城体检科医院哪家好 临汾其他内科医院哪家好 吕梁心血管医院哪家好 西安眼科医院哪家好 西安动脉导管未闭医院哪家好 宝鸡传染病科医院哪家好 宝鸡肿瘤外科医院哪家好 四平中医肝病科医院哪家好 公主岭正畸科医院哪家好 辽源眼底医院哪家好 松原房缺医院哪家好 白城重症监护室医院哪家好 南宁血管外科医院哪家好 南宁牙周科医院哪家好 柳州医学影像科医院哪家好 桂林五官科医院哪家好