X5045和51单片机接口

X25045是带有串行E2PROM的CPU监控器。现在型号改为X5045,性能相同

图2是它的引脚图:

CS/WDI:片选输入/看门狗复位输入;

SO:串行输出;

WP:写保护输入;

Vss:地;

Vcc:电源;

RESET:复位输出;

SCK:同步时钟输入;

SI:串行输入。

X25045的状态寄存器描述器件的当前状态,各位意义如表1所列。

表1

7 6 5 4 3 2 1 0
0 0 WD1 WD0 BL1 BL0 WEL WIP

其中,WD1、WD0是看门狗定时时间设置位;BL1、BL0是存储单元写保护区设置位;WEL是只读标志,1表明写使能开关打开;WIP也是只读标志,1代表芯片内部正处于写周期。电复位时,各位都被清零。

X25045芯片功能包括以下4种:

(1)上电复位控制。在对X25045通电时,ERSET引脚输出有效的复位信号,并保持至少200ms,使CPU有效复位。

(2)电源电压监控。当检测到电源电压低于内部门槛电压VTRIP时,RESET输出复位信号,直至电源电压高于VTRIP并保持至少200ms,复位信号才被撤消。VTRIP的出厂值根据芯片型号不同共有5个级别的电压范围。对于需要电源电压精确监控的应用,用户可以搭建编程电路,对芯片内VTRIP电压进行微调。

(3)看门狗定时器。芯片内部状态寄存器的WD1、WD0是看门狗定时设置位,通过状态寄存器写指令WRSR修改这2个标志位,就能在3种定时间隔中进行选择或关闭定时器。对看门狗的复位由CS输入电平的下降沿完成。表2是WD1、WD0组合的含义。

表2

WD1 WD0 看门狗定时值
0 0 1.4s
0 1 600ms
1 0 200ms
1 1 禁止看门狗工作

(4)串行E2PROM。芯片内含512字节存储单元,10万次可靠写,数据保持时间100年。XICOR设计了3种保护方式防止误写。包括:WP写保护引脚,当引脚被拉低时,内部存储单元状态寄存器都禁止写入;存储区域写保护模式,通过对状态寄存器的BL1、BL0位的设置,可以选择对不同的存储区域进行写保护;在进行任何写操作前都必须打开写使能开关,而且在上电初始化写操作完成时,写使能开关自动关闭。显然,在几方面的保护之下,产生误写的可能性极小,表3是BL1、BL0组合的含义。

表3 

BL1 BL0 写保护的单元地址
0 0 没有保护
0 1 180H~1FFH
1 0 100H~1FFH
1 1 000H~1FFH

对X25045的操作是通过4根口线CS、SCK、SI和SO进行同步串行通信来完成的。SCK是外部输入的同步时钟信号。在对芯片定改指令或数据时,时钟前沿将SI引脚信号输入;在读邮数据时,时钟后沿将数据位输出到SO引脚上。数据的输入/输出都是高位在先。

芯片内部共有6条指令,如表4所列。

表4

命令名称 命令格式 内  容
WREN 0000 0110 打开写使能开关
WRDI 0000 0100 关闭写使能开关
RDSR 0000 0101 读状态寄存器
WRSR 0000 0001 写状态寄存器
READ 0000 A8011 读存储单元
WRITE 0000 A8010 写存储单元

(1)WREN和WRDI是写使能开关的开/关指令。它们都是单字节指令。

(2)RDSR和WRSR是状态寄存器的读/写指令。在从SI输入指令后,RDSR的执行结果,即状态寄存器内容须从SO读出;而WRSR需要紧接着输入修改数据。

(3)READ和WEITE是存储单元的读/写指令。输入指令后(指令码第三代表存储单元地址的最高位),接着输入低八位地址,最后就可以连续读出或写入数据。其中,读指针和写指针的工作方式完全不同,读指针的全部8位用来计数,0FFH溢出后变成00H;写指针只用最低两位计数,XXXXXX11B溢出后变成XXXX XX00B,所以连续写的实际结果是在4个单元中反复写入。另外,由于E2PROM的写入时间长,所以在连续两条写指令之间应读取WIP状态,只有内部写周期结束时才可输入下一条写指令。

AT89C2051内部没有SPI接口硬件,因此本系统利用了单片机的4根口线和软件模拟读写时序的方式与X25045通信。软件包在文末给出。

四、软件原理

X25045的通信接口软件:

CS BIT P3.2

SCK BIT P3.3

SI BIT P3.4

SO BIT P3.5

(1)X25045数据写入程序

功能:将缓冲区数据写入指定地址开始的单元。

入口:F0、R3是E2PROM单元地址最高位低八位;R0是缓冲区首地址;R2是缓冲区长度。

WRITEX:LCALL STAX ;指令启动

MOV A,#06H ;输出WREN

LCALL BYTE_OUT

LCALL STAX ;下一指令启动

MOV A,#02H ;输出WRITE

MOV C,F0 ;插入单元地址最高位

MOV ACC.3,C

LCALL BYTE_OUT

MOV A,R3 ;输出单元地址低八位

LCALL BYTE_OUT

BYWR:MOV A,@R0 ;从缓冲区取数输出

LCALL BYTE_OUT

INC R0 ;指针加1

DJNZ R2,BYWR ;缓冲区未空则继续输出

LCALL ENDX ;指令结束

LCALL WIP_CHK ;等待WIP=0

RET

(2)X25045数据读出程序

功能:把指定地址开始的单元数据读出并放入缓冲区

入口:与写入程序相同。

READX:LCALL STAX

MOV A,#03H ;输出READ

MOV C,F0

MOV ACC.3,C

LCALL BYTE_OUT

MOV A,R3 ;输出低八位地址

LCALL BYTE_OUT

BYRD:LCALL BYTE_IN ;输入数据送入缓冲区

MOV @R0,A

INC R0 ;指针加1

DJNZ R2,BYRD ;缓冲区未满则继续输入

LCALL ENDX

RET

(3)X25045状态寄存器写入程序

功能:对状态寄存器进行设置。

入口:ACC是修改值。

WRSR:LCALL STAX

PUSH ACC

MOV A,#06H ;输出WREN

LCALL BYTE_OUT

LCALL STAX

MOV A,#01H ;输出WRSR

LCALL BYTE_OUT

POP ACC ;输出设置值

LCALL BYTE_OUT

LCALL ENDX

LCALL WIP_CHK ;等待WIP=0

RET

(4)X25045状态寄存器读出程序

功能:读出状态寄存器当前值。

出口:ACC是当前值。

RDSR:LCALL STAX

MOV A,#05H

LCALL BYTE_OUT

LCALL BYTE_IN

LCAL ENDX

RET

(5)其他子程序

WIP_CHK:LCALL RDSR ;等待X25045结束内部写周期

JB ACC.0,WIP_CHK

RET

STAX:SETB CS ;启动X25045指令

NOP ;先拉高CS,再拉你SCK,最后拉低CS

CLR SCK

NOP

CLR CS

NOP

RET

ENDX:CLR SCK ;结束X25045指令

SETB CS ;先拉低SCK后拉高CS

NOP

NOP

RET

BYTE_OUT:MOV R4,#08H ;向X25045写入一字节数据

BOUT1:CLR SCK

RLC A

MOV SI,C

SETB SCK

NOP

NOP

DJNZ R4,BOUT1

RET

BYTE_IN:MOV R4,#08H ;从X25045读出一字节数据

BIN1:CLR SCK

MOV C,SO

RLC A

SETB SCK

NOP

NOP

DJNZ R4,BIN1

RET

RST_DOG:SETB CS ;复位看门狗定时器

NOP

CLR CS

NOP

SETB CS

RET

    备注:如果不需要AT89C51实验开发板中的12伏电源变压器,价格可以降低10元

点击查看详细品种!

邮局汇款地址:邮编226200 江苏省启东市江海中路511号水晶苑 A-1 谢刚 收

点击查看邮购需知!        立即进入订货系统!

电话/传真:0513-3342087 小灵通:0513-3082087 联系人:谢刚

主邮箱: (推荐使用)

点击返回《电子制作实验室》网站主页