📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 07/26/2006 17:37:30 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil V7.20\C51\BIN\C51.EXE Main.C BROWSE DEBUG OBJECTEXTEND
line level source
1 //*************************************************************************************************
2 // Module Name : Main.C
3 // CreateDate : 2006-07-13
4 // ModifData : 2006-07-25
5 // Description :
6 // Author : Explorer01
7 // Version : V1.0
8 //*************************************************************************************************
9 //
10 //-------------------------------------------------------------------------------------------------
11 // Includes
12 //-------------------------------------------------------------------------------------------------
13
14 #include <STC51.H>
15 #include "DS18B20.H"
16
17 //*************************************************************************************************
18 //*************************************************************************************************
19 // Global VARIABLES
20 //*************************************************************************************************
21 //*************************************************************************************************
22 //
23 #define RS485Enable P1_5 //
24 #define LED P1_7 //
25
26 //-------------------------------------------------------------------------------------------------
27 #define TemperDevice_A 0xB2 //
28 #define TemperDevice_B 0xB3 //
29 #define TemperDevice_C 0xB4 //
30
31 #define CommandOver 0xCE //
32
33 #define MyAddress TemperDevice_C //
34
35 //-------------------------------------------------------------------------------------------------
36 // Communication
37 unsigned char ComDatum[6] = {0x00, 0x00, 0x00, 0x00, 0x00, '\0'};
38 unsigned char ReceiveStep;
39 bit FlagTemper;
40
41 //-------------------------------------------------------------------------------------------------
42 //
43 unsigned int TEMPERATURE[3];
44 unsigned char Count, Filter;
45 bit TemperOver;
46
47 //*************************************************************************************************
48 //*************************************************************************************************
49 // Function PROTOTYPES
50 //*************************************************************************************************
51 //*************************************************************************************************
52 //
53 //=================================================================================================
54 // Delay Procedure
55 //=================================================================================================
C51 COMPILER V7.20 MAIN 07/26/2006 17:37:30 PAGE 2
56 // 1 us 延时子程序, Fosc =12MHz
57 void mDelayuS( unsigned int usecond )
58 {
59 1 unsigned char i;
60 1
61 1 while( usecond-- )
62 1 {
63 2 for( i=0; i<5; i++ ) {;}
64 2 }
65 1 }
66
67 //-------------------------------------------------------------------------------------------------
68 // 1 ms 延时子程序, Fosc =12MHz
69 void mDelaymS( unsigned int msecond )
70 {
71 1 unsigned char i,j;
72 1
73 1 while( msecond-- )
74 1 {
75 2 for( j=0; j<5; j++ )
76 2 for( i=0; i<125; i++) {;}
77 2 }
78 1 }
79
80 //=================================================================================================
81 //=================================================================================================
82 // UART Interrupt Procedure
83 //=================================================================================================
84 //=================================================================================================
85 //
86 /*
87 //-------------------------------------------------------------------------------------------------
88 // UART Send Byte
89 void UARTSendByte( unsigned char datum )
90 {
91 ES = 0;
92
93 TI = 0;
94 SBUF = datum;
95 while( TI == 0 ) ;
96
97 ES = 1;
98 }
99 */
100 //-------------------------------------------------------------------------------------------------
101 // UART Send String
102 void UARTSendString( unsigned char *p )
103 {
104 1 unsigned char i;
105 1
106 1 ES = 0;
107 1 RS485Enable = 1; // Enable Send
108 1 LED = 1; // Enable
109 1
110 1 for( i=0; i<5; i++ )
111 1 {
112 2 SBUF = *p++;
113 2 while ( TI == 0 ) ; // Waiting...
114 2 TI = 0;
115 2 mDelayuS( 10 );
116 2 }
117 1
C51 COMPILER V7.20 MAIN 07/26/2006 17:37:30 PAGE 3
118 1 RS485Enable = 0; // Disable Send
119 1 LED = 0; // Disable
120 1 ES = 1;
121 1 }
122
123 //=================================================================================================
124 //
125 void UART_ISR( void ) interrupt 4
126 {
127 1 unsigned char datum;
128 1
129 1 RI = 0;
130 1 datum = SBUF;
131 1
132 1 switch( ReceiveStep )
133 1 {
134 2 // Receive Start!
135 2 case 0: if( datum == 0xAA ){ ReceiveStep = 1; FlagTemper = 0; } break;
136 2 // MSB
137 2 case 1: if( datum == 0x55 ) ReceiveStep = 2; break;
138 2 // LSB
139 2 case 2: if( datum == MyAddress ) ReceiveStep = 3; break;
140 2 // Receive over!
141 2 case 3: if( datum == CommandOver ){ ReceiveStep = 0; FlagTemper = 1; } break;
142 2
143 2 default: ReceiveStep = 0; break;
144 2 }
145 1 }
146
147 //=================================================================================================
148 //=================================================================================================
149 // Timer0 Interrupt Procedure
150 //=================================================================================================
151 //=================================================================================================
152 // Fosc = 11.0592MHz
153 void Timer0_ISR( void ) interrupt 1
154 {
155 1 TH0 = 0x04; TL0 = 0; // 70ms
156 1
157 1 Count++;
158 1 if( Count > 11 ) // 70ms*11 = 770ms
159 1 {
160 2 Count = 0;
161 2 DS18B20Temperature( );
162 2 TEMPERATURE[ Filter ] = TEMPER;
163 2 Filter++;
164 2 if( Filter > 2 ){ Filter = 0; TemperOver = 1; }
165 2 }
166 1 }
167
168 //=================================================================================================
169 // Control Procedure:
170 //=================================================================================================
171 //
172 void Control( void )
173 {
174 1 unsigned char i, CRC;
175 1 unsigned int Temperature, temp;
176 1
177 1 if( FlagTemper )
178 1 {
179 2 TR0 = 0; ET0 = 0;
C51 COMPILER V7.20 MAIN 07/26/2006 17:37:30 PAGE 4
180 2 FlagTemper = 0;
181 2 DS18B20Temperature( );
182 2
183 2 TemperOver = 0;
184 2 Count = 0; Filter = 0;
185 2 TEMPER = 0;
186 2 for( i=0; i<3; i++ ) TEMPERATURE[i] = 0;
187 2
188 2 TH0 = 0x04; TL0 = 0; // 70ms
189 2 TR0 = 1; // Start Temperature get
190 2 ET0 = 1;
191 2 }
192 1
193 1 if( TemperOver )
194 1 {
195 2 TemperOver = 0;
196 2 ET0 = 0;
197 2 TR0 = 0; // Temperature get Over
198 2
199 2 if( TEMPERATURE[0] > TEMPERATURE[1] ){ temp = TEMPERATURE[0]; TEMPERATURE[0] = TEMPERATURE[1]; TEMPERATU
-RE[1] = temp; }
200 2 if( TEMPERATURE[0] > TEMPERATURE[2] ){ temp = TEMPERATURE[0]; TEMPERATURE[0] = TEMPERATURE[2]; TEMPERATU
-RE[2] = temp; }
201 2 if( TEMPERATURE[1] > TEMPERATURE[2] ){ temp = TEMPERATURE[1]; TEMPERATURE[1] = TEMPERATURE[2]; TEMPERATU
-RE[2] = temp; }
202 2
203 2 Temperature = TEMPERATURE[1]*10/16;
204 2
205 2 ComDatum[0] = MyAddress;
206 2 ComDatum[1] = (unsigned char)(Temperature >> 8); // MSB
207 2 ComDatum[2] = (unsigned char)Temperature; // LSB
208 2 ComDatum[3] = CommandOver;
209 2
210 2 // CRC
211 2 CRC = 0;
212 2 for( i=0; i<4; i++ ) CRC += ComDatum[i];
213 2 ComDatum[4] = CRC;
214 2 ComDatum[5] = '\0';
215 2
216 2 UARTSendString( ComDatum );
217 2 }
218 1 }
219
220 //=================================================================================================
221 //=================================================================================================
222 // Main Procedure
223 //=================================================================================================
224 //=================================================================================================
225 // System initialization
226 void Initialization( void )
227 {
228 1 mDelaymS( 100 );
229 1
230 1 // Port configuration
231 1 P1M0=0x00;
232 1 P1M1=0x80;
233 1
234 1 P3M0=0x00;
235 1 P3M1=0x00;
236 1
237 1 // Timer Initialization
238 1 TMOD = 0x21;
C51 COMPILER V7.20 MAIN 07/26/2006 17:37:30 PAGE 5
239 1 // TH1 = 0xFD; TL1 = 0xFD; // 9600
240 1 TH1 = 0xFA; TL1 = 0xFA; // 4800
241 1 TH0 = 0x04; TL0 = 0;
242 1
243 1 // UART Initialization
244 1 SCON = 0x50;
245 1 PS = 1;
246 1 EA = 1; ES = 1; ET0 = 0;
247 1 TR1 = 1; TR0 = 1;
248 1
249 1 // Extern
250 1 RS485Enable = 0; // Disable Send
251 1 LED = 0; // Disable
252 1
253 1 ReceiveStep = 0;
254 1 Count = 0;
255 1 }
256
257 //-------------------------------------------------------------------------------------------------
258 // Main
259 void main( void )
260 {
261 1 Initialization( );
262 1
263 1 DS18B20Temperature( );
264 1
265 1 while( 1 )
266 1 {
267 2 Control( );
268 2 }
269 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 572 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 6
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -