DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 287|回复: 0
打印 上一主题 下一主题

MCS-51单片机与二线制串行E2PROM的接口方法

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:45:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    摘 要:本文介绍二线制串行E2PROM的操作协议以及和MCS-51系列单片机的接口方法,着重讨论如何利用MCS-51的两条I/O线通过软件产生I2C总线所要求的操作时序,以实现MCS-51对二线制串行E2PROM的读写操作。
关键词:二线制串行EEPROM;I2C总线;主器件;从器件

  二线制串行E2PROM是一种非易失存储器,以其体积小、功耗低、操作灵活、性价比高、存储数据可靠等诸多优点,是单片机应用系统中非易失存储器的理想选择。但二线制串行E2PROM的操作采用I2C总线协议,而MCS-51系列单片机没有I2C接口,我们在研制“GLM-500测湿仪”时,利用MCS-51单片机的两条I/O线,通过软件产生I2C总线所要求的操作时序,可方便地实现MCS-51对二线制串行E2PROM的读写操作。

1 二线制串行E2PROM的引脚功能及基本操作时序
  图1是二线制串行E2PROM 24C01/02/04/08/16的引脚排列图。
  仅SCL和SDA端为基本的总线操作端;SCL是串行时钟输入端;SDA是串行数据输入/输出端;漏极开路输出需接上拉电阻到VDD;WP是写保护端,接高电平时,只能读出,禁止写入;A0、A1、A2是片选端,对于
  24C01/02/04/08/16,内部无连接,可接至VSS。




    I2C总线协议运用主/从双向通讯。发送数据到总线上的器件定义为发送器,接收数据的器件定义为接收器。主器件和从器件都可工作于接收器和发送器状态,但总线必须由主器件(通常为微处理器)控制,主器件产生串行时钟(SCL),控制总线上数据传送的方向,并产生开始和停止信号。
  总线从主器件产生开始条件后到产生停止条件期间有效,微处理器对串行E2PROM的读写操作在开始位控制下开始,在停止位控制下结束。
  当SCL和SDA均为高电平时,定义为总线空闲状态,数据的传送必须在总线空闲时才能开始。当SCL为高电平时,SDA由高到低的变化为传送数据的开始位;而当SCL为高电平时,SDA由低到高的变化为停止位。在开始条件以后,SDA上数据的改变必须在SCL为低电平期间进行,在SCL为高电平期间, SDA必须保持稳定。每传送一位数据,主器件必须发出一个时钟脉冲。开始与停止条件如图2所示。




  一次读操作读出的字节数由主器件决定,没有限制,多到一次可以读出整个存储器的内容;而对于写操作,一次最多可以写入一个页面的字节数,如果超过了节),则前面接收到的数据将被覆盖。
  数据传送过程中,每接收一个数据,接收器必须产生一个低电平的确认信号,主器件必须产生一个与此确认位相应的时钟脉冲。
  开始位以后,主器件需送出8位的控制字节,其格式请参考有关的文献。2 接口方法

  MCS-51系列单片机由于没有I2C总线接口,可利用两条I/O线P1.0和P1.1分别连至串行E2PROM的SCL和SDA端,通过软件产生E2PROM所要求的读写时序,MCS-51系列单片机与24C04的硬件连接如图3所示。



3 读写程序

  MCS-51系列单片机对二线制串行E2PROM读写时,必须产生开始位,发送控制字节,控制数据传送,产生停止位。按照图3的连接,MCS-51系列单片机对24C04的读写程序如下:
    ①字节读子程序
  入口条件:R0中存放块内写入单元的地址;R1中存放待写入的数据;R2中存放控制字节。
BYWR:SETBP1.0  ;产生开始位
          CLRP1.1
          CLRP1.0
          MOV A,R2  ;发送控制字节
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          NOP
          JBP1.1,BYWR
            ;判有无确认信号,接收器没确认重新开始
          CLRP1.0
          MOV A,R0  ;发送块内写入字节地址
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          JBP1.1,$  ;判确认信号
          CLRP1.0
          MOV A,R1  ;发送写入数据
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          JBP1.1,$  ;判确认信号  
          CLRP1.0
          CLRP1.1  ;产生停止位
          SETBP1.0
          SETBP1.1
          CLRP1.0
       RET
②字节写子程序
  入口条件:R0中存放块内读出字节的地址;R2中存放控制字节,其最低位为0。
返回结果:读出的数据存于R1中。
    BYRD:SETBP1.0  ;产生开始位
          CLR P1.1
          CLR P1.0
          MOV A,R2  ;发送控制字节
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          NOP
          JBP1.1,BYRD
              ;判确认信号,接收器未确认重新开始
          CLR P1.0
          MOV A,R0  ;发送块内读出字节地址
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          JBP1.1,$  ;判确认信号
          CLR P1.0  ;产生读开始位
          SETBP1.0
          CLR P1.1
          CLR P1.0
          MOV A,R2  ;发送控制字节
          SETBACC.0LCALLSBWR
          SETBP1.1
          SETBP1.0
          JBP1.1,$  ;判确认信号
          CLR P1.0
         MOV R7,#8  ;接收8位数据
BYR1:SETBP1.0
      MOV C,P1.1
      RLC ACLRP1.0
   DJNZR7,BYR1
   CLRP1.1
   SETBP1.0  ;产生停止位
      SETBP1.1
      CLRP1.0
      MOV R1,A
    RET
      SBWR:MOV R7,#8
      SB1: RLC A
            MOVP1.1,C
            SETBP1.0
            CLRP1.0
            DJNZR7,SB1
            RET
  以上子程序对二线制串行E2PROM读写可靠,提供入口条件后可直接调用,此外,串行E2PROM还可进行顺序读和页面写,限于篇幅,不再列出其程序。

 
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-6-8 06:35 , 耗时 0.094610 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表