|
X76F100为I2C总线E2PROM。SCL为时钟输入,SDA为双向数据输入输出线。通过片 输入来控制对器件的访问。下面以页写为例,先结合时序说明X76F100的工作过程,然后给出程序。 页写时序如图5所示。在该系统中,GMS97C52为主机,X76F100为从机。首先主机向从机发一个START命令,产生开始条件,然后发写命令字。当从机接到命令后,向主机发一个应答信号NACK。然后跟随8字节密码,随后进入一个写周期,写周期结束后进行密码应答轮询ACK Polling。X76F100要求主机用专用的应答命令55H进行应答轮询。如果输入的密码正确,将返回一个“ACK”。如果密码不正确,将返回“no-ACK”,重试计数器加1,返回到启始位置,提示重新送入写命令字和8字节密码。若密码正确,主机接着送入8个字节的数据,ACK响应成功后,主机发出STOP命令完成写操作。下面是用写密码进行页写的程序。

图5 页写时序图(需要密码)
| WRITE_USING_WRITE_PASS: |
;用写密码进行写操作 |
|
|
;调开始命令 |
|
|
;调页写命令 |
|
|
;调输出字节命令 |
|
|
;X76F100发应答信号 |
|
|
;调写密码命令 |
|
|
;10ms延时开始写密码周期 |
|
|
;调密码应答轮询子程序 |
|
|
;调页写数据子程序 |
|
|
;调停止命令 |
|
|
;延时10ms写密码周期 |
|
|
|
| WR_WR_PASS: |
;将写密码写入X76F100 |
|
|
;将密码首址送入R0 |
|
|
;写密码为8个字节 |
| WP:MOV A,@R0 |
;将R0中的数据送入A中 |
|
|
;输出字节子程序 |
|
|
|
|
|
|
|
|
|
|
|
|
| WR_DATA: |
;将数据写到X76F100中 |
|
|
;将数据首地址送入R0 |
|
|
;一页有8个数据 |
| WB: MOV A,@R0 |
;将R0中数据送入A |
|
|
;调输出字节子程序 |
|
|
;从机发应答信号 |
|
|
;下一个字节 |
|
|
;循环直到R1为0 |
|
|
|
| OUTBYTE: |
;主机向X76F100发字节 |
|
|
;一个字节有8位 |
| LOOPO: |
|
|
|
|
|
|
;移位 |
|
|
;将进位送入数据线 |
|
|
|
|
|
;循环直到R2为0 |
|
|
|
| START: |
|
|
|
;开始子程序 |
|
|
|
|
|
|
|
|
|
|
|
|
| STOP: |
|
|
|
;停止子程序 |
|
|
|
|
|
|
|
|
|
| ACK_POLLING: |
;密码应答轮询子程序 |
|
|
|
|
|
;主机发固定应答命令 |
|
|
|
|
|
;调从机发应答信号 |
|
|
;若有进位则密码错误 |
|
|
|
| PASS_ERROR: |
;密码错误 |
|
|
|
|
|
|
| ACK: |
|
|
|
;主机执行一个应答 |
|
|
|
|
|
|
| NACK: |
|
|
|
;从机执行一个应答 |
|
|
|
|
|
|
| CLOCK: |
|
|
|
;第9个脉冲 |
|
|
;读SDA状态以判断是否有应答 |
|
|
|
|
|
|
| T10ms: |
|
|
|
;10ms延时 |
| T10A: |
|
|
|
|
| T10B: |
|
|
|
|
|
|
|
|
|
|
参 考 文 献
1 詹树仁主编. GMS90及GMS97系列单片机的工作原理及其应用. 武汉力源电子股 份有限公司,1998年
2 赵依军,胡戎. 单片机微机接口技术. 人民邮电出版社,1989
3 卢存伟,钱捷. 微机原理及应用系统设计. 河海大学出版社,1992年
4 X76F100 DATA SHEET. XICOR公司 |