📄 main.lst
字号:
286 1 else
287 1 {
288 2 RELAY_IN =0;
289 2 RELAY_OUT =0;
290 2 }
291 1
292 1
293 1 P0MDOUT = 0xfd; // sdo非推挽
294 1 P1MDOUT |= 0xf3; // nsel p1.0 p1.1推挽 p1.4 p1.5 P1.6 P1.7
295 1 P2MDOUT |= 0xb0; // P2.7 P2.4 P2.5
296 1
297 1
298 1
299 1 D0IN = 0;
300 1 D1IN = 0;
301 1 D0OUT = 0;
302 1 D1OUT = 0;
303 1
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 6
304 1 BELL = 0; //蜂鸣器关闭
305 1 LEDR = 1; //LED关闭
306 1
307 1 sck = 0;
308 1 nsel = 0;
309 1 sdi = 1;
310 1 sdo = 1;
311 1
312 1 X_CS = 1; //不选中AT25128
313 1
314 1
315 1 }
316
317 /******************************************************************************
318 ** 函数:beef(unchar be)
319 ** 入参:be, rg
320 ** 返回:
321 ** 说明:
322
323 ******************************************************************************/
324 void Beef(UCHAR be,UCHAR RG)
325 {
326 1 UCHAR i;
327 1
328 1 if(be==1)
329 1 {
330 2 BELL_ON;
331 2 if(RG==RED) {LEDR_ON;}
332 2 else
333 2 {LEDG_ON;}
334 2 delayms(100);
335 2 BELL_OFF; //单次蜂鸣
336 2 if(RG==RED) {LEDR_OFF;}
337 2 else
338 2 {LEDG_OFF;}
339 2 }
340 1
341 1 else
342 1 {
343 2 for(i=0;i<be;i++)
344 2 {
345 3 BELL_ON;
346 3 if(RG==RED) {LEDR_ON;}
347 3 else
348 3 {LEDG_ON;}
349 3 delayms(100);
350 3 BELL_OFF;
351 3 if(RG==RED) {LEDR_OFF;}
352 3 else
353 3 {LEDG_OFF;}
354 3 delayms(200); //多次蜂鸣需要间隔延时
355 3 }
356 2 }
357 1 }
358
359 void BeefL(UCHAR be,UCHAR RG)
360 {
361 1 UCHAR i;
362 1
363 1 if(be==1)
364 1 {
365 2 BELL_ON;
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 7
366 2 if(RG==RED) {LEDR_ON;}
367 2 else
368 2 {LEDG_ON;}
369 2 delayms(500);
370 2 BELL_OFF; //单次蜂鸣
371 2 if(RG==RED) {LEDR_OFF;}
372 2 else
373 2 {LEDG_OFF;}
374 2 }
375 1
376 1 else
377 1 {
378 2 for(i=0;i<be;i++)
379 2 {
380 3 BELL_ON;
381 3 if(RG==RED) {LEDR_ON;}
382 3 else
383 3 {LEDG_ON;}
384 3 delayms(300);
385 3 BELL_OFF;
386 3 if(RG==RED) {LEDR_OFF;}
387 3 else
388 3 {LEDG_OFF;}
389 3 delayms(200); //多次蜂鸣需要间隔延时
390 3 }
391 2 }
392 1 }
393
394
395 /******************************************************************************
396 ** 函数: SYSCLK_Init ()
397 ** 入参:
398 ** 返回:
399 ** 说明:
400 ** SYSCLK_Init
401 ** This routine initializes the system clock to use the internal oscillator
402 ** at its maximum frequency.
403 ** Also enables the Missing Clock Detector.
404 ******************************************************************************/
405
406 void SYSCLK_Init (void)
407 {
408 1 OSCICN |= 0x03; // Configure internal oscillator for
409 1 // its maximum frequency
410 1 RSTSRC = 0x04; // Enable missing clock detector
411 1
412 1 }
413
414 /******************************************************************************
415 ** 函数: delay()
416 ** 入参: unsigned int m
417 ** 返回:
418 ** 说明:
419 ******************************************************************************/
420
421 void delay(unsigned int m)
422 {
423 1 unsigned int n;
424 1 n=0;
425 1 while(n<m)
426 1 {n++;}
427 1 return;
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 8
428 1 }
429
430
431 /******************************************************************************
432 ** 函数: PCA_Init
433 ** 入参: 无
434 ** 返回: 误
435 ** 说明: 脉冲捕获初始化
436 ******************************************************************************/
437
438 void PCA_Init (void)
439 {
440 1 EIE1 = 0x10; //允许PCA0中断请求
441 1
442 1 PCA0L = 0x00;
443 1 PCA0H = 0x00;
444 1
445 1 PCA0CPM0 = 0x11;
446 1 PCA0CPL0 = 0x00;
447 1 PCA0CPH0 = 0x20;
448 1
449 1
450 1 PCA0CPM1 = 0x11;
451 1 PCA0CPL1 = 0x00;
452 1 PCA0CPH1 = 0x20;
453 1
454 1 PCA0CN = 0x40; //允许PCA定时器/计数器
455 1
456 1 }
457 /******************************************************************************
458 ** 函数: PCA_ISR
459 ** 入参: 无
460 ** 返回: 无
461 ** 说明: 脉冲捕获中断服务程序
462 ******************************************************************************/
463
464 void PCA_ISR (void) interrupt 11
465 {
466 1
467 1
468 1 CF = 0; //脉冲中断清标记
469 1
470 1 wie_str=1; //设置标记提供TIME0检测
471 1 RE_LOAD_TIME0;
472 1 //重载定时器0
473 1
474 1
475 1 if(CCF0==1) //查看d0 or d1
476 1 {
477 2 CCF0 = 0; //清匹配中断标志
478 2
479 2 wiebuf_cout[wie_cout]<<=1;
480 2 wiebuf_cout[wie_cout] |=0;
481 2 wie_8bit--;
482 2
483 2 }
484 1
485 1
486 1 if(CCF1==1)
487 1 {
488 2 CCF1 = 0;
489 2 wiebuf_cout[wie_cout]<<=1;
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 9
490 2 wiebuf_cout[wie_cout] |=1;
491 2 wie_8bit--;
492 2 }
493 1
494 1
495 1 if(!wie_8bit) //8bit 1字节溢出归0,数组指针+1
496 1 {
497 2 wie_cout++;
498 2 wie_8bit=8;
499 2 }
500 1
501 1
502 1 if(wie_cout>=32) //最多接收32字节wiegand信号
503 1 {
504 2 CLR_WIEBUF_COUT;
505 2 }
506 1
507 1 }
508 /******************************************************************************
509 ** 函数: relay_work
510 ** 入参: 无
511 ** 返回: 无
512 ** 说明: 继电器动作
513 ******************************************************************************/
514 void relay_work()
515 {
516 1
517 1 if(ONLY_READER)
518 1 {
519 2 if(TRIG==1) //非外部触发信号
520 2 {
521 3 if(WIE_CK==0) //既进又出
522 3 {
523 4 RELAY_IN=OFF_0;
524 4 RELAY_OUT=OFF_0;
525 4 }
526 3
527 3 else
528 3 {
529 4 if(IN_OUT==1) //根据卡标记动作
530 4 {
531 5 RELAY_IN=OFF_0;
532 5 }
533 4 else
534 4 {
535 5 RELAY_OUT=OFF_0;
536 5 }
537 4 }
538 3
539 3 }
540 2 else //外部触发信号
541 2 {
542 3 if(RELAY_TRIG_STATE==1)
543 3 {
544 4 RELAY_IN=OFF_0; //如果触发的是进门,开进门继电器
545 4 }
546 3 else
547 3 {
548 4 RELAY_OUT=OFF_0;
549 4 }
550 3
551 3 }
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 10
552 2 }
553 1 else
554 1 {
555 2 return; //继电器不动作
556 2 }
557 1 }
558
559
560 /****************************@end@*************************************/
561
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1187 ----
CONSTANT SIZE = 162 ----
XDATA SIZE = ---- 9
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -