2103的IO模拟一个非标准的I2C<br /><br />#define SHDA (1<<26) // p0.26 湿度传感器数据线<br />#define SHCK (1<<12) // p0.12 湿度传感器时钟线<br />..........................................................................<br />void SHTStart (void) // 开始<br />{ <br /> IOSET=SHDA+SHCK;------------注1<br /> IOCLR=SHDA;<br /> IOCLR=SHCK;<br /> IOSET=SHCK; <br /> IOSET=SHDA;-----------------注2 <br /> IOCLR=SHCK; <br />}<br />void SHTWbyte (uint8 cmd) // 写一个字节<br />{ <br /> uint8 i=8;<br /> while(i>0)<br /> {<br /> if((cmd&0x80)==0x80) /* 如果最高位是1*/<br /> IOSET=SHDA;<br /> else<br /> IOCLR=SHDA;<br /> cmd<<=1;<br /> i--;<br /> IOSET=SHCK;<br /> IOCLR=SHCK;-----------------注3 <br /> } <br />}<br />..................................................................<br />PINSEL0=~(3<<24)&PINSEL0; // P0.12 IO口<br />PINSEL1=~(3<<20)&PINSEL1; // P0.26 IO口 <br />IODIR=(SHDA+SHCK)|IODIR; // IO输出<br />SHTStart();<br />SHTWbyte(0x03);<br />..................................................................<br />现象:在调用两个函数产生的时序中,时钟线都是正常的,数据线会有问题。<br /><br />注1:执行完此语句后数据线SHDA是一个2V左右的电平,不是高电平(疑问)<br />注2:执行完此语句数据线SHDA是一个3.3V的高电平(正常)<br />注3:在最后一次循环中,执行此语句之前数据线SHDA是一个3.3V的高电平<br /> (正常), 但执行完此语句后数据线SHDA变为一个2V左右的电平(疑问)<br /><br />现在有这么个现象,请各位帮忙看看什么引起的 |
|