hadao 发表于 2006-5-8 0:08:41
一、引脚定义及通信协议
SO:串行数据输出脚,在一个读操作的过程中,数据从SO脚移位输出。在时钟的下降沿时数据改变。
SI:串行数据输入脚,所有的操作码、字节地址和数据从SI脚写入,在时钟的上升沿时数据被锁定。
SCK:串行时钟,控制总线上数据输入和输出的时序。
/CS :芯片使能信号,当其为高电平时,芯片不被选择,SO脚为高阻态,除非一个内部的写操作正在进行,否则芯片处于待机模式;当引脚为低电平时,芯片处于活动模式,在上电后,在任何操作之前需要CS引脚的一个从高电平到低电平的跳变。
/WP:当WP引脚为低时,芯片禁止写入,但是其他的功能正常。当WP引脚为高电平时,所有的功能都正常。当CS为低时,WP变为低可以中断对芯片的写操作。但是如果内部的写周期已经被初始化后,WP变为低不会对写操作造成影响。
二、硬件连接
三、程序设计
状态寄存器:
WIP:写操作标志位,为1表示内部有一个写操作正在进行,为0则表示空闲,该位为只读。
WEL:写操作允许标志位,为1表示允许写操作,为0表示禁止写,该位为只读。
BL0,BL1:内部保护区间的地址选择。被保护的区间不能进行看门狗的定时编程。
WD0,WD1:可设定看门狗溢出的时间。有四种可选择:1.4s,600ms,200m s,无效。
操作码:
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 { uchar ucData; CS=0; WriteByte(RDSR); ucData=ReadByte(); CS=1; return ucData; } uchar WriteReg(uchar ucData) //write register { 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 high level CS=1; CS=0; WriteByte(WRSR); WriteByte(ucData); CS=1; return 1; } void WriteEpm(uchar cData,uchar cAddress,bit bRegion) /* 写入一个字节,cData为写入的数,cAddress为写入地址,b Region为页 */ { while((ReadReg()&0x01)==1); //the device is busy CS=0; WriteByte(WREN); //when write the wren , the cs must hav e a high level 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的新型看门狗电路图 作者:重庆三峡学院应用技术学院谢辉来源:不详点击数:更新时间:2007年02月14日 看门狗(watchdog)电路是嵌入式系统需要的抗干扰措施之一。本文用x25045芯片设计了一种新的看门狗电路,具有体积小、占用i/o口线少和编程方便的特点,可广泛应用于仪器仪表和各种工控系统中。 前言 工控系统在运行时,通常都会遇到各种各样的现场干扰,抗干扰能力是衡量工控系统性能的一个重要指标。看门狗(watchdog)电路是自行监测系统运行的重要保证,几乎所有的工控系统都包含看门狗电路。在8096系列单片机和增强型8051系列单片机中,该系统已经做在芯片内部,用户只要用软件开放它就可以,使用很方便。但目前工控系统仍在使用廉价的普通型8051系列单片机,则看门狗电路必须由用户自己建立。 看门狗电路一般有软件看门狗和硬件看门狗两种。软件看门狗不需外接硬件电路,但系统需要出让一个定时器资源,这在许多系统中很难办到,而且若系统软件运行不正常,可能导致看门狗系统也瘫痪。硬件看门狗是真正意义上的“程序运行监视器”,如计数型的看门狗电路通常由555多谐振荡器、计数器以及一些电阻、电容等组成,分立元件组成的系统电路较为复杂,运行不够可靠。 x25045芯片简介 x25045是美国xicor公司的生产的标准化8脚集成电路,它将eeprom、看门狗定时器、电压监控三种功能组合在单个芯片之内,大大简化了硬件设计,提高了系统的可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗,是一种理想的单片机外围芯片。x2504 5引脚如图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电路中,cp u的复位信号共有3个:上电复位(c1、r2),人工复位(s、r1、r2)和watchdog复位(c2、r 3),通过或门综合后加到reset端。c2、r3的时间常数不必太大,有数百微秒即可,因为这时cpu的振荡器已经在工作。 图2 x25045看门狗电路硬件连接图 看门狗定时器的预置时间是通过x25045的状态寄存器的相应位来设定的。如表2所示,x2 5045状态寄存器共有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制作的编程器。 关键词单片机 E2PROM 编程 1 引言 X25045是美国Xicor公司的产品,它将三种功能:电压监控、看门狗定时器和E2PROM组合在单个芯片之内。因其体积小、占用I/O口少等优点已被广泛应用于工业控制、仪器仪表等领域,是一种理想的单片机外围芯片。 为了对X25045内的E2PROM编程,用GMS97C2051单片机制作了一个简易编程器,该编程器与PC的串行口相接,编程数据可通过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状态 信息以及设置块保护和看门狗的超时功能。 图1 X25045引脚排列 表1 X25045的指令集 2.3 X25045的读时序 (a)读E2PROM的时序 (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机的通讯 GMS97C2051的串行口以一定的波特率接收从PC机传来的数据,波特率的设定由定时器T1来完成,T1工作于方式2,TL1和TH1均被赋初值230,串行口以方式1工作,允许接收,每接收到PC机来 图4 X25045编程器的组成框图 的8位数据,产生一次中断,CPU响应中断后,将接收的数据写入X25045中。 3.2 单片机对X25045的写操作 X25045中有512×8的串行E2PROM,通过X25045的、SCK、SI、SO等引脚控制对X25045的读写,X25045的读写操作过程及时序前面已作了详细介绍,这里重点讨论单片机对X25045的编程。 首先置位写使能锁存器,然后发送写操作指令,紧接着发送E2PROM的地址和需写入的数据,在输入数据之后将置高,一般经2ms的延时,则数据被写入E2PROM中,也可以通过检测状态寄存器的WIP位来判定写操作是否完成,若WIP位为高,表示写操作正在进行,需继续检测,一直到WIP位变低为止,这时对X25045的编程工作 即告完成。 3.3 编程校验 为了验证编程数据的正确性,可以读出X25045中的数据,并通过显示模块将数据显示出来,读X25045操作的过程是这样的,先发送读指令,接着发送E2PROM地址,这时就可以接收X25045传出的数据,单片机将接收到的数据送到PS7219显示模块,再通过LED显示出来。 4 软件组成 (1)编程器的主程序。 PC-51:clr ea ;关中断 mov tmod,#20h ;选用T1工作方式2 mov tl1,#230;给T1置初值 mov th1,#230 clr et1;禁止T1中断 setb tr1;启动T1 mov scon,#50h ;串行口工作于方式1,允许接收 setb ea ;开中断 setb es;允许串行口中断 wait:mov c,P1.3;等待按“read”键 Jc wait acall read wait1:clr ri;清接收中断标志 mov a,sbuf;接收数据送入r1 mov r1,a acall write ;r1中的数据写入X25045 reti (2)将接收数据写入X25045中的程序。 write:clr P3.3;X25045的SCK置低 clr P3.7;SI置低 setb P3.4;CS置高 setb P3.5;SO置高 mov a,#06h;允许写操作 mov r7,#08h;写入8位 clr P3.3 clr P3.4 acall transfe;调发送子程序 setb P3.4 acall dela1ms;延时1ms mov a,#02h;发送写指令 mov r7,#08h clr P3.3 clr P3.4acall transfe mov a,38h;发送E2PROM地址 mov r7,#08h acall transfe mov a,r1 ;r1中的数据写入X25045 mov r7,#08h acall transfe setb P3.4;发送完毕 acall dela3ms;延时3ms ret (3)读出X25045中数据的程序。 read:mov a,#03h;发送读指令 mov r7,#08h clr P3.3;X25045的SCK置低 clr P3.4;CS置低 acall transfe;调发送子程序 mov 39h,#00h;发送X25045地址 mov a,39h mov r7,#08h acall transfe rece3:mov r7,#08h ;读出X25045中的数据rece1:nop mov c,P3.5 mov acc.0,c rl a setb P3.3;SCK置高 clr P3.3;SCK变低 nop djnz r7,rece1 rr a mov r2,a;将读出的数据送r2 acall binbcd;将r2转换线bcd码 acall led;调用显示子程序 mov c, P1.3;等待按“read”键 jnc rece3;继续接收数据 ret transfe:nop mov c,acc.7 ;a的最高位送Cy mov P3.7,c;将Cy送X25045的SI setb P3.3;SCK置高 rl a;a左移一位 clr P3.3;SCK变低 djnz r7,transfe;循环8次 clr P3.7;将SI变低ret 参考文献 1 X25043/45 可编程看门狗监控E2PROM数据手册.武汉力源电子股份有限公司 1998.3下载本文