微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 铁电存储器FM24C16原理及其在多MCU系统中的应用

铁电存储器FM24C16原理及其在多MCU系统中的应用

时间:04-11 来源:互联网 点击:

任意读的操作过程给予说明:执行写操作到写人数据前,也就是在收到输入字节单元地址后的从应答后,MCU再发送起始位,然后发送从器件固定地址(1010)、3b页选择位和读控制位1,在收到从应答后,MCU从FM24C16里面读出1 B的数据。如果只读1 B的数据,则MCU发送一个无需应答信号,然后发送停止位结束读操作。如果是页面读,MCU就发一个主应答信号,继续读下一个字节数据,直到读出最后一个字节数据后,MCU发出无需应答信号和停止位结束读操作。

在对FM24C16进行读、写操作的过程中,应该注意以下2个问题:

(1)时序问题,这主要是指SDA,SCL的高低电子的时序。如果在读、写过程中时序不对或者不稳定,都会引起读、写失败,所以为了保证稳定,可以在程序中适当加入NOP语句延时,但不要过多,以免影响读、写速度。

(2)SDA数据只能在SCL为低期间变化,在SCL为高期间,SDA数据要保持不变否则会被错误地认为是控制位而不是数据位,导致读、写失败。

3、应用接口及程序

FM24C16与单片机接口电路非常简单,下面以碳控仪系统中的应用为例给予说明,并给出部分子程序。应用接口图如图2所示,系统中采用2片AT89C55单片机,用其P2.0和P2.1口与SDA,SCL相连接,在SDA和SCL引脚接1.8kΩ的上拉电阻到+5V,工作
电源也为+5V,WP引脚接电源地以保证可以任意写入数据。2片AT89C55用P1.0,P1.1作为通讯口,来确定谁操作FM24C16:片1操作前,检测P1.0口,如果为高,则置低P1.1口,向片2发出占用FM24C16信号,然后再检测P1.0口,还为高,则进入操作,若为低,则退出操作并把P1.1口置高;如果P1.0口为低,则说明片2占用FM24C16,片1就放弃操作,等待下次查询和操作。片2的操作相对应于片1。这样,FM24C16不仅作为了公共数据区,而且也成为了2片MCU的一个模拟的通讯口,而且理论上来说,1片FM24C16上可以挂很多MCU,而可以省去不必要的MCU间的通讯。这就需要FM24C16承受快速、频繁读写,这是其他E2PROM望尘莫及的。

下面给出FM24C16的页面写和任意字节读汇编子程序。程序经过应用验证,效果良好(为保证稳定性,可以在相应地方加入空语句以延时)。

页面写子程序:
PAGE-WR: ACALL START_BIT
MOV A,#10100000B
MOV R7,#4
ACALL SHFTO
;SHFTO为送位子程序,以上3行送
1010到FM24C16
MOV A,#20H
MOV R7,#3
ACALL SHFTO
;以上3行确定写FM24C16的00l页
MOV A,#00H
MOV R7,#1
ACALL SHFTO ;以上3行送写控制位0
ACALL SlAVE_ACK
;SLAVE-ACK为从应答子程序,在此检测
从应答位
MOV A,#00H
MOV R7,#8
ACALL SHFTO
;以上3行确定写入数据首地址为00H
ACALLSLAVE-ACK ;检测从应答位
MOV R0,#00H ;R0中为被写人数据
所在单元首地址
MOV R4,#7FH ;R4中为写入字节数
(现为256B)
NEXT-DATA:MOV A,@R0 ;调入第1个写入数据
INC R0 ;R0指向第2个数据所在单元地址
MOV R7,#8
ACALL SHFTO;写入数据
ACALL SLAVE-ACK ;检测从应答位
DJNZ R4,NEXT-DATA
;循环写入下一个字节数据
ACALL STOP-BIT
;STOP-BIT为停止位,结束写操作(此处没有写延时等待)
RET ;返回,程序结束

读任意地址子程序:
SELECT-RD:ACALL START-BIT
ACALL START-BIT
MOV A,#10100000B
MOV R7,#4
ACALL SHFTO
MOV A,#20H
MOV R7,#3
ACALL SHFTO
MOV A,#0FOH
MOV R7,#1
ACALL SHFTO
ACALL SlAVE-ACK
MOV R5,#00H
MOV R7,#8
ACALL SHFTO
ACALL SlAVE-ACK
;以上为伪写,确定读FM24C16的001
00H单元数据
ACALL START-BIT
MOV A,#10100000B
MOV R7,#4
ACALL SHFTO
MOV A,#20H
MOV R7,#3
ACALL SHFTO
MOV A,#0FOH
MOV R7,#1
ACALL SHFTO ;上面3行送读控制位1
ACALL SlAVE-ACK
MOV R5,#00H ;清R5,以存储读出数据
MOV R7,#8 ;R7作读出位记数器
CLOCK8: SETB SCL
MOV C,SDA
CLR SCL
MOV A,R5
RLC A
MOV R5,A
;以上6行读出FM24C16送来的1位
DJNZ R7,CLOCK8 ;循环读出1B数据
ACALL NO_ACK
;NO_ACK为无需应答位子程序
ACLL STOP_BIT ;停止
RET ;程序结束

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top