2024年9月21日发(作者:闵韵梅)
SPI总线在51系列单片机系统中的实现
摘要:S51系列、S96系列等单片机由于都不带SPI串行总线接口而限制了其在
SPI总线接口器件的使用。文中介绍了SPI串行总线的特征和时序,并以串行E2PR为
例,给出了在51系列单片机上利用I/口线实现SPI串行总线接口的方法和软件设计
程序。关键词:单片机SPI串行总线总线接口1引言
SPI(SerialPeripheralInterfae--串行外设接口)总线系统是一种同步串行外设接口,
它可以使U与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRA、网
络控制器、LD显示驱动器、A/D转换器和U等。SPI总线系统可直接与各个厂家生产
的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SK)、主机输
入/从机输出数据线IS、主机输出/从机输入数据线ST和低电平有效的从机选择线
SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/
从机输入数据线SI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具
有SPI总线接口功能的各种I/器件进行接口,而扩展并行总线则需要8根数据线、
8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省
很多常规电路中的接口器件和I/口线,提高设计的可靠性。由此可见,在S51系列等
不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太
高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。2SPI
总线的组成利用SPI总线可在软件的控制下构成各种系统。如1个主U和几个从U、
几个从U相互连接构成多主机系统(分布式系统)、1个主U和1个或几个从I/设备
所构成的各种系统等。在大多数应用场合,可使用1个U作为控机来控制数据,并向
1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。
其数据的传输格式是高位(SB)在前,低位(LSB)在后。SPI总线接口系统的典型结
构如图1所示。当一个主控机通过SPI与几种不同的串行I/芯片相连时,必须使用每
片的允许控制端,这可通过U的I/端口输出线来实现。但应特别注意这些串行I/芯片
的输入输出特性:首先是输入芯片的串行数据输出是否有三态控制端。平时未选中芯
片时,输出端应处于高阻态。若没有三态控制端,则应外加三态门。否则U的IS端只
能连接1个输入芯片。其次是输出芯片的串行数据输入是否有允许控制端。因此只有
在此芯片允许时,SK脉冲才把串行数据移入该芯片;在禁止时,SK对芯片无影响。若
没有允许控制端,则应在外围用门电路对SK进行控制,然后再加到芯片的时钟输入端;
当然,也可以只在SPI总线上连接1个芯片,而不再连接其它输入或输出芯片。3在
S51系列单片机中的实现方法对于不带SPI串行总线接口的S51系列单片机来说,可
以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。对于不同的串
行接口外围芯片,它们的时钟时序是不同的。对于在SK的上升沿输入(接收)数据和
在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置
为1,而在允许接口后再置P1.1为0。这样,U在输出1位SK时钟的同时,将使接口
芯片串行左移,从而输出1位数据至S51单片机的P1.3口(模拟U的IS线),此后
再置P1.1为1,使S51系列单片机从P1.0(模拟U的SI线)输出1位数据(先为高
位)至串行接口芯片。至此,模拟1位数据输入输出便宣告完成。此后再置P1.1为0,
模拟下1位数据的输入输出……,依此循环8次,即可完成1次通过SPI总线传输8
位数据的操作。对于在SK的下降沿输入数据和上升沿输出数据的器件,则应取串行时
钟输出的初始状态为0,即在接口芯片允许时,先置P1.1为1,以便外围接口芯片输
出1位数据(U接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(U
发送1位数据),从而完成1位数据的传送。图2所示为S51系列单片机与存储器
X25F008(E2PR)的硬件连接图,图2中,P1.0模拟U的数据输出端(SI),P1.1模
拟SPI的SK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端
(IS)。下面介绍用S51单片机的汇编语言模拟SPI串行输入、串行输出和串行输入/
输出的3个子程序,实际上,这些子程序也适用于在串行时钟的上升沿输入和下降沿
输出的其它各种串行外围接口芯片(如A/D转换芯片、网络控制器芯片、LED显示驱
动芯片等)。对于下降沿输入、上升沿输出的各种串行外围接口芯片,只要改变P1.1
的输出电平顺序,即先置P1.1为低电平,之后再次置P1.1为高电平,再置P1.1为低
电平……,则这些子程序也同样适用。3.1U串行输入子程序SPIIN从X25F008的SPIS
线上接收8位数据并放入寄存器R0中的应用子程序如下:SPIIN:SETBP1.1;使
P1.1(时钟)输出为1LRP1.2;选择从机VR1,#08H;置循环次数SPIIN1:LRP1.1;使
P1.1(时钟)输出为0NP;延时NPV,P1.3;从机输出SPIS送进位RLA;左移至累加
器ASETBP1.1;使P1.0(时钟)输出为1DJNZR1,SPIIN1;判断是否循环8次(8位数据)
VR0,A;8位数据送R0RET
3.2U串行输出子程序SPIUT将S51单片机中R0寄存器的内容传送到X25F008的
SPISI线上的程序如下:SPIUT:SETBP1.1;使P1.1(时钟)输出为1LRP1.2;选择从机
VR1,#08H;置循环次数VA,R0;8位数据送累加器ASPIUT1:LRP1.1;使P1.1(时钟)
输出为0NP;延时NPRLA;左移至累加器A最高位至VP1.0,;进位送从机输入SPISI
线上SETBP1.1;使P1.1(时钟)输出为1DJNZR1,SPIUT1;判是否循环8次(8位数据)
RET3.3U串行输入/输出子程序SPII将S51单片机R0寄存器的内容传送到X25F008的
SPISI中,同时从X25F008的SPIS接收8位数据的程序如下:SPII:SETBP1.1;使
P1.1(时钟)输出为1LRP1.2;选择从机VR1,#08H;置循环次数VA,R0;8位数据送
累加器ASPII1:LRP1.1;使P1.1(时钟)输出为0NP;延时NPV,P1.3;从机输出
SPIS送进位RLA;左移至累加器A最高位至VP1.0,;进位送从机输入SETBP1.1;使
P1.1(时钟)输出为1DJNZR1,SPII1;判断是否循环8次(8位数据)RET4结束语本
文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用S51单片机汇编语言
模拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可
以根据SPI串行总线的操作时序特点来在S96系列、ATEL89系列等单片机上实现SPI
总线的接口。
2024年9月21日发(作者:闵韵梅)
SPI总线在51系列单片机系统中的实现
摘要:S51系列、S96系列等单片机由于都不带SPI串行总线接口而限制了其在
SPI总线接口器件的使用。文中介绍了SPI串行总线的特征和时序,并以串行E2PR为
例,给出了在51系列单片机上利用I/口线实现SPI串行总线接口的方法和软件设计
程序。关键词:单片机SPI串行总线总线接口1引言
SPI(SerialPeripheralInterfae--串行外设接口)总线系统是一种同步串行外设接口,
它可以使U与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRA、网
络控制器、LD显示驱动器、A/D转换器和U等。SPI总线系统可直接与各个厂家生产
的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SK)、主机输
入/从机输出数据线IS、主机输出/从机输入数据线ST和低电平有效的从机选择线
SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/
从机输入数据线SI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具
有SPI总线接口功能的各种I/器件进行接口,而扩展并行总线则需要8根数据线、
8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省
很多常规电路中的接口器件和I/口线,提高设计的可靠性。由此可见,在S51系列等
不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太
高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。2SPI
总线的组成利用SPI总线可在软件的控制下构成各种系统。如1个主U和几个从U、
几个从U相互连接构成多主机系统(分布式系统)、1个主U和1个或几个从I/设备
所构成的各种系统等。在大多数应用场合,可使用1个U作为控机来控制数据,并向
1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。
其数据的传输格式是高位(SB)在前,低位(LSB)在后。SPI总线接口系统的典型结
构如图1所示。当一个主控机通过SPI与几种不同的串行I/芯片相连时,必须使用每
片的允许控制端,这可通过U的I/端口输出线来实现。但应特别注意这些串行I/芯片
的输入输出特性:首先是输入芯片的串行数据输出是否有三态控制端。平时未选中芯
片时,输出端应处于高阻态。若没有三态控制端,则应外加三态门。否则U的IS端只
能连接1个输入芯片。其次是输出芯片的串行数据输入是否有允许控制端。因此只有
在此芯片允许时,SK脉冲才把串行数据移入该芯片;在禁止时,SK对芯片无影响。若
没有允许控制端,则应在外围用门电路对SK进行控制,然后再加到芯片的时钟输入端;
当然,也可以只在SPI总线上连接1个芯片,而不再连接其它输入或输出芯片。3在
S51系列单片机中的实现方法对于不带SPI串行总线接口的S51系列单片机来说,可
以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。对于不同的串
行接口外围芯片,它们的时钟时序是不同的。对于在SK的上升沿输入(接收)数据和
在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置
为1,而在允许接口后再置P1.1为0。这样,U在输出1位SK时钟的同时,将使接口
芯片串行左移,从而输出1位数据至S51单片机的P1.3口(模拟U的IS线),此后
再置P1.1为1,使S51系列单片机从P1.0(模拟U的SI线)输出1位数据(先为高
位)至串行接口芯片。至此,模拟1位数据输入输出便宣告完成。此后再置P1.1为0,
模拟下1位数据的输入输出……,依此循环8次,即可完成1次通过SPI总线传输8
位数据的操作。对于在SK的下降沿输入数据和上升沿输出数据的器件,则应取串行时
钟输出的初始状态为0,即在接口芯片允许时,先置P1.1为1,以便外围接口芯片输
出1位数据(U接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(U
发送1位数据),从而完成1位数据的传送。图2所示为S51系列单片机与存储器
X25F008(E2PR)的硬件连接图,图2中,P1.0模拟U的数据输出端(SI),P1.1模
拟SPI的SK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端
(IS)。下面介绍用S51单片机的汇编语言模拟SPI串行输入、串行输出和串行输入/
输出的3个子程序,实际上,这些子程序也适用于在串行时钟的上升沿输入和下降沿
输出的其它各种串行外围接口芯片(如A/D转换芯片、网络控制器芯片、LED显示驱
动芯片等)。对于下降沿输入、上升沿输出的各种串行外围接口芯片,只要改变P1.1
的输出电平顺序,即先置P1.1为低电平,之后再次置P1.1为高电平,再置P1.1为低
电平……,则这些子程序也同样适用。3.1U串行输入子程序SPIIN从X25F008的SPIS
线上接收8位数据并放入寄存器R0中的应用子程序如下:SPIIN:SETBP1.1;使
P1.1(时钟)输出为1LRP1.2;选择从机VR1,#08H;置循环次数SPIIN1:LRP1.1;使
P1.1(时钟)输出为0NP;延时NPV,P1.3;从机输出SPIS送进位RLA;左移至累加
器ASETBP1.1;使P1.0(时钟)输出为1DJNZR1,SPIIN1;判断是否循环8次(8位数据)
VR0,A;8位数据送R0RET
3.2U串行输出子程序SPIUT将S51单片机中R0寄存器的内容传送到X25F008的
SPISI线上的程序如下:SPIUT:SETBP1.1;使P1.1(时钟)输出为1LRP1.2;选择从机
VR1,#08H;置循环次数VA,R0;8位数据送累加器ASPIUT1:LRP1.1;使P1.1(时钟)
输出为0NP;延时NPRLA;左移至累加器A最高位至VP1.0,;进位送从机输入SPISI
线上SETBP1.1;使P1.1(时钟)输出为1DJNZR1,SPIUT1;判是否循环8次(8位数据)
RET3.3U串行输入/输出子程序SPII将S51单片机R0寄存器的内容传送到X25F008的
SPISI中,同时从X25F008的SPIS接收8位数据的程序如下:SPII:SETBP1.1;使
P1.1(时钟)输出为1LRP1.2;选择从机VR1,#08H;置循环次数VA,R0;8位数据送
累加器ASPII1:LRP1.1;使P1.1(时钟)输出为0NP;延时NPV,P1.3;从机输出
SPIS送进位RLA;左移至累加器A最高位至VP1.0,;进位送从机输入SETBP1.1;使
P1.1(时钟)输出为1DJNZR1,SPII1;判断是否循环8次(8位数据)RET4结束语本
文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用S51单片机汇编语言
模拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可
以根据SPI串行总线的操作时序特点来在S96系列、ATEL89系列等单片机上实现SPI
总线的接口。