📄 main.lst
字号:
1007 2 b_edge = 0;
1008 2 j=j+4;
1009 2 }
1010 1 else if((capture_time[j+2]>(halfDataRate*2+8))&&(capture_time[j+2]<(halfDataRate*3+8)))
1011 1 {
1012 2 //bit_begin = 0;
1013 2 store_bit(1);
1014 2 b_edge = 1;
1015 2 j=j+3;
1016 2 }
1017 1 else
1018 1 {
1019 2 check_stat=0xf2;
1020 2 return;
1021 2 }
1022 1
1023 1 captured_bits_count=1;
1024 1 captured_bits_count++;
1025 1 if (check_stat==UART_MESSAGE_OK)
1026 1 {
1027 2 //解码
1028 2 for (i=0;i<150;i++)
1029 2 {
1030 3 if (capture_time[j]<MaxCaptureHalfDateRate)
1031 3 {
1032 4 if((i%2)==0)
1033 4 {
1034 5 store_bit(b_edge);
1035 5 }
1036 4 else
1037 4 {
1038 5 store_bit(!b_edge);
1039 5 }
1040 4 i++;
1041 4 j++;
1042 4 captured_bits_count++;
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 18
1043 4 if (captured_bits_count>64) //32位数据结构
1044 4 break;
1045 4 }
1046 3 else if((capture_time[j]>MaxCaptureHalfDateRate) &&(capture_time[j]<MaxCaptureDateRate))
1047 3 {
1048 4 if((i%2)==0)
1049 4 {
1050 5 store_bit(!b_edge);
1051 5 }
1052 4 else
1053 4 {
1054 5 store_bit(b_edge);
1055 5 }
1056 4 captured_bits_count++;
1057 4 if (captured_bits_count>64) //45位数据结构
1058 4 break;
1059 4 }
1060 3 else
1061 3 {
1062 4 check_stat=0xf3;
1063 4 break;
1064 4 }
1065 3 j++;
1066 3 }
1067 2 }
1068 1 for(i=0;i<150;i++) //2006-5-13 14:19
1069 1 {
1070 2 capture_time[i]=0xff;
1071 2 }
1072 1
1073 1 //trace(capture_time,120);
1074 1 //trace(capture_data,32);
1075 1
1076 1 }
1077
1078 //写卡程序,Manchester解码
1079 void ManchesterWrite(void)
1080 {
1081 1 uchar i,j;
1082 1 ClearCaptureBuffers();
1083 1 captured_bit_count = 0;
1084 1 capture_cnt = 0;
1085 1 captured_byte=0;
1086 1 capture_check=0;
1087 1 capture_check_count=0;
1088 1 buffer_capture_check=0;
1089 1 compute_capture_check=0;
1090 1 check_stat=0;
1091 1 TR2 = 0;
1092 1 TF2=0; //clear pending interrupts
1093 1 TL2=(uchar)(~maxCaptureTimeLow); TH2=(uchar)((~maxCaptureTimeLow)>>8) ; //set timer with init
-ial time
1094 1 currentMaxTimeHi = ~maxCaptureTimeHi;
1095 1 last_capture=~maxCaptureTimeLow;
1096 1 capture_read_time_data_ptr=capture_time;
1097 1 flag_wait=1;ET2=1;
1098 1
1099 1 // for(i=0;i<0xf0;i++)
1100 1 // {
1101 1 // if(DEMOD_OUT == 0) //等待低电平,超时退出
1102 1 // break;
1103 1 // }
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 19
1104 1 // if(i>=0xf0)
1105 1 // {
1106 1 // for(i=0;i<120;i++)
1107 1 // {
1108 1 // capture_time[i]=0xff;
1109 1 // }
1110 1 // return;
1111 1 // }
1112 1 //
1113 1 // for(i=0;i<0xf0;i++)
1114 1 // {
1115 1 // if(DEMOD_OUT == 1) //等待高电平,超时退出
1116 1 // break;
1117 1 // }
1118 1 // if(i>=0xf0)
1119 1 // {
1120 1 // for(i=0;i<120;i++)
1121 1 // {
1122 1 // capture_time[i]=0xff;
1123 1 // }
1124 1 // return;
1125 1 // }
1126 1
1127 1 TR2=1;
1128 1 while ( flag_wait )
1129 1 {
1130 2 for(i=0;i<0xf0;i++)
1131 2 {
1132 3 if(DEMOD_OUT == 0) //等待低电平,超时退出
1133 3 break;
1134 3 }
1135 2 if(i>=0xf0)
1136 2 {
1137 3 for(i=0;i<120;i++)
1138 3 {
1139 4 capture_time[i]=0xff;
1140 4 }
1141 3 return;
1142 3 }
1143 2
1144 2 capture();
1145 2
1146 2 for(i=0;i<0xf0;i++)
1147 2 {
1148 3 if(DEMOD_OUT == 1) //等待高电平,超时退出
1149 3 break;
1150 3 }
1151 2 if(i>=0xf0)
1152 2 {
1153 3 for(i=0;i<120;i++)
1154 3 {
1155 4 capture_time[i]=0xff;
1156 4 }
1157 3 return;
1158 3 }
1159 2
1160 2 capture();
1161 2 }
1162 1
1163 1
1164 1 check_stat=ERR_EM4469_NEITHER_ACK;
1165 1
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 20
1166 1 for (j=0;j<10;j++)
1167 1 {
1168 2 if(((halfDataRate*2+8)<capture_time[j])&&(capture_time[j]<(halfDataRate*3+8))
1169 2 &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)
1170 2 &&(capture_time[j+2]<(halfDataRate*3+8)))
1171 2 break;
1172 2 }
1173 1 if(j==5)
1174 1 {
1175 2 check_stat = 0xf1;
1176 2 return;
1177 2 }
1178 1
1179 1 check_stat = UART_MESSAGE_OK;
1180 1 for(i=0;i<120;i++)
1181 1 {
1182 2 capture_time[i]=0xff;
1183 2 }
1184 1 }
1185
1186
1187
1188 void ClearCaptureBuffers(void)
1189 {
1190 1 uchar i;
1191 1 for(i=0; i<CAPTURE_SIZE; i++)
1192 1 {
1193 2 capture_data[i] = 0;
1194 2 }
1195 1 }
1196
1197 void capture(void)
1198 {
1199 1 uint capt;
1200 1 uint icr = count_module();
1201 1
1202 1 capt = icr - last_capture;
1203 1 last_capture = icr;
1204 1 *capture_read_time_data_ptr++=capt; //保存高低电平的时间(以125K的脉冲个数),ptr++
1205 1 }
1206
1207
1208 //保存解码数据
1209 void store_bit(bit b)
1210 {
1211 1 if(b==1)
1212 1 captured_byte = captured_byte|(0x80>>captured_bit_count);
1213 1 if (captured_bit_count==7)
1214 1 {
1215 2 capture_data[capture_cnt++] = captured_byte;
1216 2 captured_byte=0;
1217 2 captured_bit_count = 0;
1218 2 }
1219 1 else captured_bit_count++;
1220 1 }
1221
1222 uint count_module(void)
1223 {
1224 1 do
1225 1 {
1226 2 count_timer2.bytes.high2 = TH2;
1227 2 count_timer2.bytes.low2 = TL2;
C51 COMPILER V7.50 MAIN 08/14/2006 15:15:34 PAGE 21
1228 2 }while(count_timer2.bytes.high2 != TH2);
1229 1 return count_timer2.word;
1230 1 }
1231
1232 //读取本DEMO读卡器的软件版本,硬件版本,日期等信息
1233 /*
1234 void ReadStatusToPC(void)
1235 {
1236 tx_buff[0]=0x02;
1237 tx_buff[1]=0x08;
1238 tx_buff[2]=0xfd;
1239 tx_buff[3]=0x00;
1240 tx_buff[4]=READER_RELEASE;
1241 tx_buff[5]=READER_DATE | ((READER_MONTH & 0x07) << 5);
1242 tx_buff[6]=(READER_MONTH >> 3) | (READER_YEAR << 1);
1243 tx_buff[7]=READER_FAMILY;
1244 tx_buff[8]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]);
1245 tx_buff[9]=0x03;
1246 trace(tx_buff,10);
1247 }
1248 */
1249
1250 //从串口发送数据出去
1251 void trace(uchar *str,uchar len)
1252 {
1253 1 uint i;
1254 1 MYTI = 0;
1255 1 for(i=0;i<len;i++)
1256 1 {
1257 2 myputchar(*str);
1258 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -