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