?? ds18b20.lst
字號(hào):
C51 COMPILER V8.02 DS18B20 12/20/2008 10:51:33 PAGE 1
C51 COMPILER V8.02, 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 <reg52.h>
2 #include <DS18B20.h>
3 #include<intrins.h>
4 #define uint unsigned int
5 #define uchar unsigned char
6 uchar temp_value,current_temp[2],wei;
7 //uchar code table[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
8 //uchar code ditab[16]=
9 //{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
10 //
11 uchar code table[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
12 //uchar code scan_con[4]={0xf7,0xfb,0xfd,0xfe}; //列掃描控制字
13 uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放
14 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共4個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用
15
16 void delay(uint n) //延時(shí)子程序
17 {
18 1 uint j,k;
19 1 for(k=0;k<n;k++)
20 1 for(j=0;j<500;j++);
21 1 }
22
23 void display1(uchar bai,uchar shi,uchar ge) //顯示子程序
24 {
25 1 P0=table[bai];
26 1 wei=0xfd;
27 1 P2=wei;
28 1 delay(1);
29 1 P2=0xff;
30 1
31 1 P0=table[shi];
32 1 wei=0xfb;
33 1 P2=wei;
34 1 delay(1);
35 1 P2=0xff;
36 1
37 1 P0=table[ge];
38 1 wei=0xf7;
39 1 P2=wei;
40 1 delay(1);
41 1 P2=0xff;
42 1
43 1 }sbit DQ18B20 = P2^7;
*** ERROR C231 IN LINE 43 OF DS18B20.C: 'DQ18B20': redefinition
44
45 void Delayus(unsigned int t)
46 {
47 1 for (;t>0;t--);
48 1 }
*** ERROR C237 IN LINE 48 OF DS18B20.C: '_Delayus': function already has a body
49
50 void Write_18b20(uchar val)
51 {
52 1 uchar i;
53 1 for(i=8;i>0;i--)
C51 COMPILER V8.02 DS18B20 12/20/2008 10:51:33 PAGE 2
54 1 {
55 2 DQ18B20=1;_nop_();_nop_(); //從高拉倒低
56 2 DQ18B20=0;_nop_();_nop_();_nop_();_nop_(); //5 us
57 2 DQ18B20=val&0x01; //最低位移出
58 2 Delayus(5); //55 us 15us~120us
59 2 val=val/2; //右移1位
60 2 }
61 1 DQ18B20=1;
62 1 Delayus(1);
63 1 }
*** ERROR C237 IN LINE 63 OF DS18B20.C: '_Write_18b20': function already has a body
64
65 /*void Write_18b20(unsigned char ddata) //寫(xiě)18B20數(shù)據(jù)
66 {
67 unsigned char i;
68 for(i=0;i<8;i++)
69 {
70 DQ18B20=1;_nop_();_nop_(); //從高拉倒低
71 DQ18B20 = 0;
72 _nop_();_nop_();_nop_();_nop_(); //5 us
73 DQ18B20 = ddata&0x01;
74 ddata=ddata >> 1;
75 Delayus(6); // Delay68us
76 DQ18B20 = 1;
77 }
78 DQ18B20 = 1;
79 Delayus(1); // Delay 18us
80 }
81
82 /*Write_18b20(unsigned char WriteData)
83 {
84 unsigned char i;
85 unsigned char tmpData;
86 for(i=0;i<8;i++)
87 {
88 tmpData=WriteData&0x01;
89 WriteData>>=1;
90 if(tmpData)
91 {
92 DQ18B20=0;
93 DQ18B20=1;
94 Delayus(4);
95 }
96 else
97 {
98 DQ18B20=0;
99 Delayus(4);
100 DQ18B20=1;
101 }
102 }
103 }
104
105 unsigned char Read_18b20(void) //讀18B20
106 {
107 unsigned char i,temp;
108 for(i=0;i<8;i++)
109 {
110 DQ18B20 =1;
111 temp=temp>>1;
112 DQ18B20 = 0;
113 Delayus(1);
114 DQ18B20 =1;
C51 COMPILER V8.02 DS18B20 12/20/2008 10:51:33 PAGE 3
115 Delayus(1);
116 if(DQ18B20 ==0)
117 {
118 temp=temp&0x7f;
119 }
120 else
121 {
122 temp=temp|0x80;
123 }
124 Delayus(5); //Delay 58us
125 }
126 DQ18B20=1;
127 return temp;
128 }
129 /*
130 //讀一個(gè)字節(jié)
131 unsigned char Read_18b20()
132 {
133 unsigned char i;
134 unsigned char ReadData=0;
135 for(i=0;i<8;i++)
136 {
137 DQ18B20=0;
138 ReadData>>=1;
139 DQ18B20=1;
140 if(DQ18B20)
141 ReadData|=0x80;
142 Delayus(4);
143 }
144 return ReadData;
145 } */
146
147 unsigned char Read_18b20(void)
148 {
149 1 unsigned char i;
150 1 unsigned char value=0;
151 1 for(i=8;i>0;i--)
152 1 {
153 2 DQ18B20=1;_nop_();_nop_();
154 2 value>>=1;
155 2 DQ18B20=0;_nop_();_nop_();_nop_();_nop_(); //4 us
156 2 DQ18B20=1;_nop_();_nop_();_nop_();_nop_(); //4 us
157 2 if(DQ18B20)value|=0x80;
158 2 Delayus(6); //66 us
159 2 }
160 1 DQ18B20=1;
161 1 return(value);
162 1 }
*** ERROR C237 IN LINE 162 OF DS18B20.C: 'Read_18b20': function already has a body
163
164 /*void Init_18b20(void) //18b20的初始化
165 {
166 DQ18B20 =0;
167 Delayus(50); //Delay 508us
168 DQ18B20 =1;
169 Delayus(5); //Delay 108us
170 while(DQ18B20);
171 Delayus(10); //Delay 108us
172 DQ18B20 =1;
173 }*/
174 void Init_18b20()
175 {
C51 COMPILER V8.02 DS18B20 12/20/2008 10:51:33 PAGE 4
176 1 DQ18B20=0;
177 1 Delayus(60); //下拉500us
178 1 DQ18B20=1; //釋放總線
179 1 Delayus(6);
180 1 while(DQ18B20); //等待應(yīng)答信號(hào)
181 1 while(~DQ18B20); //等待釋放總線
182 1 }
*** ERROR C237 IN LINE 182 OF DS18B20.C: 'Init_18b20': function already has a body
183
184 /*Init_18b20(void)
185 {
186 char presence=1;
187 while(presence)
188 {
189 while(presence)
190 {
191 DQ18B20=1;_nop_();_nop_();//從高拉倒低
192 DQ18B20=0;
193 Delayus(50); //550 us
194 DQ18B20=1;
195 Delayus(6); //66 us
196 presence=DQ18B20; //presence=0 復(fù)位成功,繼續(xù)下一步
197 }
198 Delayus(45); //延時(shí)500 us
199 presence=~DQ18B20;
200 }
201 DQ18B20=1; //拉高電平
202 } */
203
204 unsigned char Get_temp_value() //獲取溫度值
205 {
206 1 Init_18b20();
207 1 Delayus(200);
208 1 Write_18b20(0xcc); //跳過(guò)ROM地址
209 1 Write_18b20(0x44); //溫度變換
210 1 Init_18b20();
211 1 Delayus(1);
212 1 Write_18b20(0xcc);
213 1 Write_18b20(0xbe);//讀溫度
214 1
215 1 databuff[0]=Read_18b20();
216 1 databuff[1]=Read_18b20();
217 1 temp=databuff[1];
218 1 temp<<=8;
219 1 temp=temp|databuff[0]; // 兩字節(jié)合成一個(gè)整型變量。
220 1 //temp_value_integer=(((databuff[0]<<4)&0xf0)|((databuff[1]>>4)&0x0f));
221 1 // temp_value_decimal=(databuff[0]&0x000f)*625;
222 1 return temp;
223 1 }
*** ERROR C237 IN LINE 223 OF DS18B20.C: 'Get_temp_value': function already has a body
224
225
226 void main()
227 {
228 1 Init_18b20( );
229 1 Write_18b20(0xcc); //跳過(guò)ROM地址
230 1 Write_18b20(0x44);
231 1 while(1)
232 1 {
233 2 //Get_temp_value();//獲取溫度值
234 2 display[3]=Get_temp_value()%100; // 取后兩位數(shù)據(jù)暫存
235 2 display[2]=Get_temp_value()/100; // 取百位數(shù)據(jù)暫存
C51 COMPILER V8.02 DS18B20 12/20/2008 10:51:33 PAGE 5
236 2 display[1]=display[2]/10; // 取十位數(shù)據(jù)暫存
237 2 display[0]=display[2]%10;
238 2 display1(display[2],display[1],display[0]) ;
239 2 }
240 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 6 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -