[ZLG-ARM] 2138 I2C总线中发送数据不成功

[复制链接]
3027|7
 楼主| liulicau 发表于 2007-10-22 15:45 | 显示全部楼层 |阅读模式
我用I2C总线的软件包,<br />ISendByte(0x94,0x8c);<br />向地址为0x94的器件写控制字0x8c,为什么总是写不成功,返回0失败呢?
zlgarm 发表于 2007-10-22 18:02 | 显示全部楼层

确定您的从机地址是否正确

首先确定您的从机地址是否正确,有些器件的从机地址是可以配置的,并和硬件连接有关;然后请注意软件包的使用,该函数的原型如下:<br />uint8&nbsp;ISendByte(uint8&nbsp;sla,uint8&nbsp;dat);
 楼主| liulicau 发表于 2007-10-23 09:38 | 显示全部楼层

我确定从机地址是正确的

我用的ADS1110芯片,该器件地址是固化好的。我选的这一片地址就是0x94。我对这个函数的调用也是对的阿。不知道哪里有问题啊?
zlgarm 发表于 2007-10-23 17:56 | 显示全部楼层

re

用户看管脚链接是否正确<br />还可以用示波器来看下波形,是否有CLK产生!
lpc2000 发表于 2007-10-23 23:59 | 显示全部楼层

上拉电阻

  
hotpower 发表于 2007-10-24 00:02 | 显示全部楼层

我怎么看IIC都是最简单的呀~~~

  
 楼主| liulicau 发表于 2007-10-26 10:11 | 显示全部楼层

偶现在已经改成模拟的了,大家帮我看下时序吧

#define&nbsp;YANSHI&nbsp;60<br />void&nbsp;delay&nbsp;(uint32&nbsp;i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(--i);<br />}<br /><br />void&nbsp;Start_I2c()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffff7)|0x00000008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />}<br />void&nbsp;Stop_I2c()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffffb)|0x00000004;//SCL置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />}<br />/***********************************<br />字节数据传送函数<br />函数原理:void&nbsp;SendByte(uchar&nbsp;c);<br />功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作(不应答或非应答都使ack=0&nbsp;假)。<br />发送数据正常,ack=1;ack=0表示被控器无应答或损坏。<br />****************************************/<br />void&nbsp;SendByte(uint8&nbsp;c)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;BitCnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA输出<br />&nbsp;&nbsp;&nbsp;&nbsp;for(BitCnt=0;BitCnt&lt8;BitCnt++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((c&0x80)==0x80)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置0<br />&nbsp;&nbsp;&nbsp;&nbsp;c=c&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffff7)|0x00000008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA输入<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;sda_value=IO0PIN;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((IO0PIN&0x00000008)==0x00000008)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ack=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;ack=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />}<br />/*****************************************<br />字节数据传送函数<br />函数原形:uchar&nbsp;RcvByte();<br />功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;发完后请用应答函数。<br />*******************************************/<br />uint8&nbsp;RcvByte()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;retc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;BitCnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;retc=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA输出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffff7)|0x00000008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SDA置1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7);//SDA输入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(BitCnt=0;BitCnt&lt8;BitCnt++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retc=retc&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((IO0PIN&0x00000008)==0x00000008)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retc=retc+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCL置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;return(retc);<br />}<br />/*******************************************<br />应答子函数<br />原形:viod&nbsp;Ack_I2c(bit&nbsp;a);<br />功能:主控器进行应答信号,(可以是应答或非应答信号)<br />**********************************************/<br />void&nbsp;Ack_I2c(uint8&nbsp;a)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=(IO0PIN&0xfffffffb)|0x00000004;//SCL置1<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;//SCL置0<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(YANSHI);<br />}<br />&nbsp;<br />
 楼主| liulicau 发表于 2007-10-26 12:17 | 显示全部楼层

不知道这个延时时间长短对不对

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

28

帖子

1

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