📄 ds18b20.lst
字号:
C51 COMPILER V7.08 DS18B20 06/13/2007 16:48:13 PAGE 1
C51 COMPILER V7.08, 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 #include<w78e58b.h>
2 #include <intrins.h>
3
4 sbit dq18b20=P1^1;
5 sbit dq18b20_find=P1^0;
6
7 /************* delay time ******************************/
8 void ds18b20_delay(char t)
9 {
10 1 for(;t>0;t--)
11 1 {}
12 1 }
13
14 /************** wait *****************************/
15 bit ds18b20_wait(void)
16 {
17 1 unsigned char i;
18 1 bit x;
19 1 x=0;
20 1 for(i=0;i<100;i++)
21 1 {
22 2 if(~dq18b20)
23 2 {
24 3 if(dq18b20)
25 3 {x=1;return x;}
26 3 } }
27 1 return x;
28 1
29 1 }
30
31 /************** reset DS18B20 ************************/
32 void ds18b20_reset(void) // reset DS18b20
33 {
34 1 dq18b20_find=0;
35 1 dq18b20=0;
36 1 ds18b20_delay(50);
37 1 dq18b20=1;
38 1 dq18b20_find=1;
39 1 }
40 /*************** wait responsion ***********************/
41
42 /*************** read a bit data ******************************/
43 bit ds18b20_readbit(void)
44 {
45 1 bit x;
46 1 dq18b20=0;
47 1 _nop_();
48 1 _nop_();
49 1 _nop_();
50 1 _nop_();
51 1 dq18b20=1;
52 1 x=dq18b20;
53 1 return(x);
54 1 }
55 /**************** read a byte data *****************************/
C51 COMPILER V7.08 DS18B20 06/13/2007 16:48:13 PAGE 2
56 unsigned char ds18b20_readbyte(void)
57 {
58 1 unsigned char i,dat,x;
59 1 dat=0x00;
60 1 for(i=0;i<8;i++)
61 1 {
62 2 x=ds18b20_readbit();
63 2 dat=(x<<7)|(dat>>1);
64 2 }
65 1 return(dat);
66 1 }
67 /******************* write a byte data *******************************/
68 void ds18b20_write(unsigned char dat)
69 {
70 1 unsigned char i,x;
71 1 for(i=0;i<8;i++)
72 1 {
73 2 x=dat&1;
74 2 dat>>=1;
75 2 if(x==1)
76 2 {
77 3 dq18b20=0;
78 3 ds18b20_delay(0);
79 3 _nop_();
80 3 _nop_();
81 3 _nop_();
82 3 _nop_();
83 3 _nop_();
84 3 _nop_();
85 3 dq18b20=1;
86 3 }
87 2 else {
88 3 dq18b20=0;
89 3 ds18b20_delay(5);
90 3 dq18b20=1;
91 3 }
92 2 }
93 1 }
94 /************ starting DS18B20 ********************/
95 void ds18b20_start(void)
96 { EA=0;
97 1 ds18b20_reset();
98 1 ds18b20_wait();
99 1 ds18b20_write(0xcc);
100 1 ds18b20_write(0x44);
101 1 EA=1;
102 1 }
103
104 /************* match rom *****************************/
105 short int match_temperature(unsigned char n[8])
106 {
107 1
108 1 unsigned char i,low,high;
109 1 unsigned char *p;
110 1 short int x;
111 1
112 1 EA=0; p=n;
113 1 ds18b20_reset();
114 1 ds18b20_wait();
115 1 ds18b20_write(0x55);
116 1 for(i=0;i<8;i++)
117 1 {
C51 COMPILER V7.08 DS18B20 06/13/2007 16:48:13 PAGE 3
118 2 ds18b20_write(*p);
119 2 p++;
120 2
121 2 }
122 1 ds18b20_write(0xbe);
123 1 ds18b20_delay(3);
124 1 low=ds18b20_readbyte();
125 1 high=ds18b20_readbyte();
126 1 x=high&0xff;
127 1 x<<=8;
128 1 x+=low;
129 1 EA=1;
130 1 return x;
131 1
132 1 }
133
134 bit ds18b20_readbit_find(void)
135 {
136 1 bit x;
137 1 dq18b20_find=0;
138 1 ds18b20_delay(1);
139 1 dq18b20_find=1;
140 1 x=dq18b20_find;
141 1 return(x);
142 1 }
143
144 /**************** read a byte data *****************************/
145 unsigned char ds18b20_readbyte_find(void)
146 {
147 1 unsigned char i,dat,x;
148 1 dat=0x00;
149 1 for(i=0;i<8;i++)
150 1 {
151 2 x=ds18b20_readbit_find();
152 2 ds18b20_delay(1);
153 2 dat=(x<<7)|(dat>>1);
154 2 }
155 1 return(dat);
156 1 }
157
158
159 /************** wait *****************************/
160 bit ds18b20_wait_find(void)
161 {
162 1 unsigned char i;
163 1 bit x;
164 1 x=0;
165 1 for(i=0;i<100;i++)
166 1 {
167 2 if(~dq18b20_find)
168 2 {
169 3 ds18b20_delay(0);
170 3 if(dq18b20_find)
171 3 {x=1;return x;}
172 3 } }
173 1 return x;
174 1
175 1
176 1 }
177
178 /******************* dq18b20_find ***************************/
179 void ds18b20_write_find(unsigned char dat)
C51 COMPILER V7.08 DS18B20 06/13/2007 16:48:13 PAGE 4
180 {
181 1 unsigned char i,x;
182 1 for(i=0;i<8;i++)
183 1 {
184 2 x=dat&1;
185 2 dat>>=1;
186 2 if(x==1)
187 2 {
188 3 dq18b20_find=0;
189 3 ds18b20_delay(0);
190 3 dq18b20_find=1;
191 3 }
192 2 else {
193 3 dq18b20_find=0;
194 3 ds18b20_delay(5);
195 3 dq18b20_find=1;
196 3 }
197 2 }
198 1 }
199 /*********** read number ********************************/
200 void ds18b20_number(unsigned char xxxxx[8])
201 {
202 1 unsigned char *p;
203 1 unsigned char i;
204 1 EA=0;
205 1 p=xxxxx;
206 1
207 1 ds18b20_reset();
208 1 ds18b20_wait_find();
209 1 ds18b20_write_find(0x33);
210 1 for(i=0;i<8;i++)
211 1 {
212 2 *p=ds18b20_readbyte_find();
213 2 p++;
214 2
215 2 }
216 1 EA=1;
217 1 }
218
219
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 378 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -