你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6

[复制链接]
gaosmile 发布时间:2020-8-14 21:51
SPI(Serial Peripheral Interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准,目前,各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,EEPROM,FlashROM,A/D转换器、D/A转换器、LED/LED显示驱动器、I/O接口芯片、实时时钟、UART收发器等等,为用户的外围扩展提供了极其灵活而价廉的选择。由于SPI总线接口只占用微处理器四个I/O口线,采用SPI总线接口可以简化电路没计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。  i1 K' d# ?  q. D, y

5 i( Q5 `7 g- N# w5 O4 R5 V现以 AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。
9 g# W  y& }' j( s 微信图片_20200814214956.png
4 @2 _8 n+ L. U% c93C46存储器SPI总线的工作原理
' N8 d0 S: o- j- W" }2 i: r4 X' q3 C5 L/ q; X
93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。
1 p  c3 U; G" D) s9 [- E& f 微信图片_20200814214959.png
, b0 \, S" p; Y; ?! Z软件模拟SPI接口的实现方法
* }- s& a1 M2 c/ t' `' y5 x$ I. a6 A1 W- G) I/ p
对于不带SPI串行总线接口的AT89C2051单片 机来说,可以使用软件来模拟SPI的操作,图1所示 为AT89C2051单片机与串行EEPROM 93C46的硬件 连接图,其中,P1.0模拟SPI主设备的数据输出端 SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟 SPI的从机选择端SCS,P1.1模拟SPI的数据输入 SDI。
. E8 C) _$ u% F( ~" W

2 Z0 y2 C6 C1 M( ~上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。6 N3 @+ t! J# _0 n/ d  @
( g% `, d/ h, {# |; I+ @1 q
读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。/ Z1 g1 W- I6 m% k0 _5 p1 p7 N
+ I+ ], n/ B2 S. u7 t4 R
写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。( J3 O$ n7 }6 q; b( [; a
- x2 W' I, \5 r' Q
写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。              写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。6 C. z* I7 Q& {. N5 O) r
下面介绍用C51模拟SPI的子程序。2 \* ?# L8 y0 D2 j3 l" T

  1. 0 P+ m+ |6 S. _, g# I# T8 n
  2. 1. //首先定义好I/O口  7 y" y* B* z9 t$ ?/ b
  3. 2. sbit SDO=P1^0;
    ! N1 Z, L5 q( K' y
  4. 3. sbit SDI=P1^1;# j' B6 s! S- K  }. V
  5. 4. sbit SCK=P1^ 2;
    # t  A# H1 v$ ?. G. ~- s( K
  6. 5. sbit SCS=P1^3;
    , G+ {% K$ [0 u  H9 I. y. m" T% |
  7. 6. sbit ACC_7= ACC^7;/ Z+ \( ?- e" M- i
  8. 7. unsigned int SpiRead(unsigned char add)  5 b' L  G4 o" @4 U" ~5 I
  9. 8. {  / R! o' \: C3 c/ k: _' {; c
  10. 9.     unsigned char i;
    ' X( P# Z. @0 U' J9 M( E" |4 N
  11. 10.     unsigned int datal6;
    : X" b- O& D& R, M8 @; s4 G& G; X
  12. 11.     add&=0x3f;/*6位地址*/  / O, E2 _# }0 A
  13. 12.     add |=0x80;/*读操作码l0*/  
    - K8 X1 e( b, ^0 r5 W6 t* i
  14. 13.     SDO=1;/*发送1为起始位*/  
    2 g2 O, ]2 P6 m; v3 H
  15. 14.     SCK=0;6 w; r( U5 t/ Z
  16. 15.     SCK=1;+ u3 h$ Z* e5 |4 H6 T8 I4 Z
  17. 16.     for(i=0;<8;i++)/*发送操作码和地址*/  6 {6 |- o2 J$ `, g+ t) a
  18. 17.     {  
    6 J5 e5 P+ V. C3 x5 N' K
  19. 18.         if(add&0x80==1)  
    4 g. ]( P7 O' K" n( Q, ?3 G
  20. 19.             SDO=1;
    + j$ x0 A! w! o
  21. 20.         else   ( V- Y7 p" g) D% x( }  `1 F' l: c- x
  22. 21.             SDO=0;
    $ h2 |# q2 e4 I8 V1 c
  23. 22.         SCK=0;/*从设备上升沿接收数据*/  3 A2 a0 @; l' x
  24. 23.         SCK=1;
    , D, \! V; p) p) \
  25. 24.         add<<= 1;
    . x# q  t, I% f4 }- w+ n$ C9 M
  26. 25.     }  
    & p" B9 @3 E2 F% _
  27. 26.     SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/    g+ C9 Q+ P8 e& _4 C6 P* A
  28. 27.     SCK=0;
    8 D6 f" C( C0 ?8 a
  29. 28.     datal6<<= 1;/*读16位数据*/  
    ; z6 @2 M  B8 x9 |4 m3 v
  30. 29.     for(i=0;<16;i++)  
    2 B- u  t; Y; h
  31. 30.     {  
    ) K! h: p% Z. D5 m3 L! F6 G
  32. 31.         SCK= 1;
    - m. W* z) H8 X: u
  33. 32.         _nop_();
    7 m; ]$ |" @& R
  34. 33.         if(SDI==1)  
    ) s6 x5 y8 @/ s
  35. 34.             datal6|=0x01;
    1 O2 n+ J. U0 Q/ ~3 t, ]: v6 j# @
  36. 35.         SCK =0;
    0 l1 k: a0 _1 K9 f7 E! b7 ~2 \
  37. 36.         datal6< < =1;, l  F. f% D3 c
  38. 37.     }  % H6 i+ u1 L2 k" p+ ~2 c. e& q
  39. 38.     return datal6;! K' b  P' z/ s. `" C- a" g
  40. 39. }
复制代码
$ T) k/ I" Z2 p& i8 B6 ]7 T. r6 U
对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。
收藏 评论0 发布时间:2020-8-14 21:51

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版