?? zengzp.lst
字號:
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE ZENGZP
OBJECT MODULE PLACED IN H:\MYPROJ~1\485_LI~1\ZENGZP.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE H:\MYPROJ~1\485_LI~1\ZENGZP.C DB SB OE
stmt level source
*** WARNING C500 IN LINE 1 OF H:\MYPROJ~1\485_LI~1\ZENGZP.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 /*曾智平文檔
2 傳送字節37
3 修改者機號和801一樣 ,前置字符和801一樣
4
5 0x9e+01+00+機號+命令+37+。。。。。。。。。。。。。。
6 開燈命令0xaa+時間1+時間2+ 時間為0表示常開,否則按照時間計算關燈時間
7 開燈命令0xbb+ 直接關燈
8
9
10 */
11
12
13
14
15 #include <reg54.h>
16 #include <stdlib.h>
17 #include <absacc.h>
18 #include "string.h"
19 #include "stdio.h"
20
21 #define uchar unsigned char
22 #define uint unsigned int
23 #define ulong unsigned long
24 #define true 1
25 #define false 255
26
27
28
29
30
31
32
33 uchar idata usart0_flag;
34 uchar idata usart0_receive_counter;
35 uchar idata usart0_rt_temp_memory[39]; //37,,改稱10
36
37
38 uchar idata door_low_serial;
39
40 sbit lock_1=P4^1;
41 sbit lock_2=P4^0;
42
43
44 uint led_delay_time=0;
45
46
47 sbit or485=P2^6;
48
49
50 sbit buzzer_led=P3^5;
51 sbit led=P3^4;
52 void delay(uchar x)
53 {
54 1 uchar i;
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 2
55 1 while(x--)
56 1 {
57 2 for(i=0;i<114;i++)
58 2 {;
59 3 }
60 2 }
61 1 }
62
63 open_led()
64 {
65 1 //buzzer_led=0;
66 1 lock_1=0;
67 1 lock_2=0;
68 1
69 1 }
70
71 close_led()
72 {
73 1 // buzzer_led=1;
74 1 lock_1=1;
75 1 lock_2=1;
76 1
77 1 }
78 void clr_wdt(void)
79 {
80 1 WDT54=0x87|0x04;
81 1
82 1 }
83
84
85 void wdt_init(void)
86 {
87 1 WDT54=0x87;
88 1 }
89
90
91
92
93 void buzzer_on()
94 {
95 1 //buzzer_led=0;
96 1 led=1;
97 1
98 1 }
99 void buzzer_off()
100 {
101 1 led=0;
102 1 // buzzer_led=1;
103 1
104 1 }
105
106
107 void buzzer_drive(void)
108 {
109 1 buzzer_on();
110 1 delay(100);
111 1 buzzer_off();
112 1 }
113
114
115
116
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 3
117
118
119
120
121
122 void timer0_init(void)
123 {
124 1 TMOD=0x21;
125 1 TL0=0xfd;
126 1 TH0=0xdb; //
127 1 TF0=0;
128 1 TR0=1;
129 1 }
130
131 //中斷方式接受字符
132 //獲得的數據標準格式0x9e+kind+high_serial+low_serial+command+byte_num+有效數據.
133 //獲得這樣的字符串后,才能接收數據
134 serial() interrupt 4
135 {
136 1 uchar i;
137 1 uint temp_add;
138 1 bit flag_value;
139 1
140 1 while(!RI);
141 1 RI=0;
142 1
143 1 usart0_rt_temp_memory[usart0_receive_counter]=SBUF;
144 1
145 1 flag_value=1;
146 1 switch(usart0_receive_counter)
147 1 { //2,3的0,0是設定序列號的標記
148 2 case 0:
149 2 if(usart0_rt_temp_memory[0]!=0x9e)
150 2 {flag_value=0;}//沒有找到有效開始字節,,退出去
151 2 usart0_rt_temp_memory[5]=6;//這個字節是要接受的數據個數,置初值不能小于5;
152 2 break;
153 2
154 2 case 1: //有了起始位,判斷接下來的四位
155 2 if(usart0_rt_temp_memory[1]==0x9e)//起始位重復,,屏蔽掉
156 2 {usart0_receive_counter--;usart0_rt_temp_memory[5]=6;}
157 2 else if((usart0_rt_temp_memory[1]!=1)&(usart0_rt_temp_memory[1]!=0))
158 2 {flag_value=0;}//不是考勤的標示位
159 2 else{}
160 2 break;
161 2
162 2 case 2:
163 2 if(usart0_rt_temp_memory[2]!=0)
164 2 {flag_value=0;}//不是本機的標示位
165 2 break;
166 2
167 2 case 3:
168 2 if((usart0_rt_temp_memory[3]!=door_low_serial)&(usart0_rt_temp_memory[3]!=0))
169 2 {flag_value=0;}//不是本機的標示位
170 2 break;
171 2
172 2 default:
173 2
174 2 break;
175 2 }
176 1 if(!flag_value)
177 1 {usart0_receive_counter=0;return;}
178 1
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 4
179 1
180 1 usart0_receive_counter++;
181 1 timer0_init();//初始化定時時間,10ms自動屏蔽
182 1
183 1
184 1 if(usart0_receive_counter==37)
185 1 {
186 2 /*
187 2 temp_add=0;//判斷檢驗碼
188 2 for(i=0;i<usart0_rt_temp_memory[5]-3;i++)
189 2 {
190 2 temp_add=temp_add+usart0_rt_temp_memory[i];
191 2 }
192 2 if(temp_add!=(usart0_rt_temp_memory[usart0_rt_temp_memory[5]-3]*0x100+usart0_rt_temp_memory[usart0_rt
-_temp_memory[5]-2]))
193 2 {usart0_receive_counter=0;return;}
194 2 else if(usart0_rt_temp_memory[usart0_rt_temp_memory[5]-1]!=0x9d)
195 2 {usart0_receive_counter=0;return;}
196 2 else
197 2 */
198 2
199 2 usart0_flag=true;usart0_receive_counter=0;return;
200 2 }
201 1
202 1 }
*** WARNING C280 IN LINE 136 OF H:\MYPROJ~1\485_LI~1\ZENGZP.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 137 OF H:\MYPROJ~1\485_LI~1\ZENGZP.C: 'temp_add': unreferenced local variable
203
204
205
206
207 void or485_o(void)
208 {
209 1 //P4=P4|0x2;
210 1 or485=1;
211 1
212 1 }
213
214
215 void or485_r(void)// 低電位
216 {
217 1 //P4=P4&0x0d;
218 1 or485=0;
219 1
220 1
221 1 }
222
223
224
225
226
227
228
229
230
231
232
233
234 void USART0_Transmit_byte(uchar byte)
235 {
236 1 uchar y;
237 1 y=50;
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 5
238 1 TB8=0;
239 1 or485_o();//or_485=1;
240 1 TI=0;
241 1 SBUF=byte;
242 1 while(TI==0);
243 1 TI=0;
244 1 while(y--)
245 1 {;}
246 1 or485_r();//or_485=0;
247 1
248 1 }
249
250
251 void Usart_Init( void )//7--57600; 23--19200; 47--9600;
252 {
253 1 TMOD=0X20;
254 1 TH1=0Xfd;
255 1 TL1=0Xfd;
256 1 PCON=0X80; //8 19200
257 1 TR1=1;
258 1 SCON=0X58; //方式1。。
259 1 IE=0X90;
260 1 }
261
262
263
264
265
266
267 void send_data_to_computer(uchar num_data)
268 {
269 1 uchar i;
270 1 uint idata temp_16;
271 1
272 1 ES=0;
273 1
274 1 usart0_rt_temp_memory[0]=0x8e; //起始符
275 1 usart0_rt_temp_memory[1]=1;// board type
276 1 usart0_rt_temp_memory[2]=0;//board address l
277 1 usart0_rt_temp_memory[3]=door_low_serial;//board address h
278 1 //usart0_rt_temp_memory[4]=不管
279 1 usart0_rt_temp_memory[5]=num_data;
280 1 temp_16=0;
281 1 for(i=0;i<num_data-3;i++)
282 1 {
283 2 temp_16=temp_16+usart0_rt_temp_memory[i];
284 2 }
285 1 usart0_rt_temp_memory[num_data-3]=temp_16%0x100;
286 1 usart0_rt_temp_memory[num_data-2]=temp_16/0x100;
287 1 usart0_rt_temp_memory[num_data-1]=0x9d; //結尾符
288 1 for(i=0;i<num_data;i++)
289 1 {
290 2 USART0_Transmit_byte(usart0_rt_temp_memory[i]);//send_buff_data[i]);
291 2 }
292 1
293 1 ES=1;
294 1 return;
295 1
296 1 }
297
298
299
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 6
300
301
302
303
304
305
306
307
308
309 void cpu_init(void)
310 {
311 1
312 1 EA=0;
313 1
314 1 P0=0xff;
315 1 P1=0xff;
316 1 P2=0xff;
317 1 P4=0xff;
318 1
319 1
320 1 IE0=0;
321 1 IE1=0;
322 1 EX1=1;
323 1 EX0=1;
324 1 IT0=1;
325 1 IT1=1;
326 1 IP=0X05;
327 1 TR0=0;
328 1 TF0=0;
329 1 //p4口的操作
330 1
331 1 }
332
333
334
335
336
337
338
339
340 main (void)
341 {
342 1 uchar i;
343 1 uchar timer_counter_10ms;
344 1
345 1 uchar second_counter=0;
346 1
347 1 usart0_flag=false;
348 1 delay(200);
349 1 delay(200);
350 1
351 1 cpu_init();
352 1 Usart_Init();
353 1 timer0_init();
354 1 EA=0;
355 1
356 1 buzzer_drive();
357 1
358 1
359 1 or485_r();// 低電位//置485于接收狀態
360 1
361 1 //啟動看門狗
C51 COMPILER V6.12 ZENGZP 03/25/2009 00:15:20 PAGE 7
362 1 wdt_init();
363 1
364 1
365 1 //AUXR=3;//關閉ale信號
366 1
367 1 door_low_serial=000001;
368 1
369 1
370 1
371 1
372 1 while(1)
373 1 {
374 2 EA=1;
375 2 ES=1;
376 2
377 2 clr_wdt();
378 2
379 2
380 2
381 2
382 2 if(TF0)
383 2 {
384 3 TF0=0;timer_counter_10ms++;timer0_init();
385 3 //判斷接受一位數據在規定的時間里面有沒有完成
386 3 //10ms時間內,接收完有效數據,,否則放棄
387 3 if(usart0_receive_counter!=0)
388 3 {usart0_receive_counter=0;}
389 3 /*判斷打卡的情況*/
390 3
391 3
392 3 }
393 2
394 2
395 2
396 2
397 2
398 2
399 2 if(timer_counter_10ms>100) //1S時間到 //定時100ms判斷是不是外中斷,還是串口中斷結束
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -