单片机的一个IO口怎样才能实现发出数据的同时还能在同一个IO口读取外部器件的反馈信息
7个回答
展开全部
这个是自己写的协议,一线传输,只要用相同的时序就可以了,平常都处在接收状态,你可以自己设个时序表,这可以在两个MCU之间一线传输进行调试,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先搞清楚,18B20虽然是单线通讯,但是不是同时输入和输出数据,输入和输出是分别操作的,首先是输出时序与18B20通讯,18B20可能会应答,但是肯定不会是在你输出的时候应答,所以你要清楚18B20的具体时间,比如:输出高点平多久,然后多久后他会回应数据,这个时候你就准备接收,等等操作。18B20只是单线复用,但不是同时输入输出,相当于分时复用,在不同的时间输出或者输入,还没有那个芯片可以实现单线同时输出又输入的。祝你进步
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设定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;
}
}
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;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出端口高电平,接收端低电平。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询