最近在写ds18b20的程序,在看datasheet的时候老是不能理解释放总线是什么意思,因为参照网上的程序 都是直接将总线拉高(DQ=1),在读的时候拉低15us,然后总线就被18b20接管,那我之前不是已经把DQ拉高了么,怎么还读的进来,纠结了好几天这个问题,后来查到是这样的,这里做个笔记,方便以后查找:
51单片机端口是“准双向”,内部有弱上拉,输出高电平就是关掉下拉,也就是输入状态。AVR单片机则不同,输出是图腾柱形式,上拉下拉都很强。
51单片机端口置高电平,因其上拉很弱,故仍然可以由外部(18B20)拉低。但AVR单片机则不行,输出上拉很强,无法从外部将其拉低。所以AVR单片机释放总线应该是置成高阻态或输入状态。