📄 ledsubfuc.lst
字号:
C51 COMPILER V7.02a LEDSUBFUC 05/26/2005 13:15:53 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE LEDSUBFUC
OBJECT MODULE PLACED IN ledsubfuc.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ledsubfuc.c OPTIMIZE(4,SPEED)
stmt level source
1 /*******************************************************************************/
2 /****** RTC&TEMPERATURE SUB SYSTEM ******/
3
4 /******************DESIGNED BY LINGFENG*************2004/9/2*********************/
5 /******************CHANGE BY CAOCONG****************2004/10/10*******************/
6
7
8 /*******************************************************************************/
9
10
11 /********include files**********************/
12
13 //#include<w77e58.h>
14 #include<absacc.h>
15 #include <setjmp.h>
16 #include<intrins.h>
17 #include<string.h>
18 #include"ledsubfuc.h"
19
20
21
22 /*********************************program******************************/
23
24
25
26 /***********DS1820 sub_function****************************************/
27 void delay100m()
28 {
29 1 uchar i,j,k;
30 1 for(i=0;i<8;i++)
31 1 {
32 2 for(j=0;j<25;j++)
33 2 {
34 3 for(k=0;k<250;k++);
35 3 }
36 2 }
37 1 }
38
39 void delay15() //delay time is 15us
40 {
41 1 uchar i;
42 1 for(i=0;i<5;i++);
43 1 }
44
45 void delay60() //delay time is 60us
46 {
47 1 uchar i;
48 1 for(i=0;i<20;i++);
49 1 }
50
51 void write_0_IO()
52 {
53 1 DS1820=1;
54 1 NOP;
55 1 DS1820=0;
C51 COMPILER V7.02a LEDSUBFUC 05/26/2005 13:15:53 PAGE 2
56 1 delay15(); //delay 60us
57 1 delay15();
58 1 delay15();
59 1 delay15();
60 1 DS1820=1; //over
61 1 NOP;
62 1 NOP;
63 1
64 1 }
65
66 void write_1_IO()
67 {
68 1 DS1820=1;
69 1 NOP;
70 1 DS1820=0;
71 1 NOP;
72 1 NOP;
73 1 NOP;
74 1 NOP;
75 1 NOP;
76 1 NOP;
77 1 NOP;
78 1 DS1820=1;
79 1 NOP;
80 1 NOP;
81 1 NOP;
82 1 NOP;
83 1 NOP;
84 1 NOP;
85 1 NOP;
86 1 delay15();
87 1 delay15();
88 1 delay15();
89 1 DS1820=1; // over
90 1 NOP;
91 1
92 1 }
93
94
95 bit read_IO()
96 {
97 1 bit b;
98 1 DS1820 =1;
99 1 DS1820=0;
100 1 NOP;
101 1 NOP;
102 1 DS1820=1;
103 1 NOP;
104 1 NOP;
105 1 NOP;
106 1 NOP;
107 1 NOP;
108 1 NOP;
109 1 NOP;
110 1 NOP;
111 1 NOP;
112 1 b=DS1820;
113 1 delay15();
114 1 delay15();
115 1 delay15();
116 1 NOP;
117 1 NOP;
C51 COMPILER V7.02a LEDSUBFUC 05/26/2005 13:15:53 PAGE 3
118 1 DS1820=1; //over
119 1 NOP;
120 1 return b;
121 1
122 1 }
123
124 void reset_IO()
125 {
126 1 uchar i;
127 1 DS1820=1;
128 1 DS1820=0;
129 1 for(i=0;i<9;i++)
130 1 {
131 2 delay60(); //----540us----
132 2 }
133 1 DS1820=1;
134 1 delay15();
135 1 delay15(); //----delay 30us-----
136 1 while(DS1820);
137 1 for(i=0;i<8;i++)
138 1 {
139 2 delay60();
140 2 }
141 1 DS1820=1; //over
142 1
143 1 }
144
145 void write_b_IO(uchar byte) //write byte data to ds1820
146 {
147 1 uchar i;
148 1 for(i=0;i<8;i++)
149 1 {
150 2 if(byte&0x01)
151 2 {
152 3 write_1_IO();
153 3 }
154 2 else
155 2 {
156 3 write_0_IO();
157 3 }
158 2 byte=byte>>1;
159 2 }
160 1 }
161
162 uchar read_b_IO() //read byte data from ds1820
163 {
164 1 uchar i,j;
165 1 bit b;
166 1 j=0;
167 1 for(i=0;i<8;i++)
168 1 {
169 2 b=read_IO();
170 2 if(b){
171 3 j+=1;
172 3 }
173 2 j=_cror_(j,1); //sycle right shift a bit
174 2 }
175 1 return j;
176 1
177 1 }
178
179
C51 COMPILER V7.02a LEDSUBFUC 05/26/2005 13:15:53 PAGE 4
180
181 void ds1820_ini()
182 {
183 1
184 1 reset_IO(); //reset the io
185 1
186 1 }
187
188
189
190
191 void get_temp(uchar time[])
192 {
193 1 uchar i;
194 1 bit b;
195 1 b=0;
196 1 reset_IO();
197 1 write_b_IO(0xcc); //skip the ROM
198 1 write_b_IO(0x44); //convert T
199 1 for(i=1;i<20;i++)
200 1 { //delay 2s
201 2 delay100m();
202 2 watchdog();
203 2 }
204 1 while(!b){
205 2 b=read_IO();
206 2 }
207 1 reset_IO();
208 1 write_b_IO(0xcc); //skip the ROM
209 1 write_b_IO(0xbe); //read T
210 1 temp_x=read_b_IO(); // T lsb
211 1 temp_z=read_b_IO(); // T msb
212 1 reset_IO();
213 1
214 1
215 1 //temp_z store sign of temperature data
216 1 // if temp_z is 0xff the temperature is minus
217 1 //temp_x store temperature data
218 1 // bit7-bit4 is temperature`s HSB bit3-bit0 is temperature`s LSB
219 1 if (temp_z)
220 1 {
221 2 temp_x=temp_x^0xff;
222 2 temp_x=temp_x+0x01;
223 2 }
224 1 temp_x=temp_x>>1; //int the temperature data
225 1 i=temp_x/10; //temperature`s HSB
226 1 i=i<<4;
227 1 i|=temp_x%10; //add temperature`s LSB
228 1 time[7]=temp_z;
229 1 time[8]=temp_x;
230 1
231 1 }
232
233
234
235
236
237
238
239
240
241
C51 COMPILER V7.02a LEDSUBFUC 05/26/2005 13:15:53 PAGE 5
242
243
244
245
246
247
248
249
250
251 /*****************PCF8563 sub function********************************/
252
253
254 void start_i2c(void)
255 {
256 1 SDA=1; //ready for send signal of begin
257 1 NOP;
258 1
259 1 SCL=1;
260 1 NOP;
261 1 NOP;
262 1 NOP;
263 1 NOP;
264 1 NOP;
265 1
266 1 SDA=0; //send signal of beign
267 1 NOP;
268 1 NOP;
269 1 NOP;
270 1 NOP;
271 1 NOP;
272 1
273 1 SCL=0; //control i2c
274 1 NOP;
275 1 NOP;
276 1
277 1 }
278
279
280 void stop_i2c(void)
281 {
282 1
283 1 SDA=0; //ready send signal of end
284 1 NOP;
285 1
286 1 SCL=1;
287 1 NOP;
288 1 NOP;
289 1 NOP;
290 1 NOP;
291 1 NOP;
292 1
293 1 SDA=1; //send signal of end
294 1 NOP;
295 1 NOP;
296 1 NOP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -