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

📄 main.lst

📁 EM4095开发板配套软件
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -