单片机的一个IO口怎样才能实现发出数据的同时还能在同一个IO口读取外部器件的反馈信息

就好像18B20那样 在一个IO口同时能输入输出数据 请教高手解答 谢谢!!

首先要做一个最小单位的延时,最好应定时器做,比如10ms,然后如果要发送数据就把端口设置为输出状态,如要发送“1”就把端口拉高,等待10MS延时,发送“0”就把端口拉低,等待10MS延时,发送数据的时候最好搞一个头码,即:起始位比如1010,在搞个结束位,中间就是数据位。至于反馈信息你可以在发送完成之后做一个延时等待接收机就收完成,再把端口置为输入,你就可以用个if语句判定是否正确的收到反馈信息
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-22
这个是自己写的协议,一线传输,只要用相同的时序就可以了,平常都处在接收状态,你可以自己设个时序表,这可以在两个MCU之间一线传输进行调试,
第2个回答  2011-11-22
首先搞清楚,18B20虽然是单线通讯,但是不是同时输入和输出数据,输入和输出是分别操作的,首先是输出时序与18B20通讯,18B20可能会应答,但是肯定不会是在你输出的时候应答,所以你要清楚18B20的具体时间,比如:输出高点平多久,然后多久后他会回应数据,这个时候你就准备接收,等等操作。18B20只是单线复用,但不是同时输入输出,相当于分时复用,在不同的时间输出或者输入,还没有那个芯片可以实现单线同时输出又输入的。祝你进步
第3个回答  2011-11-22
设定IO口的方向寄存器;看你用的是什么单片机了;我用的是AVR,
BOOL iniT_DS18B20(VOID)
{
DS18B20_DDROUT();\\设定io输出寄存器为输出
DS18B20_POWERon();\\打开电源引脚给DS18B20供电
DS18B20_DATA_HI();\\输出数据线为1
DS18B20_DATA_LOW();\\输出数据线为0,同步信号
Delay_us(480);
DS18B20_DATA_HI();\\数据线为1
DS18B20_DDRIN();\\设定io输出寄存器为输入
Delay_us(80);
if(DS18B20PIN&(1<<DS18B20_DATA))检测确认信号
{
DS18B20_POWERoff();//关闭电源
return false;//返回错误
}
Delay_us(500);
return true;
}

}本回答被提问者采纳
第4个回答  2011-11-22
输出端口高电平,接收端低电平。
相似回答