求助!!!关于IIC总线传输

[复制链接]
3121|16
 楼主| zl040901 发表于 2008-7-9 20:58 | 显示全部楼层 |阅读模式
用AT89S51写AT24C01,AT24CO1的&nbsp;地址是&nbsp;怎样确定的,下面程序为什么&nbsp;它发送完了读取写控制字之后不用发写在AT24CO1的首地址吗?<br /><br />&nbsp;LCALL&nbsp;STA&nbsp;;发送起始条件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,,#0A0H读取写控制字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;WRB;发送一个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;CACK;检查应答位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;F0,WRBYTE1;无应答,重发<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;R0,#DTSV&nbsp;;欲发送数据首址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;R5,KEYNUM;R5保存欲发送数据的字节数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />WRDA:&nbsp;&nbsp;&nbsp;MOV&nbsp;A,@R0;读一个字节数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;WRB;发送写控制字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;CACK;检查应答位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;F0,WRBYTE1;无应答,重发<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEC&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DJNZ&nbsp;R5,WRDA;未发送完N个字节继续<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;STOP&nbsp;;数据发送完毕,停止<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;PSW&nbsp;;恢复现场<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br />
dai_weis 发表于 2008-7-10 17:20 | 显示全部楼层

地址的确定分成两部分

一部分已经固定的地址,手册中有写<br />另一个通过外部引脚的电平决定
 楼主| zl040901 发表于 2008-7-10 23:22 | 显示全部楼层

IIC

谢谢,第二个地址能不能讲具体点呢,<br />看看下面的程序是我从网上找的&nbsp;,为什么它说把8个数据写到24C02的01H为首址单元中去,而不发24C02的首地址01H呢,对24C02的读写要不要发它里面所存的单元地址呢,各位大虾帮帮忙啊,小弟我最近被网上各种这样的程序弄的很糊涂了,这先谢谢,能不能给点例程,推荐一点好的网站也行,万分感谢!!!!<br /><br /><br /><br /><br /><br />这是将0600H地址中以下的8个数据写到24C02的01H为首址单元中去的汇编程序<br />ORG&nbsp;0000H&nbsp;<br />SCL&nbsp;BIT&nbsp;P3.4&nbsp;<br />SDA&nbsp;BIT&nbsp;P3.5;<br /><br />LJMP&nbsp;START<br />START:LCALL&nbsp;STAR<br />MOV&nbsp;A,#0AOH<br />LCALL&nbsp;SDATA<br />LCALL&nbsp;ACK<br />JC&nbsp;&nbsp;START<br />MOV&nbsp;R2,#08H;数据有8个<br />MOV&nbsp;DPTR,#0600H;定义源数据的位置<br />LOOP:MOV&nbsp;A,#00H<br />MOVC&nbsp;A,@A+DPTR<br />LCALL&nbsp;SDATA<br />LCALL&nbsp;ACK<br />JC&nbsp;LOOP<br />INC&nbsp;DPTR<br />DJNZ&nbsp;R2,LOOP<br /><br />LCALL&nbsp;STOP;调用停止子程序<br /><br />STAR:SETB&nbsp;SDA<br />SETB&nbsp;SCL<br />NOP<br />NOP<br />NOP<br />NOP<br />CLR&nbsp;SDA<br />NOP<br />NOP<br />NOP<br />NOP<br />CLR&nbsp;SCL<br />RET<br />SDATA:MOV&nbsp;R0,#08H<br />LOOP0:RLC&nbsp;A<br />MOV&nbsp;SDA,C<br />NOP<br />NOP<br />SETB&nbsp;SCL<br />NOP<br />NOP<br />NOP<br />NOP<br />CLR&nbsp;SCL<br />DJNZ&nbsp;R0,LOOP0<br />RET<br />ACK:SETB&nbsp;SDA<br />NOP<br />NOP<br />SETB&nbsp;SCL<br />NOP<br />NOP<br />NOP<br />NOP<br />MOV&nbsp;C,SDA<br />CLR&nbsp;SCL<br />RET<br />STOP:CLR&nbsp;SDA<br />NOP<br />NOP<br />NOP<br />NOP<br />SETB&nbsp;SCL<br />NOP<br />NOP<br />NOP<br />NOP<br />SETB&nbsp;SDA<br />NOP<br />NOP<br />NOP<br />NOP<br />RET<br />ORG&nbsp;0600H<br />DB&nbsp;0A0H,10H,01H,02H,03H,04H,05H,06H<br />END
 楼主| zl040901 发表于 2008-7-12 00:56 | 显示全部楼层

帮帮忙啊

谢谢
孤星119 发表于 2008-7-12 09:59 | 显示全部楼层

如2楼所说.楼主地址扩展弄懂就行了.

  
zg_z 发表于 2008-7-15 00:01 | 显示全部楼层

手册上有吧

最近做铁电,高4位是固定的地址(手册上有),d3-1是器件地址/页地址(型号不一样好象不同),d0是读写~~~~<br />另外24C01是什么,AT的EEPROM最小也有4Kb吧
zjh006 发表于 2008-7-15 14:58 | 显示全部楼层

应该是要写首地址的。

从楼主给的程序来看,应该是把首地址放在了数据的第一个了。例如要在08H的位置写入3个字节(00h,01h,02h),只要连续写如下面4个字节就可以了:08H,00H,01H,02H.
 楼主| zl040901 发表于 2008-7-15 15:39 | 显示全部楼层

谢谢

我再试下<br />型号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;容量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可扩展数目<br />AT24C01&nbsp;&nbsp;&nbsp;&nbsp;128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;A2&nbsp;A1&nbsp;A0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br />AT24C02&nbsp;&nbsp;&nbsp;&nbsp;256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;A2&nbsp;A1&nbsp;A0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br />AT24C04&nbsp;&nbsp;&nbsp;&nbsp;512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;A2&nbsp;A1&nbsp;P0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br />AT24C08&nbsp;&nbsp;&nbsp;&nbsp;1KB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;A2&nbsp;P1&nbsp;P0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br />AT24C16&nbsp;&nbsp;&nbsp;&nbsp;2KB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;P2&nbsp;P1&nbsp;P0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />AT24C32&nbsp;&nbsp;&nbsp;&nbsp;4KB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;A2&nbsp;A1&nbsp;A0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br />AT24C64&nbsp;&nbsp;&nbsp;&nbsp;8KB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1010&nbsp;A2&nbsp;A1&nbsp;A0&nbsp;R/W~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br />表中P2&nbsp;P1,P0为页地址位<br />6楼的可不可以帮我解释d3-d1,&nbsp;即A2,A1,A0,P0,P1,P2,该怎样接电路<br />可扩展数目是怎样确定的<br />谢谢
zg_z 发表于 2008-7-15 16:52 | 显示全部楼层

...

d3-d1就是数据的第3位到第1位..你用AT24C01的话就是A2&nbsp;A1&nbsp;A0,也就是器件地址.器件地址是硬件设计的时候固定的,地址000就把A2&nbsp;A1&nbsp;A0接地,地址001就把A2&nbsp;A1接地,A1上拉,依次类推.页地址是编程的时候设的,没电路可接.<br />扩展数目根据器件地址确定,地址3位就是2^3=8个,2位就是2^2=4个.没有就是2^0=1个,也就是总线上只能挂一片(如AT24C16).<br />后面的R/W就是读写位,写1读,写0就写...
 楼主| zl040901 发表于 2008-7-16 00:23 | 显示全部楼层

先谢谢了,9楼的

还有一点疑问?希望帮解答一下<br />1:比如接AT24C01,我要扩展数目时,假设扩展3个,是不是第一个的A2&nbsp;A1&nbsp;A0为000,第二个的为001,第三个的为010,但我看过AT24C系列的一点介绍,好像A2&nbsp;A1&nbsp;A0一定要接同以电平。<br />2:刚才7楼的写AT24C01的写法,我试过了,好像还不行,不知是不是我的&nbsp;程序问题,请问一下这样行吗,首地址一般怎样发?<br />3;对AT24C01进行页面写的时候,假如超过了8个字节,它是不是自动转到下一页呢&nbsp;,因为IIC总线说SDA上发送的字节数量不受限制,即对页面写的操作可不可不从页面第以字节开始?<br /><br /><br /><br /><br />
zjh006 发表于 2008-7-16 08:25 | 显示全部楼层

肯定要写首地址的

如果写不进去应该是你程序有问题。
 楼主| zl040901 发表于 2008-7-16 16:22 | 显示全部楼层

;;;;

谢谢,我再试试<br />其它问题能不能帮忙解答一下
 楼主| zl040901 发表于 2008-7-16 17:36 | 显示全部楼层

aa

即我能不能连续写N个数据,只要不超过它的容量
zjh006 发表于 2008-7-17 08:20 | 显示全部楼层

只能连续读写一个Page的内容

  
xwj 发表于 2008-7-17 08:39 | 显示全部楼层

1、当然要发首地址;2、不能跨页

能连续写多少个数据,取决于page大小和相对页首的偏移<br /><br />比如AT24C01的page大小是8,对AT24C01进行页面写,<br />如果首地址是8的整数倍,这每次可以连续写入8个字节,然后延时大约10毫秒(具体看器件资料)的时间等待其内部完成写操作;<br />如果首地址不是8的整数倍,比如是7,那这时写一个字节就跨页了,就必须延时等待这一页写入,否则结果肯定是错误的
 楼主| zl040901 发表于 2008-7-17 18:07 | 显示全部楼层

XX

谢谢各位大侠
huanben 发表于 2011-9-24 09:49 | 显示全部楼层
15# xwj
对页的描述是来自数据手册吗?
这帖子太牢了 呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

61

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部