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