看门狗芯片X25045.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
看门狗芯片X25045

SPI接口应用之一---看门狗芯片X25045 hadao 发表于 2006-5-8 0:08:41 一、引脚定义及通信协议 SO:串行数据输出脚,在一个读操作的过程中,数据从SO脚移位输出。在时钟的下降沿时数据改变。 SI: 串行数据输入脚,所有的操作码、字节地址和数据从SI脚写入,在时钟的上升沿时数据被锁定。 SCK:串行时钟,控制总线上数据输入和输出的时序。 /CS :芯片使能信号,当其为高电平时,芯片不被选择,SO脚为高阻态,除非一个内部的写操作正在进行,否则芯片处于待机模式;当引脚为低电平时,芯片处于活动模式,在上电后,在任何操作之前需要CS引脚的一个从高电平到低电平的跳变。 /WP:当WP引脚为低时,芯片禁止写入,但是其他的功能正常。当WP引脚为高电平时,所有的功能都正常。当CS为低时,WP变为低可以中断对芯片的写操作。但是如果内部的写周期已经被初始化后,WP变为低不会对写操作造成影响。 二、硬件连接 三、程序设计 状态寄存器: ?7 6 5 ?4 3 ?2 ?1 ?0 ?X ?X ?WD1 ?WD0 ?BL1 BL0? ?WEL 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 reg51.h ????? 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;ucLoop8;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;ucLoop8;ucLoop++) ????? { ????? if((ucData0x80)==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; ????? retur

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档