楼上说对了。真双向模拟io时,要用方向做0和1的控制的,输出要恒为0的。
不知楼主明白否?
hotpower 发表于 2011-5-26 15:56
不是太明白~~
不过我看了一个论坛有这样写:
虽然AVR大多带有硬件IIC接口,但也有需要使用软件模拟IIC的情况
可以通过使用外部上拉电阻+控制DDRx的方法来实现OC结构的IIC总线。
IIC的速度跟上拉电阻有关,内部的上拉电阻阻值较大(Rup=20K~50K),只能用于低速的场合 #define SDA 0 //PC0
#define SCL 1 //PC1
(程序初始化设定 SDA和SCL都是 PORT=0,DDR=0)
#define SDA_0() DDRA|=(1<<SDA) //输出低电平
#define SDA_1() DDRA&=~(1<<SDA) //输入,外部电阻上拉为高电平
#define SCL_0() DDRA|=(1<<SCL) //输出低电平
#define SCL_1() DDRA&=~(1<<SCL) //输入,外部电阻上拉为高电平
使用上面的SDA_0()/SDA_1()/SCL_0()/SCL_1()宏即可,直观,而且效率跟汇编是一样的 |