📄 stccoinbox.lst
字号:
565
566 void Delay()
567 {
568 1 // {P10=1;_nop_();P10=0;}
569 1 Nop;
570 1 Nop; /*根据晶振频率制定延时时间*/
571 1 }
572 /*
573 void DelaymS(uint time)
574 {
575 Delay_ms=time;
576 while(Delay_ms);
577 }
578 */
579 void delay_20ms() //20ms
580 {
581 1 bDelay20mS=1;
582 1 while(bDelay20mS);
583 1 }
584
585
586 void delay_160ms() //160ms
587 {uchar nCnt;
588 1 for(nCnt=0;nCnt<8;nCnt++)
589 1 {
590 2 bDelay20mS=1;
591 2 while(bDelay20mS);
592 2 }
593 1 }
594
595 /*
596 //延时500ms秒
597
598 void delay_500ms()
599 {
600 uchar nCnt;
601 for(nCnt=0;nCnt<2;nCnt++)
602 delay_160ms();
603 }
604 */
605 //延时1S
606 /*
607 void delay_1s() //1s
608 {
609 bDelay1S=1;
610 }
C51 COMPILER V7.06 STCCOINBOX 11/10/2007 10:37:46 PAGE 11
611 */
612 //延时1S
613 void Start(void)
614 { //EA=0;
615 1 bScl = 1;
616 1 bSda = 1;
617 1 Delay();
618 1 bSda = 0;
619 1 Delay();
620 1 bScl =0;
621 1 }
622 void Stop(void)
623 {
624 1 bSda = 0;
625 1 bScl = 1;
626 1 Delay();
627 1 bSda = 1;
628 1 Delay();
629 1 //EA=1;
630 1 }
631 bit CheckAck()
632 {
633 1 bit bEepromAck ;
634 1 Delay();
635 1 bScl = 1 ;
636 1 Delay();
637 1 bEepromAck = bSda ;
638 1 Delay();
639 1 bScl = 0 ;
640 1 Delay();
641 1 return bEepromAck ;
642 1 }
643 void Ack(void)
644 {
645 1 bSda = 0;
646 1 Delay();
647 1 bScl = 1; //clock:falling edge
648 1 Delay();
649 1 bScl = 0;
650 1 Delay();
651 1 }
652 void NoAck(void)
653 {
654 1 bSda =1;
655 1 Delay();
656 1 bScl = 1;
657 1 Delay();
658 1 bScl = 0;
659 1 Delay();
660 1 }
661
662 /*******************************************************/
663 uchar ReadOneByte()
664 {
665 1 bit bReadBit ;
666 1 uchar nCnt,nTemp ;
667 1 nTemp = 0x00 ;
668 1 for(nCnt=0;nCnt<8;nCnt++)
669 1 {
670 2 nTemp = nTemp<< 1 ;
671 2 Delay();
672 2 bScl = 1; //high level continue for a while ,then read a bit
C51 COMPILER V7.06 STCCOINBOX 11/10/2007 10:37:46 PAGE 12
673 2 Delay();
674 2 bReadBit = bSda;
675 2 bScl = 0;
676 2 if(bReadBit)
677 2 {
678 3 nTemp = nTemp | 0x01 ;
679 3 }
680 2 else
681 2 {
682 3 nTemp = nTemp & 0xfe ;
683 3 }
684 2 }
685 1 return nTemp ;
686 1 }
687 /*******************************************************/
688 void WriteOneByte(uchar nData)
689 {
690 1 uchar nCnt ;
691 1 for(nCnt=0;nCnt<8;nCnt++)
692 1 {
693 2 if((nData & 0x80) == 0x80)
694 2 {
695 3 bSda = 1 ;
696 3 }
697 2 else
698 2 {
699 3 bSda = 0 ;
700 3 }
701 2 Delay();
702 2 bScl = 1;
703 2 Delay();
704 2 bScl = 0;
705 2 Delay();
706 2 nData = nData << 1 ;
707 2 }
708 1 }
709 /*******************************************************/
710 bit WaitWriteEnd()
711 {
712 1 bit bEepromAck;
713 1 unsigned int nCounter;
714 1 nCounter = 0;
715 1 while(1)
716 1 {
717 2 Start();
718 2 WriteOneByte(ReadCommand);
719 2 bSda = 1;
720 2 bEepromAck = CheckAck();
721 2 if(bEepromAck ==0)
722 2 {
723 3 ReadOneByte();
724 3 NoAck();
725 3 return TRUE;
726 3 }
727 2 nCounter++;
728 2 if(nCounter>=0xfff)
729 2 {
730 3 return FALSE;
731 3 }
732 2 }
733 1 }
734 /*******************************************************/
C51 COMPILER V7.06 STCCOINBOX 11/10/2007 10:37:46 PAGE 13
735
736 bit ReadFromRom(uchar * nData,uchar nAddress,uchar nNum)
737 {
738 1 bit bEepromAck ;
739 1 uchar nCnt;
740 1 Start();
741 1 //WP=0;
742 1 WriteOneByte(WriteCommand);
743 1 //WP=1;
744 1 bSda = 1 ;
745 1 bEepromAck = CheckAck();
746 1 if(bEepromAck==1) return FALSE ;
747 1 //WP=0;
748 1 WriteOneByte(nAddress);
749 1 //WP=1;
750 1 bSda = 1 ;
751 1 bEepromAck = CheckAck();
752 1 if(bEepromAck==1) return FALSE ;
753 1 Start();
754 1 //WP=0;
755 1 WriteOneByte(ReadCommand);
756 1 //WP=1;
757 1 bSda = 1 ;
758 1 bEepromAck = CheckAck();
759 1 if(bEepromAck==1) return FALSE ;
760 1 for(nCnt=0;nCnt<nNum;nCnt++)
761 1 {
762 2 nData[nCnt] = ReadOneByte();
763 2 if(nCnt!=(nNum-1))
764 2 {
765 3 Ack();
766 3 bSda = 1 ;
767 3 }
768 2 else
769 2 {
770 3 NoAck();
771 3 }
772 2 }
773 1 Stop();
774 1 return TRUE ;
775 1
776 1
777 1 }
778 /*
779 uchar ByteReadFromRom(uchar nAddress)
780 {
781 bit bEepromAck ;
782 uchar nData;
783 Start();
784 //WP=0;
785 WriteOneByte(WriteCommand);
786 //WP=1;
787 bSda = 1 ;
788 bEepromAck = CheckAck();
789 if(bEepromAck==1) return FALSE ;
790 //WP=0;
791 WriteOneByte(nAddress);
792 //WP=1;
793 bSda = 1 ;
794 bEepromAck = CheckAck();
795 if(bEepromAck==1) return FALSE ;
796 Start();
C51 COMPILER V7.06 STCCOINBOX 11/10/2007 10:37:46 PAGE 14
797 //WP=0;
798 WriteOneByte(ReadCommand);
799 //WP=1;
800 bSda = 1 ;
801 bEepromAck = CheckAck();
802 if(bEepromAck==1) return FALSE ;
803 nData = ReadOneByte();
804 NoAck();
805 Stop();
806 return nData ;
807 }
808 */
809 bit WriteToRom(uchar * nData,uchar nAddress,uchar nNum)
810 {
811 1 bit bEepromAck ;
812 1 uchar nCnt;
813 1 Start();
814 1 WriteOneByte(WriteCommand);
815 1 bSda = 1 ;
816 1 bEepromAck = CheckAck();
817 1 if(bEepromAck == 1) return FALSE ;
818 1 WriteOneByte(nAddress);
819 1 bSda = 1 ;
820 1 bEepromAck = CheckAck();
821 1 if(bEepromAck == 1) return FALSE ;
822 1 for(nCnt=0;nCnt<nNum;nCnt++)
823 1 {
824 2 WriteOneByte(nData[nCnt]) ;
825 2 bSda = 1 ;
826 2 bEepromAck = CheckAck();
827 2 if(bEepromAck == 1) return FALSE ;
828 2 }
829 1 Stop();
830 1 if((WaitWriteEnd() == FALSE))
831 1 {
832 2 return FALSE;
833 2 }
834 1 //Delay100us(200); //在STOP命令发出后,24C02开始写,在约20MS
835 1 return TRUE;
836 1 }
837 /********************************************************/
838 bit ByteWriteToRom(uchar nAddress,uchar nData)
839 {
840 1 bit bEepromAck;
841 1 Start();
842 1 WriteOneByte(WriteCommand);
843 1 bSda = 1;
844 1 bEepromAck = CheckAck();
845 1 if(bEepromAck ==1) return FALSE;
846 1 WriteOneByte(nAddress);
847 1 bSda = 1;
848 1 bEepromAck = CheckAck();
849 1 if(bEepromAck ==1) return FALSE;
850 1 WriteOneByte(nData);
851 1 bSda = 1;
852 1 bEepromAck = CheckAck();
853 1 if(bEepromAck ==1) return FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -