📄 18b20.lst
字号:
C51 COMPILER V7.01 18B20 03/02/2007 19:03:03 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18B20.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*========================================================================================================
-==
2 MODEL: Firmware Version : 010
3 ==========================================================================================================
-==
4 H/W TB41 USE ONLY REV:0.2 24MHz
5 Editor by :antony 2007.2.26
6 Modify by :
7 ==========================================================================================================
-=*/
8 #include <REG52.H>
9 #include <absacc.h>
10 #include <intrins.h>
11 #include <math.h>
12 #include <setjmp.h>
13 //--------------------------------------------------------------------------------------------------------
---
14 #define U8 unsigned char
15 #define U16 unsigned int
16 //--------------------------------------------------------------------------------------------------------
---
17 #define T20us 1000
18 #define T40us 2000
19 #define T60us 3000
20 #define T80us 4000
21 #define T90us 4500
22 #define T480us 24000
23 //--------------------------------------------------------------------------------------------------------
24 //default value
25 #define Bit0 0x01
26 #define Bit1 0x02
27 #define Bit2 0x04
28 #define Bit3 0x08
29 #define Bit4 0x10
30 #define Bit5 0x20
31 #define Bit6 0x40
32 #define Bit7 0x80
33 #define XBit7 0x7f
34 #define XBit6 0xbf
35 #define XBit5 0xdf
36 #define XBit4 0xef
37 #define XBit3 0xf7
38 #define XBit2 0xfb
39 #define XBit1 0xfd
40 #define XBit0 0xfe
41 //--------------------------------------------------------------------------------------------------------
42 #define LCM_Data P1
43 #define Busy 0x80
44 sbit LCM_RS = P3^0;
45 sbit LCM_RW = P3^1;
46 sbit LCM_E = P3^3;
47 sbit OKLED = P3^5;
48 //-------------------------------------------------------------------------------------------------------
49 #define SetRelay XBYTE[0x4000]
50 U8 RelayBuffer=0xff;
C51 COMPILER V7.01 18B20 03/02/2007 19:03:03 PAGE 2
51 #define SensorA 1
52 #define SensorB 2
53 sbit DQ1 = P3^4;
54 sbit DQ2 = P3^2;
55 //--------------------------------------------------------------------------------------------------------
56 void Delay100ms(void);
57 void Delay15(void);
58 void Delay60(void);
59 void InitTS(U8 Type);
60 void ResetTS(U8 Type);
61 void Write0TS(U8 Type);
62 void Write1TS(U8 Type);
63 bit ReadTS(U8 Type);
64 void WriteByteTS(U8 byte,U8 Type);
65 U8 ReadByteTS(U8 Type);
66 U16 GetTempTS(U8 Type);
67 void Delay(U16 cDly);
68 //--------------------------------------------------------------------------------------------------------
--
69 void WriteDataLCM(U8 WDLCM);
70 void WriteCommandLCM(U8 WCLCM,BuysC);
71 U8 ReadDataLCM(void);
72 U8 ReadStatusLCM(void);
73 void LCMInit(void);
74 void DisplayOneChar(U8 X, U8 Y, U8 DData);
75 void DisplayListChar(U8 X, U8 Y, U8 *DData);
76 void DisplayTemperature(U16 TempA,U16 TempB);
77
78 U8 code Line1[] = {" Q1 Q2 "};
79 U8 code Line2[] = {"000.000 000.000"};
80 U8 TempBuffer[16] = {"000.000 000.000"};
81
82 U8 code Notice1[] = {" Dragorn "};
83 U8 code Notice2[] = {"Oscillate Heater"};
84 U8 code NG[] = {" SENSOR Error!! "};
85 U8 code Q1_18B20NG[] = {" Q1_18B20 NG!! "};
86 U8 code Q2_18B20NG[] = {" Q2_18B20 NG!! "};
87 //--------------------------------------------------------------------------------------------------------
--
88 void main(void)
89 {
90 1 U16 BufferA,BufferB;
91 1 U8 j;
92 1
93 1 SetRelay=RelayBuffer & XBit0 & XBit1;
94 1 OKLED=1;
95 1 Delay100ms();
96 1 LCMInit();
97 1 DisplayListChar(0, 0, Notice1);
98 1 DisplayListChar(0, 1, Notice2);
99 1 for(j=0;j<30;j++)
100 1 Delay100ms();
101 1 DisplayListChar(0, 0, Line1);
102 1 DisplayListChar(0, 1, Line2);
103 1 InitTS(SensorA);
104 1 InitTS(SensorB);
105 1 SetRelay=RelayBuffer | Bit0 | Bit1;
106 1 while(1)
107 1 {
108 2 BufferA=GetTempTS(SensorA);
109 2 BufferA=BufferA-3500;
110 2 if(BufferA >= 57500)
C51 COMPILER V7.01 18B20 03/02/2007 19:03:03 PAGE 3
111 2 RelayBuffer=RelayBuffer & XBit0;
112 2 else
113 2 RelayBuffer=RelayBuffer | Bit0;
114 2 SetRelay=RelayBuffer;
115 2 //-------------------------------------------------
116 2 BufferB=GetTempTS(SensorB);
117 2 BufferB=BufferB-3500;
118 2 if(BufferB >= 57500)
119 2 RelayBuffer=RelayBuffer & XBit1;
120 2 else
121 2 RelayBuffer=RelayBuffer | Bit1;
122 2 SetRelay=RelayBuffer;
123 2 //--------------------------------------------------
124 2 if((BufferA>56000)&&(BufferB>56000))
125 2 OKLED=0;
126 2 else
127 2 OKLED=1;
128 2 DisplayTemperature(BufferA,BufferB);
129 2 }
130 1 }
131 //--------------------------------------------------------------------------------------------------------
---
132 void Delay(U16 cDly)
133 {
134 1 cDly=cDly/1000;
135 1 do
136 1 { //20us
137 2 _nop_();
138 2 _nop_();
139 2 _nop_();
140 2 _nop_();
141 2 _nop_();
142 2 _nop_();
143 2 _nop_();
144 2 _nop_();
145 2 }while(cDly--);
146 1 }
147 //--------------------------------------------------------------------------------------------------------
---
148 void Delay100ms(void)
149 {
150 1 U8 i,j,k;
151 1
152 1 for(i=0;i<8*2;i++)
153 1 for(j=0;j<25;j++)
154 1 for(k=0;k<151;k++);
155 1 }
156 //--------------------------------------------------------------------------------------------------------
-----
157 void InitTS(U8 Type) //init 18B20
158 {
159 1 ResetTS(Type);
160 1 WriteByteTS(0xCC,Type);
161 1 WriteByteTS(0x4E,Type);
162 1 WriteByteTS(0x1f,Type);
163 1 }
164 //--------------------------------------------------------------------------------------------------------
-----
165 void ResetTS(U8 Type) //reset 18B20
166 {
167 1 U8 j;
168 1
C51 COMPILER V7.01 18B20 03/02/2007 19:03:03 PAGE 4
169 1 j=255;
170 1 if(Type==SensorA)
171 1 {
172 2 DQ1=1;
173 2 DQ1=0;
174 2 Delay(T480us);
175 2 Delay(T40us);
176 2 DQ1=1;
177 2 //--------------------------------------------------------
178 2 while(j--) //if 18b20 presence DQ1=0 in 60~240us times
179 2 {
180 3 if(DQ1==0)
181 3 break;
182 3 }
183 2 if(j<2)
184 2 {
185 3 SetRelay=RelayBuffer & XBit0 & XBit1;
186 3 DisplayListChar(0, 0, NG);
187 3 DisplayListChar(0, 1, Q1_18B20NG);
188 3 while(1);
189 3 }
190 2 // while(DQ1);
191 2 //----------------------------------------------------------
192 2 Delay(T480us);
193 2 Delay(T40us);
194 2 }
195 1 else
196 1 {
197 2 DQ2=1;
198 2 DQ2=0;
199 2 Delay(T480us);
200 2 Delay(T40us);
201 2 DQ2=1;
202 2 //--------------------------------------------------------
203 2 while(j--) //if 18b20 presence DQ1=0 in 60~240us times
204 2 {
205 3 if(DQ2==0)
206 3 break;
207 3 }
208 2 if(j<2)
209 2 {
210 3 SetRelay=RelayBuffer & XBit0 & XBit1;
211 3 DisplayListChar(0, 0, NG);
212 3 DisplayListChar(0, 1, Q2_18B20NG);
213 3 while(1);
214 3 }
215 2 //while(DQ2);
216 2 //----------------------------------------------------------
217 2 Delay(T480us);
218 2 Delay(T40us);
219 2 }
220 1 }
221 //--------------------------------------------------------------------------------------------------------
-----
222 void Write0TS(U8 Type) //WRITE '0' TO 18B20
223 {
224 1 if(Type==SensorA)
225 1 {
226 2 DQ1=1;
227 2 DQ1=0;
228 2 Delay(T90us);
229 2 DQ1=1;
C51 COMPILER V7.01 18B20 03/02/2007 19:03:03 PAGE 5
230 2 _nop_();
231 2 _nop_();
232 2 }
233 1 else
234 1 {
235 2 DQ2=1;
236 2 DQ2=0;
237 2 Delay(T90us);
238 2 DQ2=1;
239 2 _nop_();
240 2 _nop_();
241 2 }
242 1 }
243 //--------------------------------------------------------------------------------------------------------
-----
244 void Write1TS(U8 Type) //WRITE '1' TO 18B20
245 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -