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

📄 main.lst

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