- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)