📄 t100.lst
字号:
569 2 Set_SCL_High; /* make sure two line is release */
570 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
571 2 { }; /* Delay 12us */
572 2
573 2 Set_SDA_Low;
574 2 for(ix = 0; ix < TWD_LONG_TIME; ix++)
575 2 { }; /* Delay 12us */
576 2
577 2 if((SCL_High)&&(SDA_Low))
578 2 break;
579 2 }
580 1
581 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
582 1 { }; /* Delay 12us */
583 1 }
584
585 //----------------------------------------
586 // P_Condition for TWD protocol
587 //----------------------------------------
588 void StopCondition(void)
589 {
590 1 uCHAR ix;
591 1 uCHAR cTWtrytime=0;
592 1
593 1 Set_SDA_Low;
594 1 Set_SCL_High;
595 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
596 1 { }; /* delay 12us */
597 1
598 1 while(SCL_Low && ++cTWtrytime)
599 1 { };
600 1
601 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
602 1 { }; /* delay 12us */
603 1
604 1 Set_SDA_High;
605 1 for(ix = 0; ix < TWD_SHORT_TIME; ix++)
606 1 { }; /* delay 12us */
607 1 EA=1;
608 1 }
609
610 //--------------------------------------------------
611 // Send_Byte
612 // Send a byte to master with a acknowledge bit
C51 COMPILER V7.06 T100 09/21/2005 18:16:31 PAGE 11
613 //--------------------------------------------------
614 uCHAR Send_Byte(uCHAR cData)
615 {
616 1 uCHAR ix, j, cAcknowledge;
617 1 uCHAR cTWtrytime=0;
618 1
619 1 cAcknowledge = 0;
620 1
621 1 for(ix = 0; ix < 8; ix++)
622 1 {
623 2 Set_SCL_Low;
624 2 for(j = 0; j < TWD_SHORT_TIME; j++)
625 2 { };
626 2
627 2 if(cData&0x80)Set_SDA_High;
628 2 else Set_SDA_Low;
629 2
630 2 cData<<=1;
631 2
632 2 for(j = 0; j < TWD_SHORT_TIME; j++)
633 2 { };
634 2
635 2 Set_SCL_High;
636 2 while(SCL_Low && ++cTWtrytime)
637 2 { };
638 2
639 2 for(j = 0; j < TWD_SHORT_TIME; j++)
640 2 { };
641 2 }
642 1 for(j = 0; j < TWD_SHORT_TIME; j++)
643 1 { };
644 1
645 1 Set_SCL_Low;
646 1 for(j = 0; j < TWD_SHORT_TIME; j++)
647 1 { };
648 1
649 1 Set_SDA_High; /* release data line for acknowledge */
650 1 for(j = 0; j < TWD_SHORT_TIME; j++)
651 1 { };
652 1
653 1 Set_SCL_High; /* Send a clock for Acknowledge */
654 1 while(SCL_Low)
655 1 { };
656 1 for(j = 0; j < TWD_SHORT_TIME; j++)
657 1 { };
658 1
659 1 if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
660 1 Set_SCL_Low; /* Finish Acknoledge */
661 1 for(j = 0; j < TWD_SHORT_TIME; j++)
662 1 { };
663 1
664 1 return(cAcknowledge);
665 1 }
666
667 //--------------------------------------------------
668 // Read_Byte
669 // Read a byte from master with a acknowledge bit
670 //--------------------------------------------------
671 uCHAR Read_Byte(uCHAR cNum)
672 {
673 1 uCHAR ix, j;
674 1 uCHAR cRetval=0;
C51 COMPILER V7.06 T100 09/21/2005 18:16:31 PAGE 12
675 1
676 1 for(ix=0;ix<8;ix++){
677 2 Set_SCL_High;
678 2 while(SCL_Low){};
679 2 for(j=0;j<TWD_SHORT_TIME;j++){};
680 2 cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ; // MSB First
681 2 Set_SCL_Low;
682 2 }
683 1
684 1 if(cNum==1)
685 1 Set_SDA_High;
686 1 else
687 1 Set_SDA_Low;
688 1 //SDA = (cNum==1) 1:0;
689 1 Set_SCL_High;
690 1 while(SCL_Low){};
691 1 for(j = 0; j < TWD_SHORT_TIME; j++)
692 1 { };
693 1
694 1 Set_SCL_Low;
695 1
696 1 Set_SDA_High;
697 1 for(j = 0; j < TWD_SHORT_TIME; j++)
698 1 { };
699 1
700 1 return cRetval;
701 1 }
702 uCHAR I2CReadByte(uCHAR cAddr, uCHAR cReg)
703 {
704 1 uCHAR cTemp;
705 1
706 1 StartCondition();
707 1 Send_Byte(cAddr);
708 1 Send_Byte(cReg);
709 1 StartCondition();
710 1 Send_Byte(cAddr|0x01);
711 1 cTemp=Read_Byte(1);
712 1 StopCondition();
713 1
714 1 return cTemp;
715 1 }
716 uCHAR I2CWriteByte(uCHAR cAddr,uCHAR cReg,uCHAR cData)
717 {
718 1 StartCondition();
719 1 Send_Byte(cAddr);
720 1 Send_Byte(cReg);
721 1 Send_Byte(cData);
722 1 StopCondition();
723 1 return 0;
724 1 }
725 void I2CWriteTbl(char *pString)
726 {
727 1 uCHAR cAddr,cReg,cNum0,cNum1,cINC;
728 1 while(*pString != EOT)
729 1 {
730 2 cAddr=*pString++;
731 2 cNum0=*pString++;
732 2 while(cNum0)
733 2 {
734 3 cReg=*pString++;
735 3 cNum1=*pString++;
736 3 cNum0-=(cNum1+2);
C51 COMPILER V7.06 T100 09/21/2005 18:16:31 PAGE 13
737 3 if(cNum1!=1)
738 3 {
739 4 cINC=*pString++;
740 4 cNum1-=1;
741 4 }
742 3 while(cNum1--)
743 3 {
744 4 I2CWriteByte(cAddr,cReg,*pString++);
745 4 cReg+=cINC;
746 4 }
747 3 }
748 2 }
749 1 }
750
751 uCHAR twdWr_Burst_A(uCHAR cReg)
752 {
753 1 StartCondition();
754 1 if(!Send_Byte(TW100))
755 1 {
756 2 if(!Send_Byte(cReg))
757 2 {
758 3 return(0); //
759 3 }
760 2 }
761 1 return(1); //
762 1 }
763
764 void twdWr_Burst_D(uCHAR cData)
765 {
766 1 uCHAR ix;
767 1
768 1 for(ix = 0; ix < 8; ix++)
769 1 {
770 2 Set_SCL_Low;
771 2 if(cData&0x80)Set_SDA_High;
772 2 else Set_SDA_Low;
773 2 cData<<=1;
774 2 Set_SCL_High;
775 2 }
776 1 Set_SCL_Low;
777 1 Set_SDA_High; /* release data line for acknowledge */
778 1 Set_SCL_High; /* Send a clock for Acknowledge */
779 1 // if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
780 1 Set_SCL_Low; /* Finish Acknoledge */
781 1
782 1 // return(cAcknowledge);
783 1
784 1 }
785
786 /*void twdWr_Burst_DQ(uCHAR cData)
787 {
788 uCHAR ix;
789 //uCHAR cAcknowledge;
790 // uCHAR cTWtrytime=0;
791 // cAcknowledge = 0;
792
793 for(ix = 0; ix < 8; ix++)
794 {
795 Set_SCL_Low;
796 if(cData&0x1)Set_SDA_High;
797 else Set_SDA_Low;
798 cData>>=1;
C51 COMPILER V7.06 T100 09/21/2005 18:16:31 PAGE 14
799 Set_SCL_High;
800 }
801 Set_SCL_Low;
802 Set_SDA_High; // release data line for acknowledge
803 Set_SCL_High; // Send a clock for Acknowledge
804 // if(SDA_High) cAcknowledge = 1; // No Acknowledge
805 Set_SCL_Low; // Finish Acknoledge
806
807 // return(cAcknowledge);
808
809 }*/
810
811
812
813 void twdWr_Burst_P(void)
814 {
815 1 StopCondition();
816 1 }
817
818 /*void twdDelay(uWORD wLoops)
819 {
820 uWORD wTemp;
821
822 while (wLoops--) {
823 wTemp = 1000/6; // one loop below takes about 11 us
824 while (wTemp--);
825 }
826 }
827 */
828
829 // OSD config register Write
830 void OSDCfgWr(uCHAR index,uCHAR dat)
831 {
832 1 I2CWriteByte(TW100,OSD_CFG_INDEX,index);
833 1 I2CWriteByte(TW100,OSD_CFG_DATA,dat);
834 1 }
835
836 //*****************************************************
837 bit Filter13(bit le)
838 {
839 1 bit r;
840 1 r=INT1;
841 1 if(le==1)
842 1 {
843 2 _nop_();
844 2 _nop_();
845 2 _nop_();
846 2 r&=INT1;
847 2 _nop_();
848 2 _nop_();
849 2 _nop_();
850 2 r&=INT1;
851 2 }
852 1 else
853 1 {
854 2 _nop_();
855 2 _nop_();
856 2 _nop_();
857 2 r|=INT1;
858 2 _nop_();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -