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