📄 main.lst
字号:
991 1 TR2=1; //
992 1 while ( flag_wait ) //接收
993 1 {
994 2 for(i=0;i<0xf0;i++)
995 2 {
996 3 if(DEMOD_OUT == 0)
997 3 break;
998 3 }
999 2 if(i>=0xf0)
1000 2 return;
1001 2 capture(); //hi电平时间
1002 2
1003 2 for(i=0;i<0xf0;i++)
1004 2 {
1005 3 if(DEMOD_OUT == 1)
1006 3 break;
1007 3 }
1008 2 if(i>=0xf0)
1009 2 return;
1010 2 capture(); //low电平时间
1011 2 }
1012 1
1013 1 check_stat=ERR_EM4469_NEITHER_ACK;
1014 1 for (j=0;j<5;j++)
1015 1 {
1016 2 if (((j%2)==0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1017 2 &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)\
1018 2 &&(capture_time[j+3]>MaxCaptureHalfDateRate)&&(capture_time[j+4]>MaxCaptureHalfDateRate)\
1019 2 &&(capture_time[j+5]>MaxCaptureHalfDateRate))
1020 2 {
1021 3 check_stat = UART_MESSAGE_OK;
1022 3 break;
1023 3 }
1024 2 if (((j%2)==0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1025 2 &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]<MaxCaptureHalfDateRate)\
1026 2 &&(capture_time[j+3]<MaxCaptureHalfDateRate)&&(capture_time[j+4]<MaxCaptureHalfDateRate)\
1027 2 &&(capture_time[j+5]<MaxCaptureHalfDateRate)&&(capture_time[j+6]<MaxCaptureHalfDateRate)\
1028 2 &&(capture_time[j+7]<MaxCaptureHalfDateRate)&&(capture_time[j+8]>MaxCaptureHalfDateRate))
1029 2 {
1030 3 check_stat = ERR_EM4469_NACK;
1031 3 break;
1032 3 }
1033 2 }
1034 1
1035 1 captured_bits_count=0;
1036 1 if (check_stat==UART_MESSAGE_OK)
1037 1 {
1038 2 //解码
1039 2 for (i=(j+6);;i++)
1040 2 {
1041 3 if (capture_time[i]<MaxCaptureHalfDateRate)
1042 3 {
C51 COMPILER V7.50 MAIN 06/07/2006 18:04:04 PAGE 18
1043 4 if((i%2)==0)
1044 4 {
1045 5 store_bit(0);
1046 5 }
1047 4 else
1048 4 {
1049 5 store_bit(1);
1050 5 }
1051 4 i++;
1052 4 captured_bits_count++;
1053 4 if (captured_bits_count>45) //45位数据结构,参考EM4469文档
1054 4 break;
1055 4 }
1056 3 else if((capture_time[i]>MaxCaptureHalfDateRate) &&(capture_time[i]<MaxCaptureDateRate))
1057 3 {
1058 4 if((i%2)==0)
1059 4 {
1060 5 store_bit(1);
1061 5 }
1062 4 else
1063 4 {
1064 5 store_bit(0);
1065 5 }
1066 4 captured_bits_count++;
1067 4 if (captured_bits_count>45) //45位数据结构,参考EM4469文档
1068 4 break;
1069 4 }
1070 3 else
1071 3 {
1072 4 check_stat=ERR_EM4469_FLOWLINK_ERR;
1073 4 break;
1074 4 }
1075 3 }
1076 2 }
1077 1
1078 1 if ((check_stat!=ERR_EM4469_NEITHER_ACK)&&(check_stat!=ERR_EM4469_NACK)&&(check_stat!=ERR_EM4469_FLOWLINK
-_ERR))
1079 1 {
1080 2 if (((capture_check&0x10)!=0)||((compute_capture_check&0x0f)!=(capture_check&0x0f)))
1081 2 {
1082 3 check_stat=ERR_EM4469_PARITY_ERR;
1083 3 }
1084 2 else
1085 2 { //capture_data[4] CRC
1086 3 if ((capture_data[0]^capture_data[1]^capture_data[2]^capture_data[3])!=capture_data[4])
1087 3 {
1088 4 check_stat=ERR_EM4469_PARITY_ERR;
1089 4 }
1090 3 else
1091 3 {
1092 4 check_stat=UART_MESSAGE_OK; //读卡成功
1093 4 }
1094 3 }
1095 2 }
1096 1 //trace(capture_time,120);
1097 1 //trace(capture_data,32);
1098 1 for(i=0;i<120;i++)
1099 1 {
1100 2 capture_time[i]=0xff;
1101 2 }
1102 1 }
1103
C51 COMPILER V7.50 MAIN 06/07/2006 18:04:04 PAGE 19
1104 //写卡程序,Manchester解码
1105 void ManchesterWrite(void)
1106 {
1107 1 uchar i,j;
1108 1 ClearCaptureBuffers();
1109 1 captured_bit_count = 0;
1110 1 capture_cnt = 0;
1111 1 captured_byte=0;
1112 1 capture_check=0;
1113 1 capture_check_count=0;
1114 1 buffer_capture_check=0;
1115 1 compute_capture_check=0;
1116 1 check_stat=0;
1117 1 TR2 = 0;
1118 1 TF2=0; //clear pending interrupts
1119 1 TL2=(uchar)(~maxCaptureTimeLow); TH2=(uchar)((~maxCaptureTimeLow)>>8) ; //set timer with init
-ial time
1120 1 currentMaxTimeHi = ~maxCaptureTimeHi;
1121 1 last_capture=~maxCaptureTimeLow;
1122 1 capture_read_time_data_ptr=capture_time;
1123 1 flag_wait=1;ET2=1;
1124 1
1125 1 for(i=0;i<0xf0;i++)
1126 1 {
1127 2 if(DEMOD_OUT == 0) //等待低电平,超时退出
1128 2 break;
1129 2 }
1130 1 if(i>=0xf0)
1131 1 {
1132 2 for(i=0;i<120;i++)
1133 2 {
1134 3 capture_time[i]=0xff;
1135 3 }
1136 2 return;
1137 2 }
1138 1
1139 1 for(i=0;i<0xf0;i++)
1140 1 {
1141 2 if(DEMOD_OUT == 1) //等待高电平,超时退出
1142 2 break;
1143 2 }
1144 1 if(i>=0xf0)
1145 1 {
1146 2 for(i=0;i<120;i++)
1147 2 {
1148 3 capture_time[i]=0xff;
1149 3 }
1150 2 return;
1151 2 }
1152 1
1153 1 TR2=1;
1154 1 while ( flag_wait )
1155 1 {
1156 2 for(i=0;i<0xf0;i++)
1157 2 {
1158 3 if(DEMOD_OUT == 0) //等待低电平,超时退出
1159 3 break;
1160 3 }
1161 2 if(i>=0xf0)
1162 2 {
1163 3 for(i=0;i<120;i++)
1164 3 {
C51 COMPILER V7.50 MAIN 06/07/2006 18:04:04 PAGE 20
1165 4 capture_time[i]=0xff;
1166 4 }
1167 3 return;
1168 3 }
1169 2
1170 2 capture();
1171 2
1172 2 for(i=0;i<0xf0;i++)
1173 2 {
1174 3 if(DEMOD_OUT == 1) //等待高电平,超时退出
1175 3 break;
1176 3 }
1177 2 if(i>=0xf0)
1178 2 {
1179 3 for(i=0;i<120;i++)
1180 3 {
1181 4 capture_time[i]=0xff;
1182 4 }
1183 3 return;
1184 3 }
1185 2
1186 2 capture();
1187 2 }
1188 1
1189 1
1190 1 check_stat=ERR_EM4469_NEITHER_ACK;
1191 1 for (j=0;j<5;j++)
1192 1 {
1193 2 if (((j%2)==0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1194 2 &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]<MaxCaptureHalfDateRate)\
1195 2 &&(capture_time[j+3]<MaxCaptureHalfDateRate)&&(capture_time[j+4]<MaxCaptureHalfDateRate)\
1196 2 &&(capture_time[j+5]<MaxCaptureHalfDateRate)&&(capture_time[j+6]<MaxCaptureHalfDateRate)\
1197 2 &&(capture_time[j+7]<MaxCaptureHalfDateRate)&&(capture_time[j+8]>MaxCaptureHalfDateRate))
1198 2 {
1199 3 check_stat = ERR_EM4469_NACK;
1200 3 break;
1201 3 }
1202 2 }
1203 1 if (check_stat != ERR_EM4469_NACK)
1204 1 {
1205 2 for (j=0;j<76;j++)
1206 2 {
1207 3 if (((j%2)!=0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1208 3 &&(capture_time[j+1]>MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)\
1209 3 &&(capture_time[j+3]>MaxCaptureHalfDateRate)&&(capture_time[j+4]>MaxCaptureHalfDateRate))
1210 3 {
1211 4 check_stat = UART_MESSAGE_OK;
1212 4 break;
1213 4 }
1214 3 }
1215 2 }
1216 1
1217 1 for(i=0;i<120;i++)
1218 1 {
1219 2 capture_time[i]=0xff;
1220 2 }
1221 1 }
1222
1223
1224
1225 void ClearCaptureBuffers(void)
1226 {
C51 COMPILER V7.50 MAIN 06/07/2006 18:04:04 PAGE 21
1227 1 uchar i;
1228 1 for(i=0; i<CAPTURE_SIZE; i++)
1229 1 {
1230 2 capture_data[i] = 0;
1231 2 }
1232 1 }
1233
1234 void capture(void)
1235
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -