METech 版 (精华区)

发信人: hitter (小毛), 信区: METech
标  题: [合集]使用时钟上升沿锁存数据的芯片???
发信站: 哈工大紫丁香 (2004年03月03日18:40:07 星期三), 站内信件


────────────────────────────────────────
 play (eye)                           于 2004年02月26日16:13:16 星期四 说道:

    是先发时钟上升沿还是先发数据??
        两者发出的时间差是多少?

────────────────────────────────────────
 nannanjo (王水&水王·水盆洗手 淡出水坛 )  于 2004年02月26日16:56:11 星期四 说道:

啥型号的
【 在 play (eye) 的大作中提到: 】
:     是先发时钟上升沿还是先发数据??
:         两者发出的时间差是多少?

────────────────────────────────────────
 play (eye)                           于 2004年02月26日17:30:45 星期四 说道:

   X25F008带有SPI接口的Flash Memory(obsolete)
    看他的手册上说SI(数据输入在上升沿所存)
          是不是要先发送时钟高   SETB p1.0
           然后                   NOP
          然后                  发数据
【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】
: 啥型号的
: 【 在 play (eye) 的大作中提到: 】
: :     是先发时钟上升沿还是先发数据??
: :         两者发出的时间差是多少?

────────────────────────────────────────
 nannanjo (王水&水王·水盆洗手 淡出水坛 )  于 2004年02月26日21:49:01 星期四 说道:

SPI总线在51系列单片机系统中的实现  
文章作者:易志明 林 凌 李 刚 郝丽宏
文章类型:设计应用 文章加入时间:2003年10月23日10:45 
文章出处:国外电子元器件  
-------------------------------------------------------------------------------
-
   摘要:MCS51系列、MCS96系列等单片机由于都不带SPI串行总线接口而限制了其在SPI总
线接口器件的使用。文中介绍了SPI串行总线的特征和时序,并以串行E2PROM为例,给出了
在51系列单片机上利用I/O口线实现SPI串行总线接口的方法和软件设计程序。 
    关键词:单片机 SPI串行总线 总线接口
1 引言
SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,
它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控
制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标
准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数
据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片
带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。由于S
PI系统总线一共只需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个或几个从外围器件传送
该数据。从器件只有在主机发命令时才能接收或发送数据。其数据的传输格式是高位(MS
B)在前,低位(LSB)在后。SPI总线接口系统的典型结构如图1所示。
当一个主控机通过SPI与几种不同的串行I/O芯片相连时,必须使用每片的允许控制端,这
可通过MCU的I/O端口输出线来实现。但应特别注意这些串行I/O芯片的输入输出特性:首先
是输入芯片的串行数据输出是否有三态控制端。平时未选中芯片时,输出端应处于高阻态
。若没有三态控制端,则应外加三态门。否则MCU的MISO端只能连接1个输入芯片。其次是
输出芯片的串行数据输入是否有允许控制端。因此只有在此芯片允许时,SCK脉冲才把串行
数据移入该芯片;在禁止时,SCK对芯片无影响。若没有允许控制端,则应在外围用门电路
对SCK进行控制,然后再加到芯片的时钟输入端;当然,也可以只在SPI总线上连接1个芯片
,而不再连接其它输入或输出芯片。
3 在MCS51系列单片机中的实现方法
对于不带SPI串行总线接口的MCS51系列单片机来说,可以使用软件来模拟SPI的操作,包括
串行时钟、数据输入和数据输出。对于不同的串行接口外围芯片,它们的时钟时序是不同
的。对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应将
其串行时钟输出口P1.1的初始状态设置为1,而在允许接口后再置P1.1为0。这样,MCU在输
出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至MCS51单片机的P1.3口
(模拟MCU的MISO线),此后再置P1.1为1,使MCS51系列单片机从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所示为MCS51系列单片机与存储器X25F008(E2PROM)的硬件连接图,图2中,P1.0模拟M
CU的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模
拟SPI的数据输入端(MISO)。下面介绍用MCS51单片机的汇编语言模拟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
将MCS51单片机中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
将MCS51单片机R0寄存器的内容传送到X25F008的SPISI中,同时从X25F008的SPISO接收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总线接口实现数据传输的实现方法,给出了用MCS51单片机汇编语言模
拟SPI串行总线的输入、输出,输入/输出以传送8位数据的子程序。实际上,也可以根据S
PI串行总线的操作时序特点来在MCS96系列、ATMEL89系列等单片机上实现SPI总线的接口。
【 在 play (eye) 的大作中提到: 】:    X25F008 带
有SPI接口的Flash Memory(obsolete) :     看他的手册上说SI(数据输入在上升沿所存)
:           是不是要先发送时钟高   SETB p1.0
:            然后                   NOP
:           然后                  发数据
: 【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】

────────────────────────────────────────
 nannanjo (王水&水王·水盆洗手 淡出水坛 )  于 2004年02月26日21:51:21 星期四 说道:

你自己找对你有帮助的东西吧
我对这个实在是不太懂啊^_^
【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】
: SPI总线在51系列单片机系统中的实现  
: 文章作者:易志明 林 凌 李 刚 郝丽宏
: 文章类型:设计应用 文章加入时间:2003年10月23日10:45 
: 文章出处:国外电子元器件  
: -------------------------------------------------------------------------------
: -

────────────────────────────────────────
 hitter (小毛)                        于 2004年02月26日22:25:42 星期四 说道:

好像你的过程是对的
不过我单片机学得不怎么好
【 在 play (eye) 的大作中提到: 】
:    X25F008带有SPI接口的Flash Memory(obsolete)
:     看他的手册上说SI(数据输入在上升沿所存)
:           是不是要先发送时钟高   SETB p1.0
:            然后                   NOP
:           然后                  发数据
: 【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】

────────────────────────────────────────
 nannanjo (王水&水王·水盆洗手 淡出水坛 )  于 2004年02月27日21:27:52 星期五 说道:

怎么没人表扬我千辛万苦找到的文章呢
好打击人家的积极性哦:(
【 在 hitter (小毛) 的大作中提到: 】
: 好像你的过程是对的
: 不过我单片机学得不怎么好
: 【 在 play (eye) 的大作中提到: 】
: :    X25F008带有SPI接口的Flash Memory(obsolete)
: :     看他的手册上说SI(数据输入在上升沿所存)
: :           是不是要先发送时钟高   SETB p1.0
: :            然后                   NOP
: :           然后                  发数据

────────────────────────────────────────
 hitter (小毛)                        于 2004年02月27日23:34:52 星期五 说道:

赫赫~~
好,来表扬以下
不过我真的以为是你原来就有的呢
【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】
: 怎么没人表扬我千辛万苦找到的文章呢
: 好打击人家的积极性哦:(
: 【 在 hitter (小毛) 的大作中提到: 】
: : 好像你的过程是对的
: : 不过我单片机学得不怎么好

────────────────────────────────────────
 alphame ()                   于 2004年02月28日09:23:50 星期六 说道:

这孩子~~~~
发个糖果给你^+++^
//
【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】
: 怎么没人表扬我千辛万苦找到的文章呢
: 好打击人家的积极性哦:(
: 【 在 hitter (小毛) 的大作中提到: 】
: : 好像你的过程是对的
: : 不过我单片机学得不怎么好

────────────────────────────────────────
 nannanjo (王水&水王·水盆洗手 淡出水坛 )  于 2004年02月28日23:32:39 星期六 说道:

......
【 在 alphame () 的大作中提到: 】
: 这孩子~~~~
: 发个糖果给你^+++^
: //
: 【 在 nannanjo (王水&水王·水盆洗手 淡出水坛 ) 的大作中提到: 】
: : 怎么没人表扬我千辛万苦找到的文章呢
: : 好打击人家的积极性哦:(

────────────────────────────────────────
 phannie (phannie)                    于 Mon Mar  1 18:31:01 2004 说道:


【 在 play 的大作中提到: 】
:     是先发时钟上升沿还是先发数据??
:         两者发出的时间差是多少?

先发data,再发posedge clk.

────────────────────────────────────────
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:214.845毫秒