📄 ds18b20.lst
字号:
C51 COMPILER V7.50 DS18B20 06/02/2008 20:59:13 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 DS18B20.c file
3
4 作者:Computer-lov
5 建立日期:2008-05-18
6 修改日期:2008-05-18
7 版本:V1.0
8 版权所有,盗版必究。
9 Copyright(C) Computer-lov 2008-2018
10 All rights reserved
11 ********************************************************************/
12
13 #include "at89x52.h"
14 #include "uart.h"
15
16 #define DS_DQ P1_6
17
18 uint8 DS18B20Rom[8];
19 int16 Temperature;
20
21 /********************************************************************
22 函数功能:延迟2*Xms函数。
23 入口参数:X。
24 返 回:无。
25 备 注:在11.0592MHz晶体下,延时约2倍Xms。
26 ********************************************************************/
27 void DelayX2us(uint8 x)
28 {
29 1 while(--x);
30 1 }
31 ////////////////////////End of function//////////////////////////////
32
33 /********************************************************************
34 函数功能:DS18B20函数。
35 入口参数:无。
36 返 回:0:复位失败;1:复位成功。
37 备 注:复位失败可能是因为没有设备。
38 ********************************************************************/
39 uint8 DS18B20Reset(void)
40 {
41 1 DS_DQ=0;
42 1 DelayX2us(250);
43 1 DS_DQ=1;
44 1 DelayX2us(26);
45 1 if(DS_DQ)
46 1 {
47 2 return 0; //没有应答
48 2 }
49 1 else //有应答
50 1 {
51 2 while(!DS_DQ); //等待应答信号完毕
52 2 }
53 1 return 1;
54 1 }
55 ////////////////////////End of function//////////////////////////////
C51 COMPILER V7.50 DS18B20 06/02/2008 20:59:13 PAGE 2
56
57 /********************************************************************
58 函数功能:往DS18B20写一字节函数。
59 入口参数:需要写入的数据。
60 返 回:无。
61 备 注:无。
62 ********************************************************************/
63 void DS18B20WriteByte(uint8 d)
64 {
65 1 uint8 i;
66 1 for(i=0;i<8;i++)
67 1 {
68 2 DS_DQ=0;
69 2 DelayX2us(2);
70 2 if(d&0x01)
71 2 {
72 3 DS_DQ=1;
73 3 }
74 2 else
75 2 {
76 3 DS_DQ=0;
77 3 }
78 2 DelayX2us(30);
79 2 DS_DQ=1;
80 2 d>>=1;
81 2 DelayX2us(1);
82 2 }
83 1 }
84 ////////////////////////End of function//////////////////////////////
85
86 /********************************************************************
87 函数功能:DS18B20读一字节函数。
88 入口参数:无。
89 返 回:读回的一字节数据。
90 备 注:无。
91 ********************************************************************/
92 uint8 DS18B20ReadByte(void)
93 {
94 1 uint8 i;
95 1 uint8 d;
96 1 for(i=0;i<8;i++)
97 1 {
98 2 d>>=1;
99 2 DS_DQ=0;
100 2 DelayX2us(4);
101 2 DS_DQ=1;
102 2 DelayX2us(4);
103 2 if(DS_DQ)
104 2 {
105 3 d+=0x80;
106 3 }
107 2 DelayX2us(20);
108 2 }
109 1 return d;
110 1 }
111 ////////////////////////End of function//////////////////////////////
112
113 /********************************************************************
114 函数功能:读取DS18B20的64bit ROM函数。
115 入口参数:无。
116 返 回:无。
117 备 注:结果保存在全局变量DS18B20Rom数组中。
C51 COMPILER V7.50 DS18B20 06/02/2008 20:59:13 PAGE 3
118 ********************************************************************/
119 void DS18B20ReadRom(void)
120 {
121 1 uint8 i;
122 1
123 1 EA=0;
124 1
125 1 if(!DS18B20Reset()) //复位失败
126 1 {
127 2 EA=1;
128 2 Prints("\r\nDS18B20 Reset failed. Maybe there no DS18B20 device.\r\n");
129 2 return;
130 2 }
131 1
132 1 DS18B20WriteByte(0x33);
133 1 for(i=0;i<8;i++)
134 1 {
135 2 DS18B20Rom[7-i]=DS18B20ReadByte();
136 2 }
137 1 EA=1;
138 1 }
139 ////////////////////////End of function//////////////////////////////
140
141 /********************************************************************
142 函数功能:写DS18B20Scratchpad函数。
143 入口参数:无。
144 返 回:无。
145 备 注:设置为12位分辨率。
146 ********************************************************************/
147 void DS18B20WriteScratchpad(void)
148 {
149 1 EA=0;
150 1
151 1 if(!DS18B20Reset()) //复位失败
152 1 {
153 2 EA=1;
154 2 return;
155 2 }
156 1 DS18B20WriteByte(0xCC); //Skip ROM
157 1 DS18B20WriteByte(0x4E); //Write Scratchpad command
158 1 DS18B20WriteByte(0x00); //TH
159 1 DS18B20WriteByte(0x00); //TL
160 1 DS18B20WriteByte(0x7F); //12位分辨率
161 1
162 1 EA=1;
163 1 }
164 ////////////////////////End of function//////////////////////////////
165
166 /********************************************************************
167 函数功能:读DS18B20 Scratchpad函数。
168 入口参数:无。
169 返 回:无。
170 备 注:读出温度值保存在全局变量Temperature中。
171 ********************************************************************/
172 void DS18B20ReadScratchpad(void)
173 {
174 1 EA=0;
175 1
176 1 if(!DS18B20Reset()) //复位失败
177 1 {
178 2 EA=1;
179 2 return;
C51 COMPILER V7.50 DS18B20 06/02/2008 20:59:13 PAGE 4
180 2 }
181 1 DS18B20WriteByte(0xCC); //Skip ROM
182 1 DS18B20WriteByte(0xBE); //Read Scratchpad command
183 1 Temperature=DS18B20ReadByte(); //TEMPERATURE LSB
184 1 Temperature|=((uint16)(DS18B20ReadByte()))<<8; //TEMPERATURE MSB
185 1
186 1 EA=1;
187 1 }
188 ////////////////////////End of function//////////////////////////////
189
190 /********************************************************************
191 函数功能:启动DS18B20转换函数。
192 入口参数:无。
193 返 回:无。
194 备 注:无。
195 ********************************************************************/
196 void DS18B20ConvertT(void)
197 {
198 1 EA=0;
199 1 if(!DS18B20Reset()) //复位失败
200 1 {
201 2 EA=1;
202 2 return;
203 2 }
204 1 DS18B20WriteByte(0xCC); //Skip ROM
205 1 DS18B20WriteByte(0x44); //ConvertT command
206 1 EA=1;
207 1 }
208 ////////////////////////End of function//////////////////////////////
209
210 /********************************************************************
211 函数功能:DS18B20初始化函数。
212 入口参数:无。
213 返 回:无。
214 备 注:读取ROM,设置12位分辨率。
215 ********************************************************************/
216 void DS18B20Init(void)
217 {
218 1 DS18B20ReadRom(); //读ID号
219 1 DS18B20WriteScratchpad(); //
220 1 DS18B20ConvertT();
221 1 }
222 ////////////////////////End of function//////////////////////////////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 266 ----
CONSTANT SIZE = 57 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -