您好,欢迎访问三七文档
监控芯片X5045的应用作者:杜洋2005-10-13X5045是一种3合1功能监控芯片,其具有EEPROM、电压跌落检测、看门狗复位。用SPI总线与处理器通信,是兼有储存监测的单片机系统的最佳选择。X5045的特性如下:·支持MOTOROLA推出的SPI总线协议·可选复位时间的看门狗定时器·电源电压跌落检测和复位控制·5种标准的开始复位电压·当电源电压为1V时仍可保证复位输出·多种芯片选择不同的工作电压·内置4Kbit的EEPROM,可擦写100万次·EEPROM数据可全部或分区保护·硬件及指令写保护,使数据更安全·时钟可达3.3MHZ·读写速度快,16字节的页写入·经典写周期为5mS·商用级温宽为0~70摄氏度,工业级温宽为-40~84摄氏度·16字节的页写入模式·复位信号输出可保持200MSX5045接口说明:1-CS/WDI使能及看门狗复位输入2-SO数据输出(可与SI复用)3-WP写保护(低电平保护)4-Vss参考0电位5-SI数据输入6-SCK时钟输入7-RESET复位信号输出(必须接上接电阻)8-Vcc电源电压X5045与单片机接口电路:通信协议:在每一次通信之前都必须输入2个字节的操作数据。其中有9位是操作地址位,3位功能选择位。操作位在第5到第7个时钟脉冲输入,地址位在第4个脉冲为最高地址,第8到第23个时钟脉冲输入由高到低的8位地址数据。地址结构为:“0000A8M2M1M0A7A6A5A4A3A2A1A0”(A为地址,M为功能)。其第1个字节的功能选择表如下:读数据操作:写数据操作:状态寄存器的说明:X5045内置一个状态寄存器,用于设置看门狗和数据锁存。其为8位数据,有单独的功能操作数据。当读写状态寄存器时地址位数据就成为状态寄存器的数据镜像。其数据结构如下:(MSB)76543210(LSB)00WD1WD0BL1BL0WELWIP7、6两位必须是0。WD1、WD0是看门狗定时器复位时间选择,WD1、WD0为0、0表示1.4秒看门狗复位溢出。0、1表示600毫秒溢出。1、0表示200毫秒溢出。1、1表示禁用看门狗。BL1、BL0是数据分区保护选择,BL1、BL0为0、0时无保护,0、1时保护180H~1FFH;1、0时保护100H~1FFH;1、1时保护000H~1FFH。WEL是写保护位,为0禁写,为1可写。(运行一次芯片读写操作后此位自动置0)WIP是芯片读忙位,为0就绪,为1芯片忙。(进行读写操作前最好先读此位)注意:读写前先令WEL=1。一次写EEPROM不得超过16字节(一页)。RESET必须接上接电阻。CS下沿复位看门狗。X5045接口程序的编写:/*-------------------------------------------项目名:接口子程序块程序名:X5045子程序块编写人:杜洋初写时间:2005年10月12日程序功能:实现监控芯片X5045的SPI总线驱动实现方法:CPU处理CPU说明:MCS-51接口说明:1-CS/WDI2-SO(SI)3-WP(H)4-Vss5-SI(SO)6-SCK7-RESET8-Vcc信息说明:-------------------------------------------*/;**************************************************************************************;===X5045驱动子程序块===;占用资源:占用4个I/O口(其中SO/SI和SCK可复用,WP可不用),占用2DH~30H的4个通用寄存器。;**************************************************************************************CSBITP2.4;芯片使能(低电平有效)SIBITP2.3;数据输入(可以和SO复用)SCKBITP2.2;时钟输入SOBITP2.3;数据输出WPBITP2.1;写保护(低电平有效,可由硬件控制)WREN_INSTEQU06H;写允许命令字(WREN)WRDI_INSTEQU04H;写禁止命令字(WRDI)WRSR_INSTEQU01H;写状态寄存器命令字(WRSR)RDSR_INSTEQU05H;读状态寄存器命令字(RDSR)WRITE_INSTEQU02H;写存储器命令字(WRITE)READ_INSTEQU03H;读存储器命令字(READ)MAX_POLLEQU99H;测试的最大次数WDT200EQU90H;WD1WD0=01WDT600EQU0A0H;WD1WD0=10WDT1400EQU80H;如果最高位是1代表设置看门狗WD1WD0=00NOWDTEQU0B0H;WD1WD0=11PROQTREQU04H;BL1BL0=01保护区域为高128字节PROHALFEQU08H;BL1BL0=10写保护区域为高256字节PROALLEQU0CH;BL1BL0=11写保护区域为整个存储器NOPROEQU00H;如果最高位是0,代表设置保护区域BL1BL0=00,不写保护;***************************************************************************************MTDEQU30H;发送数据缓冲区MRDEQU30H;接收数据缓冲区NUMBYTEQU2FH;传送字节数存放单元STATBYTEQU2FH;状态字节存放单元DATAADDREQU2DH;该单元及DATAADDR+1是待操作的EEPROM的地址单元,该位存入高1位地址,ADDRDATA+1单元存入低8位地址;******************************************************************************************;名称:写数据(将数据缓冲区的数据写入指定的地址);描述:MTD指定数据缓冲区首地址,NUMBYT指定字节数,DATAADDR及DATAADDR+1指定被写器件地址;注意事项:不允许跨页;占用资源:R0,R1,A,B;输入特性:就绪;输入:NUMBYT(写入的字节数);DATAADDR/DATAADDR+1(被写器件地址);并将数据送入MTD;;输出特性:数据写完,全部存储单元写保护;输出:(无);******************************************************************************************WRITE_DATA:MOVR0,#DATAADDR;地址单元的高8位MOVA,@R0MOVDPH,AINCR0MOVA,@R0MOVDPL,AMOVR1,NUMBYT;从传送字节数存元中获取待写字节数MOVR0,#MTD;待写数据缓冲区W_L:SETBWP;硬件写允许CALLWrite_Able;写允许CLRSCK;将SCK拉低CLRCS;将/CS拉低MOVA,#WRITE_INSTMOVB,DPHMOVC,B.0MOVACC.3,CLCALLWrite_EEPROM;送出含有地址最高位的写指令MOVA,DPLLCALLWrite_EEPROM;送出地址的低8位MOVA,@R0LCALLWrite_EEPROM;送出数据CLRSCK;将SCK拉低SETBCS;升高/CSLCALLRead_Busy;测试是否已器件内部是否写完INCDPLINCR0DJNZR1,W_LMOVSTATBYT,#PROALL;状态存放单元CALLSET_STATUS;整个存储器均被保护RET;******************************************************************************************;名称:读数据(把指定地址单元中的数据读入数据缓冲区);描述:MRD指定数据缓冲区首地址,NUMBYT指定字节数,DATAADDR及DATAADDR+1指定被写器件地址;使用资源:B,R0,DPTR;注意事项:不允许跨页;输入特性:就绪;输入:NUMBYT(读入的字节数);DATAADDR/DATAADDR+1(被读器件地址);;输出特性:数据读完,存储单元写保护;输出:并将数据存入MTD;******************************************************************************************READ_DATA:MOVR0,#DATAADDR;地址单元的高8位MOVA,@R0MOVDPH,AINCR0MOVA,@R0MOVDPL,AMOVR1,NUMBYT;从传送字节数存元中获取待写字节数MOVR0,#MRD;待读数据缓冲区R_L:CLRSCK;将SCK拉低CLRCS;将/CS拉低MOVA,#READ_INSTMOVB,DPHMOVC,B.0MOVACC.3,CLCALLWrite_EEPROM;送出含有地址最高位的读指令MOVA,DPLLCALLWrite_EEPROM;送出低8位地址LCALLRead_EEPROM;读数据CLRSCK;将SCK拉低SETBCS;升高/CSMOV@R0,AINCR0INCDPLDJNZR1,R_LRET;*******************************************************************************************;名称;SET_STATUS(状态寄存器设置);76543210;00WD1WD0BL1BL0WELWIP;注意事项:如果需要设置保护和看门狗,需分两次进行;占用资源:R0,R1,A,B;输入:设置STATBYT传递参数,共8个预定义常量(详见初定义);输出:(无);*******************************************************************************************Set_Status:CALLWrite_Able;写允许CALLRead_Status;读当前寄存器的状态,在A中MOVB,A;存入BMOVA,STATBYT;读入参数JBACC.7,SET_WDT;如果最高位是1则转设置看门狗MOVC,ACC.2;否则是设置保护区域MOVB.2,CMOVC,ACC.3MOVB.3,CJMPWRITE_STATUSSET_WDT:MOVC,ACC.4MOVB.4,CMOVC,ACC.5MOVB.5,CWRITE_STATUS:CLRSCK;将SCK拉低CLRCS;将/CS拉低MOVA,#WRSR_INSTLCALLWrite_EEPROM;送出WRSR指令MOVA,BLCALLWrite_EEPROM;送出状态寄存器的状态CLRSCK;将SCK拉低SETBCS;升高/CSLCALLRead_Busy;测试是否已器件内部是否写完RET;*******************************************************************************************;名称:Write_Able(写允许);功能:这段程序发送命令允许写存储器单元和状态寄存器;调用子程序:Write_EEPROM;输入:(无);输出:(无);占用资源:A;*******************************************************************************************Write_Able:CLRSCK;将SCK拉低CLRCS;将/CS拉低MOVA,#WREN_INSTLCALLWrite_EEPROM;送出WREN_INST指令CLRSCK;将SCK拉低SETBCS;将/
本文标题:x5045
链接地址:https://www.777doc.com/doc-6054951 .html