![]() |
|
||||||||||||||
| | 网站首页 | 文章中心 | 下载中心 | 雁过留声 | 优创论坛 | | ||
|
||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| X25043/45 E2 PROM及其与51系列微处理器的接口方法 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
作者:佚名 文章来源:转载 点击数: 更新时间:2006-11-1 ![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
在前面的一编文章里我们介绍了一款以8031单片机做的配料系统,其中用到到了X25043,在网上我查到一编介绍这种芯片的文章,供大家参考,谢谢原作者! 摘要:X25043/45 E2PROM芯片的特点及主要功能,描述了其引脚定义、工作原理、操作指令、存储阵列读时序和写时序。介绍它与51系列微处理器的几种接口方法,并给出应用电路和相应程序。 关键词:可编程 写使能 51系列微处理器 接口方法 随着测量技术的发展和微处理器的广泛应用,系统的电路越来越复杂,系统的可靠性问题也越来越突出,因此看门狗、 1 X25043/45的主要特点和引脚定义 X25043/45的主工特点如下: (1)可编程的看门狗定时器,通过指令可选择看门狗定时时间;(2)工作电压监测,并产生复位信号;(3)读写时钟速率可达1MHz;(4)518×8位串行E2PROM;(5)数据块锁定功能和处内偶然性的写保护功能,保护存储数据;(6)CMOS器件,低功耗;(7)擦写次数最少10万次,最少100年的数据保存期。
2 工作原理及操作指令 X25043/45内含一个8位指令寄存器,传送指令、数据和地址时按8位串行数据格式进行,且均以最高有效位在先的方式传送。其指令见表2。SI线上输入的数据在SCK上升沿被锁存,芯片内的数据在SCK下降沿输出至SO线上。时钟SCK允许操作过程中停止并在其后恢复。
在读存储阵列时,将CS拉至低电平,发送SCK时钟脉冲,通过SI线发送含最高位地址A8的READ指令,然后发送8位地址,选定的存储单元中的数据被送到SO线上。每个数据被送出后,芯片内的地址计数器自动加1,指向下一存储单元;若继续提供SCK脉冲,可读出下一存储单元数据。当地址计数器达到$1FFH时,自动翻转至$000H单元,直至CS为高电平,终止读操作。SO线不输出数据时,呈高阻状态。其时序如图2所示。读状态寄存器时,片选后发送RDSR指令,状态寄存器的内容在发送RDSR指令的第8个SCK脉冲的下降沿被送出到SO线上。 在写操作之前,必须置位“写使能”。在字节、页或状态寄存器写周期完成后和上电情况下,“写使能”自动复位,WP为低电平,“写使能”可被复位。“写使能”复位时,不能对芯片进行写操作。因此必须置WP为高电平,将片选CS置低电平,向芯片发出WREN指令,接着再将片选CS置位,以置位“写使能”。若不将CS置位而继续进行写操作,则写操作无效。最少一个SCK周期后,重新将CS置低电平以进行写操作。写存储阵列时,发送含最高位地址位A8的WRITE指令后,送8位地址,再送数据写入芯片。在CS一直为低电平的情况下,可以连续送写同一页地址的4个字节数据。超过4个字节数据,芯片将自动从本南的第一个地址重新写入,因此必须在第24、32、40、48个SCK周期后,置位CS;写状态字时,发送WRSR后送更新的状态寄存器内容。 发送WREN、WRDI和RDSR指令时,不必发送地址或数据。RDSR、WRSR指令分别用于读、写X25043/45内的状态寄存器。状态寄存器的格式如下:
注:×是随意位 WD1、WD0是看门狗定时位,为非易失性位,其组合表征的时间见表3。
BL1、BL0是存储器块保护位,为非易失性位,其组合表征的保护存储器阵列范围见表4。选定保护的块,用户只能读而不能写。
WEL是“写使能”锁存器状态位,只读位。为1,“写使能”置位;为0,“写使能”复位。 WIP是表征芯片写操作忙位,只读位。为1,写操作正在进行;为0,无写操作。 由于51系列微处理器无SPI接口,因此必须通过移位方式来实现通讯。X25043与51系列微处理器接口时,一般不能通过CPU的P2口进行片选,只有在P2口为位控方式工作时才允许。51系列CPU的P2口工作于地址总线方式时,其输出是脉冲形式,地址送出后,呈高电平。因此在对X25045操作时,不能保证片选持续有效,也就不能对其进行任何操作。为此片选CS只能是位控方式连接,一般与CPU的P1或P3口相连接。 图3是一款典型接口电路。R1是复位输出的上拉电阻,上拉电阻是必需的。微处理器U1为89C52,U2为X25045,提供高电平复位信号。从图3中可以看出,X25045必须用4根线与CPU接口。 在系统接口复杂时,典型接口方式将浪费宝贵的CPU口资源;进行口扩展时,既增加成本,又减低了可靠性,不能体现X25045的优点。在系统设计时,设计人员往往都力求最精简最可靠的最小系统方案,而较复杂的系统几乎用满所有CPU口线。 图4和图5两款电路相对图3有一定改进,经济实用,均能可靠地运行。图4所示电路是一种总线接口方式。但对X25045操作时,P2口不能选择其它任何器件。若总线其它器件均以低电平选择有效时,必须选将P2口置高电平,即:MOV P2,#0FH。这款电路在对X25043/45操作时,系统的中断操作中不能有数据输入输出操作。若有数据输入输出操作,必须先关中断,否则将出现逻辑混乱,甚至烧毁CPU和X25043/45。在访问X25043/45的优先级低于中断操作的最高级时,也就是说,在访问X25045时系统还必须响应中断。如有URT串口工作时,则不能使用该款电路。 以上三款电路的编程方法基本相同。对于图5所示的电路,在对X25045操作前,先要禁止所有中断,将P2口全部置高电平,才能读写X25045。三厌电路读写X25045时,程序唯一的差别是在定义赋值CS、SI、SCK、SO上。对于图5,将SI、SO的定义赋值相同。据图5接口方式编有如下范围程序,该程序提供了所有X25045的命令。 源程序: CS BIT P1.0 ;P1.0作片选 SI BIT P1.2 P1.2作串作输入 SO BIT P1.2 ;P1.2作串行输出 SCK BIT P1.3 ;P1.3作串行时钟 WREN_INST EQU 06H ;写锁存指令 WRDI_INST EQU 04H ;读锁存指令 WRST_INST EQU 01H ;写状态寄存器指令 RDSR_INST EQU 05H ;读状态寄存器指令 WRITE_INST EQU 02H ;写存储阵列指令 READ_INST EQU 03H ;读存储阵列指令 BYTE_ADDR EQU 55H ;字节操作方式存储器地址 BYTE_DATA EQU 0EAH ;写操作数据 PAGE_ADDR EQU 1F0H ;页操作方式存储器地址 PAGE_DATA1 EQU 99H ;写入页的第一个数据字节 PAGE_DATA2 EQU 0AAH ;写入页的第二个数据字节 PAGE_DATA3 EQU 0CCH ;写入页的第三个数据字节 STATUS_REG EQU 10H ;状态寄存器 MAX_POLL EQU 99H ;写忙(WIP)查询最大循环数 STACK_TOP EQU 060H ;堆栈指针 初始化子程序: INSTALL:MOV SP,#STACK_TOP CLR EA CLR A SETB CS CLR SI SETB SO CLR SCK RET 复位看门狗子程序: RES_DOG:CLR CS SETB CS RET 写操作忙标志查询子程序: WIP_POLL:MOV R1,#MAX_POLL WIP_POLL1:LCALL RS_C JNB ACC.0,WIP_POLL2 DJNZ R1,WIP_POLL1 WIP_POLL2: RET 复位“写使能”子程序: WD_C:CLR SCK CLR CS MOV A,#WRDI_INST LCALL OUTBYT CLR SCK SETB CS RET 置位“写使能”子程序: WE_C:CLR SCK CLR CS MOV A,#WREN_INST LCALL OUTBYT CLR SCK SETB CS RET 写状态寄存器子程序: WS_C:CLR SCK CLR CS MOV A,#WRSR_INST LCALL OUTBYT MOV A,#STATUS_REG LCALL OUTBYT CLR SCK SETB CS LCALL WIP_POLL RET 读状态寄存器子程序: RS_C: CLR SCK CLR CS MOV A,#RDSR_INST LCALL OUTBYT LCALL INBYT CLR SCK SETB CS RET 单字节数据写入子程序: BYTE_W:MOV DPTR,#BYTE_ADDR CLR SCK CLR CS MOV A,#WRITE_INST MOV B,DPH MOV C,B.0 MOV ACC.3,C LCALL OUTBYT MOV A,DPL LCALL OUTBYT MOV A,#BYTE_DATA LCALL OUTBYT CLR SCK SETB CS LCALL WIP_POLL RET 单字节数据读出子程序: BYTE_R:MOV DPTR,#BYTE_ADDR CLR SCK CLR CS MOV A,#READ_INST MOV B,DPH MOV C,B.0 MOV ACC.3,C LCALL OUTBYT MOV A,DPL LCALL OUTBYT LCALL INBYT MOV R6,A CLR SCK SETB CS RET 连续3字节数据写入子程序: PAGE_W:MOV DPTR,#PAGE_ADDR CLR SCK CLR CS MOV A,#WRITE_INST MOV B,DPH MOV C,B.C MOV ACC.3,C LCALL OUTBYT MOV A,DPL LCALL OUTBYT MOV A,#PAGE_DATA1 LCALL OUTBYT MOV A,#PAGE_DATA2 LCALL OUTBYT MOV A,#PAGE_DATA3 LCALL OUTBYT CLR SCK SETB CS LCALL WIP_POLL RET 连续2字节读取子程序: SEQU_R:MOV DPTR,#PAGE_ADDR CLR SCK CLR CS MOV A,#READ_INST MOV B,DPH MOV C,B.0 MOV ACC.3,C LCALL OUTBYT MOV A,DPL LCALL OUTBYT LCALL INBYT MOV R2,A LCALL INBYT MOV R3,A LCALL INBYT MOV R4,A CLR SCK SETB CS RET 字节读出子程序: OUTBYT:MOV R0,#08 OUTBYT1:CLR SCK RLC A MOV SI,C SETB SCK DJNZ R0,OUTBYT1 CLR SI RET 字节写入子程序: INBYT:MOV R0,#08 INBYT1:SETB SCK CLR SCK MOV C,SO RLC A DJNZ R0,INBYT1 RET |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 文章录入:admin 责任编辑:admin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|