📄 main.lst
字号:
238 1 En485 = RECV;
239 1 EA=1;
240 1
241 1 }
242
243 /**********************************************************************8
244 void Wdtinit(void)
245 {
246 SCONF=SCONF&0X7F;
247 WTDC=0X87;
248 }
249 /*****************************************************************************
250 * 初始化RC500
251 *注意:RC500上电后应延时500ms才能可靠初始化
252 *****************************************************************************/
253 void Rc500Ready()
254 {
255 1 char status;
256 1 DelayMs(100);
257 1 DelayMs(100);
258 1 DelayMs(100);
259 1 DelayMs(100);
260 1 DelayMs(100);
261 1 status=PcdReset();
262 1 if(status!=MI_OK)
263 1 {
264 2 DelayMs(100);
265 2 status=PcdReset();
266 2 }
267 1 if(status==MI_OK)
268 1 rc500_ok=1;
269 1 else
270 1 rc500_ok=0;
271 1 }
272 /****************************************************************************
273 * *
274 * Function: START_T0 *
275 * *
276 * Input: - *
277 * Output: - *
278 * *
279 * Description: *
280 * *
281 * *
282 ****************************************************************************/
283 void START_T0(unsigned char x)
284 {
285 1 ET0 = 0 ;
286 1 TR0 = 0;
287 1 Timer0Cnt = x ;
288 1 TL0 = 0;
289 1 TH0 = 0;
290 1 TR0 = 1;
291 1 ET0 = 1 ;
292 1 }
293 /****************************************************************************
294 * *
295 * Function: CALL_isr_T0 *
296 * *
297 * Input: - *
298 * Output: - *
299 * *
C51 COMPILER V7.05 MAIN 12/20/2004 15:31:04 PAGE 6
300 * Description: *
301 * *
302 * *
303 ****************************************************************************/
304 void CALL_isr_T0(void)
305 {
306 1 TR0 = 0;
307 1 Timer0Cnt = 0;
308 1 TF0 = 1;
309 1
310 1 }
311 /****************************************************************************
312 * *
313 * Function: isr_timer0 *
314 * *
315 * Input: - *
316 * Output: - *
317 * *
318 * Description: *
319 ****************************************************************************/
320 void isr_timer0(void) interrupt 1 using 3
321 {
322 1 //TOGGLE_WD();
323 1
324 1 if ( Timer0Cnt != 0 )
325 1 {
326 2 --Timer0Cnt;
327 2 }
328 1 else
329 1 {
330 2 TR0 = 0 ;
331 2 if ((RecvState == RECV_DLE) || (RecvState == RECV_DLE_OR_NAK)) //发送起始字超时
332 2 {
333 3 ErrorCount++;
334 3 if ( ErrorCount <= 3)
335 3 {
336 4 SendReady = TRUE;
337 4 RecvReady = FALSE;
338 4 En485 = SEND;
339 4 //Ir_En = SEND;
340 4 //Delay50us(2);
341 4 TI = 1;
342 4 }
343 3 else
344 3 {
345 4 ErrorCount = 0 ;
346 4 SendReady = FALSE;
347 4 RecvReady = TRUE;
348 4 RecvState = RECV_STX;
349 4 En485 = RECV;
350 4 //Ir_En = RECV;
351 4 }
352 3 }
353 2 else //接收超时
354 2 {
355 3 SendReady = FALSE;
356 3 RecvReady = TRUE;
357 3 RecvState = RECV_STX;
358 3 En485 = RECV;
359 3 //Ir_En = RECV;
360 3 };
361 2 };
C51 COMPILER V7.05 MAIN 12/20/2004 15:31:04 PAGE 7
362 1
363 1 }
364
365 //******************************************************************************
366 /****************************************************************************
367 * *
368 * Function: isr_UART *
369 * *
370 * Input: - *
371 * Output: - *
372 * *
373 * Description: *
374 ****************************************************************************/
375 void isr_UART(void) interrupt 4 using 1
376 {
377 1 unsigned char c , oldRecvState , i , bcc;
378 1
379 1
380 1 if ( RI ) // Receive Command
381 1 {
382 2 TR0 = 0 ; //stop t0
383 2 c = SBUF;
384 2 RI = 0;
385 2 if (RecvReady)
386 2 {
387 3 SendReady = FALSE;
388 3 oldRecvState = RecvState;
389 3 RecvState = RECV_STX;
390 3
391 3 switch (oldRecvState)
392 3 {
393 4
394 4 case RECV_STX: // Receive STX and answer DLE
395 4 if (c == STX)
396 4 {
397 5
398 5 // RED_LED = ~RED_LED;
399 5 En485 = RECV;
400 5 //Ir_En = RECV ;
401 5 RecvState = RECV_ADDR0;
402 5 START_T0(T_533_ms);
403 5 }
404 4 else
405 4 {
406 5 CALL_isr_T0() ;
407 5 };
408 4 break;
409 4
410 4 case RECV_ADDR0:
411 4 if (c == ADDR)//0xd2)//s_ID[0])
412 4 {
413 5 RecvState = RECV_ADDR1;
414 5 START_T0(T_533_ms);
415 5 }
416 4 else
417 4 {
418 5 CALL_isr_T0() ;
419 5 };
420 4 break;
421 4 case RECV_ADDR1:
422 4 if (c ==0x02)//[1])
423 4 {
C51 COMPILER V7.05 MAIN 12/20/2004 15:31:04 PAGE 8
424 5 RecvState = RECV_ADDR2;
425 5 START_T0(T_533_ms);
426 5 }
427 4 else
428 4 {
429 5 CALL_isr_T0() ;
430 5 };
431 4 break;
432 4 case RECV_ADDR2:
433 4 if (c == 0x96)//s_ID[2])
434 4 {
435 5 RecvState = RECV_ADDR3;
436 5 START_T0(T_533_ms);
437 5 }
438 4 else
439 4 {
440 5 CALL_isr_T0() ;
441 5 };
442 4 break;
443 4
444 4 case RECV_ADDR3:
445 4 if (c == 0x49)//Pos_ID[3])
446 4 {
447 5
448 5 //ED_LED = ~RED_LED;
449 5 En485 = SEND;
450 5 //Ir_En = SEND;
451 5
452 5 SBUF = DLE ;
453 5 RecvState = RECV_DATA_DLE_ETX;
454 5 DataDleReceived = FALSE;
455 5 Index = 0;
456 5 Cmdok = FALSE;
457 5
458 5 while( !TI );
459 5 TI = FALSE;
460 5 En485 = RECV;
461 5
462 5 //Ir_En = RECV;
463 5 START_T0(T_533_ms);
464 5 }
465 4 else
466 4 {
467 5 CALL_isr_T0() ;
468 5 };
469 4 break;
470 4
471 4 case RECV_DATA_DLE_ETX:// Receive data,DEL,ETX and answer DLE
472 4 if (c == DLE)
473 4 {
474 5 if (!DataDleReceived) //如果上一个不是DLE 丢掉
475 5 {
476 6 DataDleReceived = TRUE;
477 6 RecvState = RECV_DATA_DLE_ETX;
478 6 START_T0(T_533_ms);
479 6 break;
480 6 }
481 5 else //如果上一个是DLE
482 5 {
483 6 DataDleReceived = FALSE; //留下
484 6 };
485 5 }
C51 COMPILER V7.05 MAIN 12/20/2004 15:31:04 PAGE 9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -