2024年1月17日发(作者:)
SPI接口应用之一---看门狗芯片X25045
hadao 发表于 2006-5-8 0:08:41
一、引脚定义及通信协议
SO:串行数据输出脚,在一个读操作的过程中,数据从SO脚移位输出。在时钟的下降沿时数据改变。
SI: 串行数据输入脚,所有的操作码、字节地址和数据从SI脚写入,在时钟的上升沿时数据被锁定。
SCK:串行时钟,控制总线上数据输入和输出的时序。
/CS :芯片使能信号,当其为高电平时,芯片不被选择,SO脚为高阻态,除非一个内部的写操作正在进行,否则芯片处于待机模式;当引脚为低电平时,芯片处于活动模式,在上电后,在任何操作之前需要CS引脚的一个从高电平到低电平的跳变。
/WP:当WP引脚为低时,芯片禁止写入,但是其他的功能正常。当WP引脚为高电平时,所有的功能都正常。当CS为低时,WP变为低可以中断对芯片的写操作。但是如果内部的写周期已经被初始化后,WP变为低不会对写操作造成影响。
二、硬件连接
三、程序设计
状态寄存器:
7
X
6
X
5
WD1
4
WD0
3
BL1
2
BL0
1
WEL
0
WIP
WIP: 写操作标志位, 为1表示内部有一个写操作正在进行,为0则表示空闲,该位为只读。
WEL: 写操作允许标志位,为1表示允许写操作,为0表示禁止写,该位为只读。
BL0,BL1: 内部保护区间的地址选择。被保护的区间不能进行看门狗的定时编程。
WD0,WD1:可设定看门狗溢出的时间。有四种可选择:1.4s,600ms,200ms,无效。
操作码:
WREN 0x06 设置写允许位
WRDI 0x04 复位写允许位
RDSR 0x05 读状态寄存器
WRSR 0x01 写状态寄存器
READ 0x03/0x0b 读操作时内部EEPROM页地址
WRITE 0x02/0x0a 写操作时内部EEPROM页地址
程序代码:
#i nclude
sbit CS= P2^7;
sbit SO= P2^6;
sbit SCK= P2^5;
sbit SI= P2^4;
#define WREN 0x06
#define WRDI 0x04
#define RDSR 0x05
#define WRSR 0x01
//
//
//
//
#define READ0 0x03 //
#define READ1 0x0b //
#define WRITE0 0x02 //
#define WRITE1 0x0a //
#define uchar unsigned char
uchar ReadByte() //read a byte from device
{
bit bData;
uchar ucLoop;
uchar ucData;
for(ucLoop=0;ucLoop<8;ucLoop++)
{
SCK=1;
SCK=0;
bData=SO;
ucData<<=1;
if(bData)
{ ucData|=0x01; }
}
return ucData;
}
void WriteByte(uchar ucData)//write a byte to device
{
uchar ucLoop;
for(ucLoop=0;ucLoop<8;ucLoop++)
{
if((ucData&0x80)==0) //the MSB send first
{SI=0;}
else
{SI=1;}
SCK=0;
SCK=1;
ucData<<=1;
}
}
uchar ReadReg() //read register
{
h level
n为页 */
igh level
//write register
写入一个字节,cData为写入的数,cAddress为写入地址,bRegio //the device is busy
uchar ucData;
CS=0;
WriteByte(RDSR);
ucData=ReadByte();
CS=1;
return ucData;
}
uchar WriteReg(uchar ucData)
{
uchar ucTemp;
ucTemp=ReadReg();
if((ucTemp&0x01)==1) //the device is busy
return 0;
CS=0;
WriteByte(WREN);//when write the WREN, the cs must have a hig CS=1;
CS=0;
WriteByte(WRSR);
WriteByte(ucData);
CS=1;
return 1;
}
void WriteEpm(uchar cData,uchar cAddress,bit bRegion)
/*
{
while((ReadReg()&0x01)==1);
CS=0;
WriteByte(WREN); //when write the wren , the cs must have a h CS=1;
CS=0;
if(bRegion==0)
{ WriteByte(WRITE0);} //write the page addr
else
{WriteByte(WRITE1);}
WriteByte(cAddress);
WriteByte(cData);
SCK=0; //
CS=1;
}
uchar ReadEpm(uchar cAddress,bit bRegion)
/* 读入一个字节,cAddress为读入地址,bRegion为页 */
{
uchar cData;
while((ReadReg()&0x01)==1);//the device is busy
CS=0;
if(bRegion==0)
{WriteByte(READ0); }
else
{WriteByte(READ1);}
WriteByte(cAddress);
cData=ReadByte();
CS=1;
return cData;
}
main()
{
WriteReg(0x00);//set the watchdog time as 1.4s
CS=1;
CS=0; //reset the watchdog
}
基于X25045的新型看门狗电路图
作者:重庆三峡学院应用技术学院 谢辉 来源:不详 点击数:
7年02月14日
更新时间:200看门狗(watchdog)电路是嵌入式系统需要的抗干扰措施之一。本文用x25045芯片设计了一
种新的看门狗电路,具有体积小、占用i/o口线少和编程方便的特点,可广泛应用于仪器仪表和各种工控系统中。
前言
工控系统在运行时,通常都会遇到各种各样的现场干扰,抗干扰能力是衡量工控系统性能的一个重要指标。看门狗(watchdog)电路是自行监测系统运行的重要保证,几乎所有的工控系统都包含看门狗电路。在8096系列单片机和增强型8051系列单片机中,该系统已经做在芯片内部,用户只要用软件开放它就可以,使用很方便。但目前工控系统仍在使用廉价的普通型8051系列单片机,则看门狗电路必须由用户自己建立。
看门狗电路一般有软件看门狗和硬件看门狗两种。软件看门狗不需外接硬件电路,但系统需要出让一个定时器资源,这在许多系统中很难办到,而且若系统软件运行不正常,可能导致看门狗系统也瘫痪。硬件看门狗是真正意义上的“程序运行监视器”,如计数型的看门狗电路通常由555多谐振荡器、计数器以及一些电阻、电容等组成,分立元件组成的系统电路较为复杂,运行不够可靠。
x25045芯片简介
x25045是美国xicor公司的生产的标准化8脚集成电路,它将eeprom、看门狗定时器、电压监控三种功能组合在单个芯片之内,大大简化了硬件设计,提高了系统的可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗,是一种理想的单片机外围芯片。x25045引脚如图1所示。
图1 x25045引脚图
其引脚功能如下。
cs:片选择输入;
so:串行输出,数据由此引脚逐位输出;
si:串行输入,数据或命令由此引脚逐位写入x25045;
sck:串行时钟输入,其上升沿将数据或命令写入,下降沿将数据输出;
wp:写保护输入。当它低电平时,写操作被禁止;
vss:地;
vcc:电源电压;
reset:复位输出。
x25045在读写操作之前,需要先向它发出指令,指令名及指令格式如表1所示。
表1 x25045指令及其含义
x25045看门狗电路设计及编程
x25045硬件连接图如图2所示。x25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。在看门狗定时器预置的时间内若没有总线活动,则x25045将从reset输出一个高电平信号,经过微分电路c2、r3输出一个正脉冲,使cpu复位。图2电路中,cpu的复位信号共有3个:上电复位(c1、r2),人工复位(s、r1、r2)和watchdog复位(c2、r3),通过或门综合后加到reset端。c2、r3的时间常数不必太大,有数百微秒即可,因为这时cpu的振荡器已经在工作。
图2 x25045看门狗电路硬件连接图
看门狗定时器的预置时间是通过x25045的状态寄存器的相应位来设定的。如表2所示,x25045状态寄存器共有6位有含义,其中wd1、wd0和看门狗电路有关,其余位和eeprom的工作设置有关。
表2 x25045状态寄存器
wd1=0,wd0=0,预置时间为1.4s。
wd1=0,wd0=1,预置时间为0.6s。
wd1=1,wd0=0,预置时间为0.2s。
wd1=1,wd0=1,禁止看门狗工作。
看门狗电路的定时时间长短可由具体应用程序的循环周期决定,通常比系统正常工作时最大循环周期的时间略长即可。编程时,可在软件的合适地方加一条喂狗指令,使看门狗的定时时间永远达不到预置时间,系统就不会复位而正常工作。当系统跑飞,用软件陷阱等别的方法无法捕捉回程序时,则看门狗定时时间很快增长到预置时间,迫使系统复位。
以下是c语言编写的看门狗程序部分。
#include "reg51.h"
sbit cs=p1^2;/*片选信号由p1.2产生*/
sbit sck=p1^3; /*时钟信号由p1.3 产生*/
sbit si=p1^0; /*si由p1.0产生*/
sbit so=p1^1; /*so由p1.1产生*/
sbit c=acc^7; /*定义位变量*/
bdata unsigned char com;
void tran() /*发送一字节数据子函数*/
{
unsigned char i;
for(i=0; i<8; i++)
{ acc=com; /*将数据放入a中*/
si=c;
sck=0; /*sck产生一个上跳变*/
sck=1;
com=com<<1; /*左移一位*/
}
return;
}
main()
{
com=0x06; /*发写读使能命令*/
cs=0;
tran();
cs=1;
com=0x01; /*发写状态字命令*/
cs=0;
tran();
com=0x00; /*定时1.4s*/
tran();
cs=1;
...;系统正常运行的程序部分
}
需要注意的是,在程序正常运行的时候,应该在适当的地方加一条喂狗指令,使系统正常运行时的定时时间达不到预置时间。系统就不会复位。喂狗指令如下。
main()
{
...;系统正常运行的程序部分
{
cs=0; /*产生cs脉冲*/
cs=1;
}
}
x25045的看门狗电路使用十分方便。x25045内部还集成了512beeprom和电压运行监视系统,只需这样一块芯片,外加晶振和复位电路就可以组成单片机的应用系统,非常适合于便携式仪器和嵌入式系统的设计。
参考文献
1、李朝青. 单片机原理与控制技术. 北京航空航天大学出版社,2001
2、胡伟,季晓衡.单片机c程序时间及应用实例.人民邮电出版社,2003
3、美国xicor公司x25045资料
X25045编程器的制作
生产部 张 华
摘 要 介绍X25045的编程特性以及用单片机GMS97C2051制作的编程器。
关键词 单片机 EPROM 编程
2
1 引言
X25045是美国Xicor公司的产品,它将三种功能:电压监控、看门狗定时器和EPROM组合在单个芯片之内。因其体积小、占用I/O口少等优点已被广泛应用于工业控制、仪器仪表等领域,是一种理想的单片机外围芯片。
为了对X25045内的EPROM编程,用GMS97C2051单片机制作了一个简易编程器,该编程器与PC的串行口相接,22编程数据可通过PC机写入X25045的E2PROM。
2 X25045简介
2.1 X25045引脚
:芯片选择输入;
SO:串行输出;
SI:串行输入;
SCK:串行时钟输入;
:写保护输入;
Vss:地;
Vcc:电源电压;
RESET:复位输出。
2.2 X25045工作原理
X25045内含512×8的串行E2PROM,可以直接与微控制器的I/O口串行相接。X25045内有一个位指令寄存器,该寄存器可以通过SI来访问。数据在SCK的上升沿由时钟同步输入,在整个工作期内,必须是低电平且必须是高电平。如果在看门狗定时器预置的超时时间内没有总线的活动,那么X25045将提供复位信号输出。
X25045内部有一个“写使能”锁存器,在执行写操作之前该锁存器必须被置位,在写周期完成之后,该锁存器自动复位。
X25045还有一个状态寄存器,用来提供X25045状态信息以及设置块保护和看门狗的超时功能。
2.3 X25045的读时序
图1 X25045引脚排列
表1 X25045的指令集
(a) 读EPROM的时序
2
(b) 读状态寄存器的时序
图2 X25045读时序
2.4 X25045的写时序
(a)写使能锁存器的时序
(b)字节写操作的时序
图3 X25045写时序
2.5 复位操作
当Vcc降至门限电压以下或看门狗定时器已达到编程的极限值,X25045的RESET引脚将输出高电平。
3 X25045编程器的组成及原理
X25045编程器主要由单片机、MAX232、PS7219和LED等组成,如图4所示(虚线框部分)。其中单片机采用LG公司生产的GMS97C2051,该单片机指令和引脚与MCS-51系列兼容。MAX232为RS-232接口,用于单片机与PC之间的电平转换。PS7219为串行输入,可直接驱动8位LED的显示模块。
3.1 单片机与PC机的通讯
图4 X25045编程器的组成框图
GMS97C2051的串行口以一定的波特率接收从PC机传来的数据,波特率的设定由定时器T1来完成,T1工作于方式2,TL1和TH1均被赋初值230,串行口以方式1工作,允许接收,每接收到PC机来
的8位数据,产生一次中断,CPU响应中断后,将接收的数据写入X25045中。
3.2 单片机对X25045的写操作
X25045中有512×8的串行EPROM,通过X25045的2、SCK、SI、SO等引脚控制对X25045的读写,X25045
2的读写操作过程及时序前面已作了详细介绍,这里重点讨论单片机对X25045的编程。
首先置位写使能锁存器,然后发送写操作指令,紧接着发送EPROM的地址和需写入的数据,在输入数据之后将置高,一般经2ms的延时,则数据被写入EPROM中,也可以通过检测状态寄存器的WIP位来判定写操作2是否完成,若WIP位为高,表示写操作正在进行,需继续检测,一直到WIP位变低为止,这时对X25045的编程工
作即告完成。
3.3 编程校验
为了验证编程数据的正确性,可以读出X25045中的数据,并通过显示模块将数据显示出来,读X25045操作的过程是这样的,先发送读指令,接着发送EPROM地址,这时就可以接收X25045传出的数据,单片机将接收到的数据送到PS7219显示模块,再通过LED显示出来。
4 软件组成
(1)编程器的主程序。
PC-51:
clr ea
mov tmod,#20h
mov tl1,#230
mov th1,#230
clr et1
setb tr1
mov scon,#50h
setb ea
setb es
mov c,P1.3
Jc wait
acall read
clr ri
mov a,sbuf
mov r1,a
acall write
reti
clr P3.3
clr P3.7
setb P3.4
setb P3.5
mov a,#06h
mov r7,#08h
clr P3.3
clr P3.4
acall transfe
setb P3.4
acall dela1ms
mov a,#02h
mov r7,#08h
clr P3.3
clr P3.4
;关中断
;选用T1工作方式2
;给T1置初值
2
wait:
;禁止T1中断
;启动T1
;串行口工作于方式1,允许接收
;开中断
;允许串行口中断
;等待按“read”键
wait1:
;清接收中断标志
;接收数据送入r1
write:
;r1中的数据写入X25045
;X25045的SCK置低
;SI置低
;CS置高
;SO置高
;允许写操作
;写入8位
(2)将接收数据写入X25045中的程序。
;调发送子程序
;延时1ms
;发送写指令
acall transfe
mov a,38h
mov r7,#08h
acall transfe
mov a,r1
mov r7,#08h
acall transfe
setb P3.4
acall dela3ms
ret
(3)读出X25045中数据的程序。read:
mov a,#03h
mov r7,#08h
clr P3.3
clr P3.4
acall transfe
mov 39h,#00h
mov a,39h
mov r7,#08h
acall transfe
rece3:
mov r7,#08h
rece1:
nop
mov c,P3.5
mov acc.0,c
rl a
setb P3.3
clr P3.3
nop
djnz r7,rece1
rr a
mov r2,a
acall binbcd
acall led
mov c, P1.3
jnc rece3
ret
transfe:
nop
mov c,acc.7
mov P3.7,c
setb P3.3
rl a
clr P3.3
djnz r7,transfe
clr P3.7
;发送E2PROM地址
;r1中的数据写入X25045
;发送完毕
;延时3ms
;发送读指令
;X25045的SCK置低
;CS置低
;调发送子程序
;发送X25045地址
;读出X25045中的数据
;SCK置高
;SCK变低
;将读出的数据送r2
;将r2转换线bcd码
;调用显示子程序
;等待按“read”键
;继续接收数据
;a的最高位送Cy
;将Cy送X25045的SI
;SCK置高
;a左移一位
;SCK变低
;循环8次
;将SI变低
ret
参 考 文 献
1 X25043/45 可编程看门狗监控EPROM数据手册.武汉力源电子股份有限公司 1998.3
2


发布评论