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

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口线,提高设计的可靠性。
1 x' |* y1 G+ E: U1 J( K# n  A

% r7 [* h9 Y: O. B5 H现以 AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。( _0 L2 ^, ^7 y
微信图片_20200814214956.png   R7 \! u% d% E" q- H; r
93C46存储器SPI总线的工作原理
; X- V. }. S9 V! K! B. d8 p
' [7 R+ Q  a2 g9 B( A! |- I93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。
/ E$ T9 W1 S% K 微信图片_20200814214959.png
" D$ {" Y- p1 }软件模拟SPI接口的实现方法 ) x( B" O  o+ Z$ @- l' K* `, w8 d

9 N; T3 N% S# i# O1 ~8 _4 P对于不带SPI串行总线接口的AT89C2051单片 机来说,可以使用软件来模拟SPI的操作,图1所示 为AT89C2051单片机与串行EEPROM 93C46的硬件 连接图,其中,P1.0模拟SPI主设备的数据输出端 SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟 SPI的从机选择端SCS,P1.1模拟SPI的数据输入 SDI。' Y9 M: ^3 b) T% r, D

/ o3 s1 v2 [8 y: b3 H, G# J上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。
6 f$ z' u% k" h' O) o+ @- ^
" l! S5 M3 B/ c* r( \9 v
读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。5 N1 d3 P0 V) s. }" S
9 N* z7 Y& x+ W5 y$ @% z  J5 Z
写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。
" o- X3 k# C- z* t
1 Z  ~: }; y2 ?! x# E5 H) }
写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。              写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。( |/ _6 f8 @1 o, ]
下面介绍用C51模拟SPI的子程序。
9 Y* `5 [! |3 h' C# E: p

  1. . n# z& n% L7 Z2 V% D" |5 u
  2. 1. //首先定义好I/O口  1 t" C, R9 @/ t( v( ~" C5 T( D: f
  3. 2. sbit SDO=P1^0;
    2 e- E3 t6 o6 A7 f
  4. 3. sbit SDI=P1^1;
    ' W; T2 Q* g1 M
  5. 4. sbit SCK=P1^ 2;$ b6 S  Q1 e; I
  6. 5. sbit SCS=P1^3;8 p3 T# L: ?2 t+ V
  7. 6. sbit ACC_7= ACC^7;
    , f& F. ~6 y; D' R$ B# F
  8. 7. unsigned int SpiRead(unsigned char add)  + f: e! j( G: @7 a/ b# {5 s
  9. 8. {  5 }2 R4 R) r, J; s5 }, |( n
  10. 9.     unsigned char i;
    / N- L- Y" g& s  u) d
  11. 10.     unsigned int datal6;( J# F! r8 g* P
  12. 11.     add&=0x3f;/*6位地址*/  
    2 v5 l) K$ C7 T6 B) |
  13. 12.     add |=0x80;/*读操作码l0*/  8 {- A0 m9 r0 K7 y: ^
  14. 13.     SDO=1;/*发送1为起始位*/  
    " N! Y+ [# T6 d, r% c. c' H8 M/ \
  15. 14.     SCK=0;
    6 Z' i2 \2 g4 U
  16. 15.     SCK=1;
    - ^( T+ C$ `# v& z' w
  17. 16.     for(i=0;<8;i++)/*发送操作码和地址*/  
    5 U2 g4 B% o; M, V5 v7 `
  18. 17.     {  9 c" J! I, I% I' l# k% [
  19. 18.         if(add&0x80==1)  ! {7 o1 t- R2 ~  D" a% s# J% n
  20. 19.             SDO=1;) u- ~: y0 p+ a0 V9 P
  21. 20.         else   $ t4 q$ J5 A- v# ?: Y* [" _
  22. 21.             SDO=0;
    % k# r1 O8 Z# j* t! j
  23. 22.         SCK=0;/*从设备上升沿接收数据*/  , v# i  F: z$ [  w% S$ E0 o% A8 o8 i
  24. 23.         SCK=1;
    6 a7 \4 G/ \$ \. P4 T
  25. 24.         add<<= 1;
    ) N- M$ G) Y( W0 l7 A
  26. 25.     }  6 {7 ], G/ c* m$ z# @6 s
  27. 26.     SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/  
    3 Y& c" B) {3 Z: N5 A& f
  28. 27.     SCK=0;: v* L/ D8 a2 t9 b" r: H( D5 [
  29. 28.     datal6<<= 1;/*读16位数据*/  
    3 A8 w, U2 v6 @" I" X/ x: B8 ^& L
  30. 29.     for(i=0;<16;i++)  
    2 L  v: z- q5 ?7 r3 M$ [
  31. 30.     {  
    ( z2 S5 s9 t; {" r/ q
  32. 31.         SCK= 1;6 y2 h( t1 v( y7 ~' b, B
  33. 32.         _nop_();) P: b" a! n5 [" i. y' i6 o$ }0 n
  34. 33.         if(SDI==1)  
    5 u) |: g' r9 h2 d* s5 O/ p
  35. 34.             datal6|=0x01;
    ' M: g3 @! l0 ^5 r) H0 X' S, R5 ~
  36. 35.         SCK =0;7 I8 h  M) l" q/ v9 s2 }
  37. 36.         datal6< < =1;
    , F! t6 S* {9 e4 V7 `
  38. 37.     }  8 a4 d/ z( E, `' d3 G/ o8 |
  39. 38.     return datal6;
    / H$ F2 t" [5 h* b
  40. 39. }
复制代码
, Q9 o8 w8 z0 _% ^: q
对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。
收藏 评论0 发布时间:2020-8-14 21:51

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版