石家庄论坛's Archiver

20080808 发表于 2008-8-14 15:40

为什么我的DS18B20读出的是0xFFFF?恳请高手帮忙!非常感激

[url=http://www.dzsc.com/stock-ic/DS18B20.html][color=black]DS18B20[/color][/url][color=black]已经初始化成功,我在读了低8位和高8位后分别设置了断点,但显示读出的全是0xFF。
下面是我的操作步骤:
第一,对[/color][url=http://www.dzsc.com/stock-ic/DS18B20.html][color=black]DS18B20[/color][/url][color=black]初始化
1.设置PD3为输出
2.置PD3=0,也就是令DQ=0,即设置1-wire总线为低电平(占领总线)
3.延时490um
4.关中断
5.置PD3=1,也就是令DQ=1,即设置1-wire总线为高电平(释放总线)
6.延时67.5um
7.设置PD3为输入
8.对PIND进行读取,若为高,则设置标志位Flag为1,否则为0
9.开中断
10.延时490-67.5um
11.返回Flag

第二,分别将0xCC与0x44写入到[/color][url=http://www.dzsc.com/stock-ic/DS18B20.html][color=black]DS18B20[/color][/url][color=black],写操作的顺序如下:
1.首先判断Flag位,若为1,才可以继续进行写操作,否则接下去的操作都不进行
以下2-10步循环8次进行——
2.关中断
3.置PD3为输出方式,同时令PD3=1,即让DQ=1
4.延时2um
5.从低到高写8位数据,若为1,则置PD3为1,否则置PD3为0。
6.延时[/color][url=http://www.dzsc.com/stock-ic/62UM.html][color=black]62UM[/color][/url][color=black]
7.置PD3=0,即DQ=0
8.开中断
9.延时2um  转到2

第三,等待一段时间(大于60us)后,开始读温度。步骤如下:
1.写0xCC,具体过程同第二点
2.写0xBE,具体过程同第二点
以下3-11步循环8次进行——
3.关中断
4.置PD3为输出方式,同时令PD3=0,即置DQ=0
5.延时2us
6.令PD3=1,即置DQ=1
7.设置PD3为输入方式,准备读数据
8.延时4us
9.判断PIND,若DQ总线上有高电平,则读进1,否则读进0
10.开中断
11.延时60us,转到3

我读完16位后,一直是0xFFFF,感觉自己时序,延时,置位都对的啊。
恳请各位指教,不胜感激!
[/color]

awsoft 发表于 2008-8-29 16:13

我调试的时候 发现延时要求很严格的 你得自己试试了 。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.