⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 hs4905非接触卡读卡机芯片读t5557 的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -