[ZLG-ARM] 我的模拟i2c数据线有问题

[复制链接]
1572|1
 楼主| 变色镜 发表于 2008-2-19 15:48 | 显示全部楼层 |阅读模式
2103的IO模拟一个非标准的I2C<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;SHDA&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt26)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;p0.26&nbsp;湿度传感器数据线<br />#define&nbsp;&nbsp;&nbsp;&nbsp;SHCK&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt12)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;p0.12&nbsp;湿度传感器时钟线<br />..........................................................................<br />void&nbsp;SHTStart&nbsp;(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;开始<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOSET=SHDA+SHCK;------------注1<br />&nbsp;&nbsp;&nbsp;&nbsp;IOCLR=SHDA;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOCLR=SHCK;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOSET=SHCK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOSET=SHDA;-----------------注2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOCLR=SHCK;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />void&nbsp;SHTWbyte&nbsp;(uint8&nbsp;cmd)&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;写一个字节<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i=8;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(i&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if((cmd&0x80)==0x80)&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;如果最高位是1*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET=SHDA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOCLR=SHDA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET=SHCK;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOCLR=SHCK;-----------------注3&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />..................................................................<br />PINSEL0=~(3&lt&lt24)&PINSEL0;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;P0.12&nbsp;IO口<br />PINSEL1=~(3&lt&lt20)&PINSEL1;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;P0.26&nbsp;IO口&nbsp;&nbsp;&nbsp;&nbsp;<br />IODIR=(SHDA+SHCK)|IODIR;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;IO输出<br />SHTStart();<br />SHTWbyte(0x03);<br />..................................................................<br />现象:在调用两个函数产生的时序中,时钟线都是正常的,数据线会有问题。<br /><br />注1:执行完此语句后数据线SHDA是一个2V左右的电平,不是高电平(疑问)<br />注2:执行完此语句数据线SHDA是一个3.3V的高电平(正常)<br />注3:在最后一次循环中,执行此语句之前数据线SHDA是一个3.3V的高电平<br />&nbsp;&nbsp;&nbsp;(正常),&nbsp;但执行完此语句后数据线SHDA变为一个2V左右的电平(疑问)<br /><br />现在有这么个现象,请各位帮忙看看什么引起的
zlgarm 发表于 2008-2-19 16:15 | 显示全部楼层

回复如下:

变色镜,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;对您的问题作如下回答:<br />&nbsp;&nbsp;&nbsp;&nbsp;1、检查数据线和时钟信号线有没有接上拉电阻;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、您可以到网上搜索一下用I/O口模拟I2C总线的资料,网上有许多关于这方面的资料。<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;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;duty:zlgarm_wuzhijian
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

44

帖子

0

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