📄 driver.lst
字号:
459 //end
460 IRSendEnd_InterruptControl();
461 }
462 */
463 /* ======================================= */
464
465 void IRSend_nByteData(Byte n,Byte *pbuffer)
466 {
467 1 Byte checkSum;
468 1 Byte i;
469 1 IRSendStart_InterruptControl();
470 1 checkSum = CalculateCheckSum(n, pbuffer);
471 1 //begin
472 1 IRSendLeadingCode();
473 1 IRSendByte(0xAD);
474 1 IRSendByte(0x52);
475 1 IRSendByte(n);
476 1 for(i = 0; i < n; i++)
477 1 {
478 2 IRSendByte(*pbuffer);
479 2 pbuffer++;
480 2 }
481 1 IRSendByte(checkSum);
482 1 IRSendStop();
483 1 //end
484 1 IRSendEnd_InterruptControl();
485 1 }
486
487
488 /* ======================================= */
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 9
489 void IRSend_16ByteData(Byte *pbuffer)
490 {
491 1 Byte checkSum;
492 1 IRSendStart_InterruptControl();
493 1 checkSum = CalculateCheckSum(16, pbuffer);
494 1 //begin
495 1 IRSendLeadingCode();
496 1 IRSendByte(0xAE);
497 1 IRSendByte(0x51);
498 1 IRSendByte(*pbuffer);
499 1 IRSendByte(*(pbuffer + 1));
500 1 IRSendByte(*(pbuffer + 2));
501 1 IRSendByte(*(pbuffer + 3));
502 1 IRSendByte(*(pbuffer + 4));
503 1 IRSendByte(*(pbuffer + 5));
504 1 IRSendByte(*(pbuffer + 6));
505 1 IRSendByte(*(pbuffer + 7));
506 1 IRSendByte(*(pbuffer + 8));
507 1 IRSendByte(*(pbuffer + 9));
508 1 IRSendByte(*(pbuffer + 10));
509 1 IRSendByte(*(pbuffer + 11));
510 1 IRSendByte(*(pbuffer + 12));
511 1 IRSendByte(*(pbuffer + 13));
512 1 IRSendByte(*(pbuffer + 14));
513 1 IRSendByte(*(pbuffer + 15));
514 1 IRSendByte(checkSum);
515 1 IRSendStop();
516 1 //end
517 1 IRSendEnd_InterruptControl();
518 1 }
519 /* ======================================= */
520 void IRSend_IrEnd(void)
521 {
522 1 IRSendStart_InterruptControl();
523 1 //begin
524 1 IRSendLeadingCode();
525 1 IRSendByte(0xAF);
526 1 IRSendByte(0x50);
527 1 IRSendStop();
528 1 //end
529 1 IRSendEnd_InterruptControl();
530 1 }
531 /* ======================================= */
532
533 static void IRSendLeadingCode(void)
534 {
535 1 IRModulateCarrierStart();
536 1 IRSendDelay(DELAY_9MS);
537 1 PIN_IR_OUT = 1;
538 1 IRSendDelay(DELAY_4D5MS);
539 1 }
540 /* ======================================= */
541 static void IRSendByte(Byte value)
542 {
543 1 Byte i;
544 1 for(i = 0; i < 8; i++)
545 1 {
546 2 if(value & BIT0)
547 2 {
548 3 IRModulateCarrierStart();
549 3 IRSendDelay(DELAY_560US);
550 3 PIN_IR_OUT = 1;
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 10
551 3 IRSendDelay(DELAY_1685US);
552 3 }
553 2 else
554 2 {
555 3 IRModulateCarrierStart();
556 3 IRSendDelay(DELAY_560US);
557 3 PIN_IR_OUT = 1;
558 3 IRSendDelay(DELAY_565US);
559 3 }
560 2 value >>= 1;
561 2 }
562 1 }
563 /* ======================================= */
564 static void IRSendStop(void)
565 {
566 1 IRModulateCarrierStart();
567 1 IRSendDelay(DELAY_560US);
568 1 PIN_IR_OUT = 1;
569 1 }
570 /* ======================================= */
571
572 static void IRModulateCarrierStart(void)
573 {
574 1 ET0 = 1;
575 1 TR0 = 0;
576 1 TL0 = LOWBYTE(ISR_TIME0_38K_RELOAD_VALUE);
577 1 TH0 = HIGHBYTE(ISR_TIME0_38K_RELOAD_VALUE);
578 1 TR0 = 1;
579 1 bIrOutPinStatus = 0;
580 1 PIN_IR_OUT = 0;
581 1 }
582 /* ======================================= */
583
584 static void IRSendDelay(Byte delayType)
585 {
586 1 // bIrSendTimer1Use = TRUE;
587 1 ucIrSendDelayType = delayType;
588 1 TR1 = 0;
589 1 switch(ucIrSendDelayType)
590 1 {
591 2 case DELAY_9MS:
592 2 TL1 = LOWBYTE(ISR_TIME_9MS_RELOAD_VALUE);
593 2 TH1 = HIGHBYTE(ISR_TIME_9MS_RELOAD_VALUE);
594 2 break;
595 2 case DELAY_4D5MS:
596 2 TL1 = LOWBYTE(ISR_TIME_4D5MS_RELOAD_VALUE);
597 2 TH1 = HIGHBYTE(ISR_TIME_4D5MS_RELOAD_VALUE);
598 2 break;
599 2 case DELAY_1685US:
600 2 TL1 = LOWBYTE(ISR_TIME_1685US_RELOAD_VALUE);
601 2 TH1 = HIGHBYTE(ISR_TIME_1685US_RELOAD_VALUE);
602 2 break;
603 2 case DELAY_565US:
604 2 TL1 = LOWBYTE(ISR_TIME_565US_RELOAD_VALUE );
605 2 TH1 = HIGHBYTE(ISR_TIME_565US_RELOAD_VALUE );
606 2 break;
607 2 case DELAY_560US:
608 2 TL1 = LOWBYTE(ISR_TIME_560US_RELOAD_VALUE );
609 2 TH1 = HIGHBYTE(ISR_TIME_560US_RELOAD_VALUE );
610 2 break;
611 2 case DELAY_125US:
612 2 TL1 = LOWBYTE(ISR_TIME_125US_RELOAD_VALUE );
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 11
613 2 TH1 = HIGHBYTE(ISR_TIME_125US_RELOAD_VALUE );
614 2 break;
615 2 default:
616 2 return;
617 2 }
618 1 TR1 = 1;
619 1 while(ucIrSendDelayType != DELAY_FINISH) ;
620 1 TR1 = 0;
621 1 TR0 = 0;
622 1 ET0 = 0;
623 1 ucIrSendDelayType = DELAY_NONE;
624 1 // bIrSendTimer1Use = FALSE;
625 1 }
626 /* ======================================= */
627 void IR_CheckLeadingHander(void)
628 {
629 1 Word irTimer;
630 1 if(ucIrDetectStatus == IR_CHECK_LEADING)
631 1 {
632 2 irTimer = (TH1<<8) + TL1;
633 2 if((irTimer < IR_TIME_7MS) && (INT1 == 1))
634 2 {
635 3 ucIrDetectStatus = IR_STANDBY;
636 3 }
637 2 }
638 1 }
639 /* ======================================= */
640 static void I2CStart_InterruptControl(void)
641 {
642 1 EX1 = 0;
643 1 ET0 = 0;
644 1 ET1 = 0;
645 1 EKBI = 0;
646 1 EI2C = 1;
647 1 }
648 /* ======================================= */
649 static void I2CEnd_InterruptControl(void)
650 {
651 1 while(!g_bI2cOk) ;
652 1 Delay1ms(10);
653 1 EX1 = 1;
654 1 ET1 = 1;
655 1 EI2C = 0;
656 1 }
657 /* ======================================= */
658 static void IRSendStart_InterruptControl(void)
659 {
660 1 Delay1ms(200);
661 1 EX1 = 0;
662 1 EI2C = 0;
663 1 EKBI = 0;
664 1 }
665 /* ======================================= */
666 static void IRSendEnd_InterruptControl(void)
667 {
668 1 EX1 = 1;
669 1 }
670 /* ======================================= */
671
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 DRIVER 10/19/2006 09:37:29 PAGE 12
CODE SIZE = 1437 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 20
IDATA SIZE = 19 ----
BIT SIZE = 8 ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -