?? p87lpc764+萬(wàn)能遙控調(diào)光調(diào)速器.lst
字號(hào):
516 2 ON=0; /*禁止可控硅*/
517 2 IsStudy=1; /*設(shè)置紅外學(xué)習(xí)標(biāo)志*/
518 2 StudyOK=0;
519 2 i=20; /*設(shè)置10s 學(xué)習(xí)時(shí)間*/
520 2 while(!StudyOK){/*等待學(xué)習(xí)完成,Led 閃爍*/
521 3 Led=~Led;
522 3 Delay(500);
523 3
524 3
525 3 if(i--==0) goto NoSt;
526 3 }
527 2 /*學(xué)習(xí)成功*/
528 2 Led=1;
529 2 Delay(100);
530 2 Led=0;
531 2 Delay(100);
532 2 Led=1;
533 2 Delay(100);
534 2 NoSt:
535 2 Led=0;
536 2 IsStudy=0;/*進(jìn)入接收狀態(tài)*/
537 2 StudyOK=0;
538 2 break; /*紅外學(xué)習(xí)*/
539 2 default:
540 2 break;
541 2 }
542 1 FuncCode=0;
543 1 FuncSet=0; /*清除功能設(shè)置標(biāo)志*/
544 1 }
545 void Write_FireAngle()
546 {
547 1 Buf1[0]=Fire_Angle%256;
548 1 Buf1[1]=Fire_Angle/256;
549 1 WriteEE(128,2,Buf1);
550 1 }
551 void Read_Last_FireAngle(void)
C51 COMPILER V7.09 P87LPC764_萬(wàn)能襙控礯筥礯_倨_ 11/13/2006 13:51:42 PAGE 10
552 {
553 1 ReadEE(128,2,Buf1);
554 1 Last_FireAngle=Buf1[0]+Buf1[1]*256;
555 1 }
556 void Write_MaxFireAngle()
557 {
558 1 Buf1[0]=MaxFireAngle%256;
559 1 Buf1[1]=MaxFireAngle/256;
560 1 WriteEE(136,2,Buf1);
561 1 }
562 void Read_MaxFireAngle(void)
563 {
564 1 ReadEE(136,2,Buf1);
565 1
566 1 MaxFireAngle=Buf1[0]+Buf1[1]*256;
567 1 }
568 void WDFeed() /*清看門狗*/
569 {
570 1 WDRST=0X1E;
571 1 WDRST=0XE1;
572 1 }
573 /*三次過零的時(shí)間間隔除于2 即為半周期時(shí)間值*/
574 void Calc_MaxFireAngle()
575 {
576 1 while((CMP1 & 1)==0); /*等待過零*/
577 1 CMP1 &= 0xFE; /*清比較器中斷標(biāo)志*/
578 1 TR0=1; /*啟動(dòng)定時(shí)器*/
579 1 while((CMP1 & 1)==0); /*等待過零*/
580 1 CMP1 &= 0xFE; /*清比較器中斷標(biāo)志*/
581 1 while((CMP1 & 1)==0); /*等待過零*/
582 1 CMP1 &= 0xFE; /*清比較器中斷標(biāo)志*/
583 1 TR0=0; /*關(guān)閉定時(shí)器*/
584 1 MaxFireAngle=(TH0*256+TL0)/2;
585 1 }
586 /*測(cè)量低電平寬度*/
587 unsigned char Get_L_Width()
588 {
589 1 TH1=TL1=0;
590 1 TR1=1; /*啟動(dòng)定時(shí)器*/
591 1 while(INT1!=1);
592 1 TR1=0;
593 1 TL1=(TH1*256+TL1 )/250;
594 1 return(TL1/2);
595 1 }
596 /*測(cè)量高電平寬度*/
597 unsigned char Get_H_Width()
598 {
599 1 TF1=0;
600 1 TH1=TL1=0;
601 1 TR1=1; /*啟動(dòng)定時(shí)器*/
602 1 while(INT1!=0){
603 2 if(TH1>0X20) return(255);/*脈寬約為16ms*/
604 2 /*if(TF1==1) return(255);*/
605 2 }
606 1
607 1
608 1 TR1=0;
609 1 TL1=(TH1*256+TL1 )/250;
610 1 return(TL1/2);
611 1 }
612 /*頁(yè)寫存儲(chǔ)器,Num<=8*/
613 int WriteEE(unsigned char SubAdr,unsigned char Num,unsigned char *Wbuf)
C51 COMPILER V7.09 P87LPC764_萬(wàn)能襙控礯筥礯_倨_ 11/13/2006 13:51:42 PAGE 11
614 {
615 1 unsigned char data i;
616 1 Start(); /*發(fā)送I2C 總線起始條件*/
617 1 if(SendByte(0xa0)!=0) return -1; /* 發(fā)送被控器總線地址*/
618 1 if(SendByte(SubAdr)!=0) return -1; /*發(fā)送寫的地址*/
619 1 for(i=0;i<Num;i++) /*重復(fù)操作直到發(fā)送完最后一個(gè)數(shù)據(jù)*/
620 1 if(SendByte(*(Wbuf+i))!=0) return -1;
621 1 Stop(); /*發(fā)送I2C 總線停止條件*/
622 1 Delay(10); /*延時(shí)10ms,等待數(shù)據(jù)寫完*/
623 1 return 0;
624 1 }
625 /*讀多個(gè)字節(jié)數(shù)據(jù) */
626 int ReadEE(unsigned char SubAdr,unsigned char Num,unsigned char *Rbuf)
627 {
628 1 unsigned char data i;
629 1 Start(); /* 發(fā)送I2C 總線起始條件*/
630 1 if(SendByte(0xa0)!=0) return -1;/*發(fā)送被控器總線寫地址*/
631 1 if(SendByte(SubAdr)!=0) return -1; /*發(fā)送讀首地址*/
632 1 Start(); /*發(fā)送I2C 總線重復(fù)起始條件*/
633 1 if(SendByte(0xa1)!=0) return(-1); /*發(fā)送被控器總線讀地址*/
634 1 if(Num!=1)
635 1 {for(i=0;i<Num-1;i++) *(Rbuf+i)=ReadByte();
636 2 SendACK(); /*發(fā)送應(yīng)答信號(hào)*/
637 2
638 2 *(Rbuf+Num-1)=ReadByte();
639 2 }
640 1 else
641 1 *Rbuf=ReadByte();
642 1 SendNoACK(); /*最后一個(gè)字節(jié),發(fā)送非應(yīng)答信號(hào)*/
643 1 Stop(); /*發(fā)送I2C 總線停止條件*/
644 1 return(0);
645 1 }
646 /*字節(jié)數(shù)據(jù)傳送子程序發(fā)送一個(gè)字節(jié)數(shù)據(jù)或地址給被控器*/
647 int SendByte(unsigned char a)
648 {
649 1 unsigned char data i,j;
650 1 unsigned char bdata Sin;
651 1 Sin=a;
652 1 for(i=0;i<8;i++)
653 1 {
654 2 if((Sin & 0x80)==0)
655 2 SDA=0;
656 2 else
657 2 SDA=1;
658 2 for(j=0;j<2;j++);
659 2 SCL=1; /*置時(shí)鐘線為高通知被控器開始*/
660 2 for(j=0;j<4;j++);/*保證時(shí)鐘高周期大于4 s*/
661 2 SCL=0;
662 2 Sin=Sin<<1;
663 2 }
664 1 for(j=0;j<2;j++);
665 1 SDA=1;
666 1 for(j=0;j<2;j++);
667 1 SCL=1;
668 1 for(j=0;j<2;j++);
669 1 if (SDA==0) {SCL=0;return 0;} /*成功,返回0*/
670 1 for(j=0;j<1;j++);
671 1 SCL=0;
672 1 return -1; /*未收到應(yīng)答,返回-1*/
673 1 }
674 /*數(shù)據(jù)接收子程序從被控器接收一個(gè)字節(jié)數(shù)據(jù)*/
675 unsigned char ReadByte()
C51 COMPILER V7.09 P87LPC764_萬(wàn)能襙控礯筥礯_倨_ 11/13/2006 13:51:42 PAGE 12
676 {
677 1 unsigned char data i,j;
678 1 unsigned char bdata Sin;
679 1 SDA=1;
680 1 for (i=0;i<7;i++)
681 1 {
682 2 SCL=0;
683 2 for(j=0;j<2;j++);
684 2 SCL=1;
685 2 if(SDA==1)
686 2 Sin|=0x01;
687 2 else
688 2 Sin&=0xfe;
689 2 for(j=0;j<2;j++);
690 2 Sin<<=1;
691 2 }
692 1 SCL=0;
693 1 for(j=0;j<2;j++);
694 1 SCL=1;
695 1 if(SDA==1)
696 1 Sin|=0x01;
697 1 else
698 1 Sin&=0xfe;
699 1 for(j=0;j<2;j++);
700 1 return(Sin);
701 1 }
702 /*發(fā)送應(yīng)答位*/
703 void SendACK()
704 {
705 1 unsigned char data j;
706 1 SCL=0;
707 1 for(j=0;j<2;j++);
708 1 SDA=0;
709 1 for(j=0;j<2;j++);
710 1 SCL=1;
711 1 for(j=0;j<4;j++);
712 1 SCL=0;
713 1 }
714 /*發(fā)送非應(yīng)答位*/
715 void SendNoACK()
716 {
717 1 unsigned char data j;
718 1 SCL=0;
719 1 for(j=0;j<2;j++);
720 1 SDA=1;
721 1 for(j=0;j<2;j++);
722 1 SCL=1;
723 1 for(j=0;j<4;j++);
724 1 SCL=0;
725 1 }
726 /*START 啟動(dòng)I2C 總線子程序發(fā)送I2C 起始條件*/
727 void Start(void)
728 {
729 1 unsigned char data i;
730 1 SDA=1; /* 發(fā)送起始條件的數(shù)據(jù)信號(hào)*/
731 1 for (i=0;i<2;i++);
732 1 SCL=1; /*發(fā)送起始條件的時(shí)鐘信號(hào)*/
733 1 for(i=0;i<4;i++) ; /*起始條件建立時(shí)間大于4.7 s*/
734 1 SDA=0; /*發(fā)送起始信號(hào)*/
735 1 for(i=0;i<4;i++); /*起始條件鎖定時(shí)間大于4 s*/
736 1 SCL=0; /*鉗住I2C 總線準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/
737 1 }
C51 COMPILER V7.09 P87LPC764_萬(wàn)能襙控礯筥礯_倨_ 11/13/2006 13:51:42 PAGE 13
738 /*STOP 停止I2C 總線子程序發(fā)送I2C 總線停止條件*/
739 void Stop(void)
740 {
741 1 unsigned char data i;
742 1 SDA=0;
743 1 for(i=0;i<2;i++) ;
744 1 SCL=1;
745 1 for(i=0;i<4;i++)
746 1 SDA=1;
747 1 for(i=0;i<4;i++);
748 1 }
749 /*一次延時(shí)1ms*/
750 void Delay(unsigned int x)
751 {
752 1 unsigned char j;
753 1 while(x--){
754 2 WDRST=0X1E; /*清看門狗*/
755 2 WDRST=0XE1;
756 2 for(j=0;j<120;j++);
757 2 }
758 1 }
759
760
761
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2326 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 76 15
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -