📄 stccoinboxnew.lst
字号:
858 3 }
859 2 }
860 1 Stop();
861 1 EA=1;
862 1 return TRUE ;
863 1
864 1
865 1 }
866 /*
867 uchar ByteReadFromRom(uchar nAddress)
868 {
869 bit bEepromAck ;
870 uchar nData;
871 Start();
872 //WP=0;
873 WriteOneByte(WriteCommand);
874 //WP=1;
875 bSda = 1 ;
876 bEepromAck = CheckAck();
877 if(bEepromAck==1) return FALSE ;
878 //WP=0;
879 WriteOneByte(nAddress);
880 //WP=1;
881 bSda = 1 ;
882 bEepromAck = CheckAck();
883 if(bEepromAck==1) return FALSE ;
884 Start();
885 //WP=0;
886 WriteOneByte(ReadCommand);
887 //WP=1;
888 bSda = 1 ;
889 bEepromAck = CheckAck();
890 if(bEepromAck==1) return FALSE ;
891 nData = ReadOneByte();
892 NoAck();
893 Stop();
894 return nData ;
895 }
896 */
897 bit WriteToRom(uchar * nData,uchar nAddress,uchar nNum)
898 {
899 1 bit bEepromAck ;
900 1 uchar nCnt;
901 1 EA=0;
902 1 Start();
903 1 WriteOneByte(WriteCommand);
904 1 bSda = 1 ;
905 1 bEepromAck = CheckAck();
906 1 if(bEepromAck == 1) return FALSE ;
907 1 WriteOneByte(nAddress);
908 1 bSda = 1 ;
909 1 bEepromAck = CheckAck();
910 1 if(bEepromAck == 1) return FALSE ;
911 1 for(nCnt=0;nCnt<nNum;nCnt++)
912 1 {
913 2 WriteOneByte(nData[nCnt]) ;
914 2 bSda = 1 ;
C51 COMPILER V8.05a STCCOINBOXNEW 01/26/2008 08:39:50 PAGE 16
915 2 bEepromAck = CheckAck();
916 2 if(bEepromAck == 1) return FALSE ;
917 2 }
918 1 Stop();
919 1
920 1 if((WaitWriteEnd() == FALSE))
921 1 {
922 2 EA=1;
923 2 return FALSE;
924 2 }
925 1 //Delay100us(200); //在STOP命令发出后,24C02开始写,在约20MS
926 1 EA=1;
927 1 return TRUE;
928 1 }
929 /********************************************************/
930 bit ByteWriteToRom(uchar nAddress,uchar nData)
931 {
932 1 bit bEepromAck;
933 1 EA=0;
934 1 Start();
935 1 WriteOneByte(WriteCommand);
936 1 bSda = 1;
937 1 bEepromAck = CheckAck();
938 1 if(bEepromAck ==1) return FALSE;
939 1 WriteOneByte(nAddress);
940 1 bSda = 1;
941 1 bEepromAck = CheckAck();
942 1 if(bEepromAck ==1) return FALSE;
943 1 WriteOneByte(nData);
944 1 bSda = 1;
945 1 bEepromAck = CheckAck();
946 1 if(bEepromAck ==1) return FALSE;
947 1 Stop();
948 1 if((WaitWriteEnd() == FALSE))
949 1 {EA=1;
950 2 return FALSE;
951 2 }
952 1 EA=1;
953 1 //Delay100us(100);
954 1 return TRUE;
955 1 }
956 /////////////////////////////////////////////////////////
957
958 /********************************************
959 内部函数,输出ACK ,每个字节传输完成,输出ack=0,结束读书据,ack=1;
960 ********************************************/
961 /*
962 void WriteACK(uchar ack)
963 {
964 bSda=ack;
965 Delay();
966 bScl=1;
967 Delay();
968 bScl=0;
969 }
970 */
971 /********************************************
972 内部函数,等待ACK
973 ********************************************/
974 /*
975 void WaitACK()
976 { uchar errtime=20;
C51 COMPILER V8.05a STCCOINBOXNEW 01/26/2008 08:39:50 PAGE 17
977 bSda=1;
978 Delay(); //读ACK
979 bScl=1;
980 Delay();
981 while(bSda)
982 { errtime--;
983 if(!errtime) Stop();
984 }
985 bScl=0;
986 Delay();
987 }
988 */
989 /********************************************
990 内部函数.输出数据字节
991 入口:B=数据
992 ********************************************/
993 /*
994 void writebyte(uchar wdata)
995 {
996 uchar nCnt;
997 for(nCnt=0;nCnt<8;nCnt++)
998 {
999 if(wdata&0x80) bSda=1;
1000 else bSda=0;
1001 wdata<<=1;
1002 bScl=1;
1003 Delay();
1004 bScl=0;
1005 }
1006 WaitACK(); //I2C器件或通讯出错,将会退出I2C通讯
1007 }
1008
1009 */
1010 /********************************************
1011 内部函数.输入数据
1012 出口:B
1013 ********************************************/
1014 /*
1015 uchar Readbyte()
1016 {
1017 uchar nCnt,bytedata;
1018 bSda=1;
1019 for(nCnt=0;nCnt<8;nCnt++)
1020 {
1021 bScl=1;
1022 bytedata<<=1;
1023 bytedata|=bSda;
1024 bScl=0;
1025 Delay();
1026 }
1027 return(bytedata);
1028 }
1029 */
1030 /********************************************
1031 输出数据->pcf8563
1032 ********************************************/
1033 /*
1034 void writeData(uchar address,uchar mdata)
1035 {
1036 Start();
1037 WriteOneByte(0xa2); //写命令//
1038 WriteOneByte(address); //写地址//
C51 COMPILER V8.05a STCCOINBOXNEW 01/26/2008 08:39:50 PAGE 18
1039 WriteOneByte(mdata); //写数据//
1040 Stop();
1041 }
1042 */
1043 void writeData(uchar address,uchar mdata)
1044 {bit bEepromAck ;
1045 1 EA=0;
1046 1 Start();
1047 1 WriteOneByte(0xa2);
1048 1 bSda = 1;
1049 1 bEepromAck = CheckAck();
1050 1 WriteOneByte(address);
1051 1 bSda = 1;
1052 1 bEepromAck = CheckAck();
1053 1 WriteOneByte(mdata);
1054 1 bSda = 1;
1055 1 bEepromAck = CheckAck();
1056 1 Stop();
1057 1 EA=1;
1058 1 }
1059
1060
1061
1062 /********************************************
1063 输入数据<-pcf8563
1064 ********************************************/
1065 uchar ReadData(uchar address) /*单字节*/
1066 { uchar rdata;
1067 1 bit bEepromAck ;
1068 1 Start();
1069 1 WriteOneByte(0xa2); /*写命令*/
1070 1 bSda = 1 ;
1071 1 bEepromAck = CheckAck();
1072 1 if(bEepromAck==1) return FALSE ;
1073 1 WriteOneByte(address); /*写地址*/
1074 1 bSda = 1 ;
1075 1 bEepromAck = CheckAck();
1076 1 if(bEepromAck==1) return FALSE ;
1077 1 Start();
1078 1 WriteOneByte(0xa3); /*读命令*/
1079 1 bSda = 1 ;
1080 1 bEepromAck = CheckAck();
1081 1 if(bEepromAck==1) return FALSE ;
1082 1 rdata=ReadOneByte();
1083 1 NoAck();
1084 1 Stop();
1085 1 return(rdata);
1086 1 }
1087 void ReadData1(uchar address,uchar count,uchar * buff) /*多字节*/
1088 { bit bEepromAck;
1089 1 uchar nCnt;
1090 1 Start();
1091 1 WriteOneByte(0xa2); /*写命令*/
1092 1 bSda = 1 ;
1093 1 bEepromAck = CheckAck();
1094 1 if(bEepromAck==1) return ;//FALSE;
1095 1 WriteOneByte(address); /*写地址*/
1096 1 bSda = 1 ;
1097 1 bEepromAck = CheckAck();
1098 1 if(bEepromAck==1) return;// FALSE;
1099 1 Start();
1100 1 //WP=0;
C51 COMPILER V8.05a STCCOINBOXNEW 01/26/2008 08:39:50 PAGE 19
1101 1 WriteOneByte(0xa3); /*读命令*/
1102 1 bSda = 1 ;
1103 1 bEepromAck = CheckAck();
1104 1 if(bEepromAck==1) return;// FALSE;
1105 1 //Start();
1106 1 for(nCnt=0;nCnt<count;nCnt++)
1107 1 {
1108 2 buff[nCnt]=ReadOneByte();
1109 2 if(nCnt!=count-1)
1110 2 {
1111 3 Ack();
1112 3 bSda = 1 ;
1113 3 }
1114 2 else
1115 2 {
1116 3 NoAck();
1117 3 }
1118 2 }
1119 1 Stop();
1120 1 }
1121
1122
1123 /********************************************
1124 内部函数,读入时间到内部缓冲区
1125 ********************************************/
1126 void P8563_Read()
1127 { uchar idata time[7];
1128 1 ReadData1(0x02,0x07,time);
1129 1 g8563_Store[0]=time[0]&0x7f;//&0x7f; /*秒*/
1130 1 g8563_Store[1]=time[1]&0x7f;//time[1]&0x7f; /*分*/
1131 1 g8563_Store[2]=time[2]&0x3f; /*小时*/
1132 1 g8563_Store[3]=time[3]&0x3F; /*日*/
1133 1 g8563_Store[4]=time[4]&0x07; /*星期*/
1134 1 g8563_Store[5]=time[5]&0x1F; /*月*/
1135 1 g8563_Store[6]=time[6]&0xFF; /*年*/
1136 1 }
1137 /********************************************
1138 读入时间到内部缓冲区----外部调用
1139 ********************************************/
1140 void P8563_gettime()
1141 {
1142 1 P8563_Read();
1143 1 if(g8563_Store[0]==0)
1144 1 P8563_Read(); /*如果为秒=0,为防止时间变化,再读一次*/
1145 1 }
1146 /********************************************
1147 写时间修改值
1148 ********************************************/
1149 void P8563_settime()
1150 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -