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

📄 main.lst

📁 EM4095 程序 可以参考下 keil 下编译!
💻 LST
📖 第 1 页 / 共 5 页
字号:
 991   3                      }
 992   2                      if(i>=0xf0)
 993   2                              return;
 994   2                      capture();                                      //hi电平时间
 995   2                      
 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              }
1005   1      
1006   1              check_stat=ERR_EM4469_NEITHER_ACK;
1007   1              for (j=0;j<5;j++)
1008   1              {
1009   2                      if (((j%2)==0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1010   2                      &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)\
1011   2                      &&(capture_time[j+3]>MaxCaptureHalfDateRate)&&(capture_time[j+4]>MaxCaptureHalfDateRate)\
1012   2                      &&(capture_time[j+5]>MaxCaptureHalfDateRate))
1013   2                      {
1014   3                              check_stat = UART_MESSAGE_OK;
1015   3                              break;
1016   3                      }
1017   2                      if (((j%2)==0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1018   2                      &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]<MaxCaptureHalfDateRate)\
1019   2                      &&(capture_time[j+3]<MaxCaptureHalfDateRate)&&(capture_time[j+4]<MaxCaptureHalfDateRate)\
1020   2                      &&(capture_time[j+5]<MaxCaptureHalfDateRate)&&(capture_time[j+6]<MaxCaptureHalfDateRate)\
1021   2                      &&(capture_time[j+7]<MaxCaptureHalfDateRate)&&(capture_time[j+8]>MaxCaptureHalfDateRate))
1022   2                      {
1023   3                              check_stat = ERR_EM4469_NACK;
1024   3                              break;          
1025   3                      }
1026   2              }       
1027   1      
1028   1              captured_bits_count=0;
1029   1              if (check_stat==UART_MESSAGE_OK)
1030   1              {
1031   2                      //解码
1032   2                      for (i=(j+6);;i++)
1033   2                      {
1034   3                              if (capture_time[i]<MaxCaptureHalfDateRate)
1035   3                              {
1036   4                                      if((i%2)==0)    
1037   4                                      {
1038   5                                              store_bit(0);
1039   5                                      }
1040   4                                      else
1041   4                                      {
1042   5                                              store_bit(1);
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 18  

1043   5                                      }
1044   4                                      i++;
1045   4                                      captured_bits_count++;
1046   4                                      if (captured_bits_count>45) //45位数据结构,参考EM4469文档
1047   4                                              break;
1048   4                              }
1049   3                              else if((capture_time[i]>MaxCaptureHalfDateRate) &&(capture_time[i]<MaxCaptureDateRate))
1050   3                              {
1051   4                                      if((i%2)==0)    
1052   4                                      {
1053   5                                              store_bit(1);
1054   5                                      }
1055   4                                      else
1056   4                                      {
1057   5                                              store_bit(0);
1058   5                                      }
1059   4                                      captured_bits_count++;
1060   4                                      if (captured_bits_count>45) //45位数据结构,参考EM4469文档
1061   4                                              break;
1062   4                              }
1063   3                              else  
1064   3                              {
1065   4                                      check_stat=ERR_EM4469_FLOWLINK_ERR;
1066   4                                      break;
1067   4                              }
1068   3                      }
1069   2              }
1070   1      
1071   1              if ((check_stat!=ERR_EM4469_NEITHER_ACK)&&(check_stat!=ERR_EM4469_NACK)&&(check_stat!=ERR_EM4469_FLOWLINK
             -_ERR))
1072   1              {
1073   2                      if (((capture_check&0x10)!=0)||((compute_capture_check&0x0f)!=(capture_check&0x0f)))
1074   2                      {
1075   3                              check_stat=ERR_EM4469_PARITY_ERR;
1076   3                      }
1077   2                      else
1078   2                      {                       //capture_data[4] CRC
1079   3                              if ((capture_data[0]^capture_data[1]^capture_data[2]^capture_data[3])!=capture_data[4])
1080   3                              {
1081   4                                      check_stat=ERR_EM4469_PARITY_ERR;
1082   4                              }
1083   3                              else
1084   3                              {
1085   4                                      check_stat=UART_MESSAGE_OK; //读卡成功
1086   4                              }
1087   3                      }
1088   2              }
1089   1              //trace(capture_time,120);
1090   1              //trace(capture_data,32);
1091   1              for(i=0;i<120;i++)
1092   1              {
1093   2                      capture_time[i]=0xff;
1094   2              }
1095   1      }
1096          
1097          //写卡程序,Manchester解码
1098          void ManchesterWrite(void)
1099          {
1100   1              uchar i,j;
1101   1              ClearCaptureBuffers();
1102   1              captured_bit_count = 0;
1103   1              capture_cnt = 0;
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 19  

1104   1              captured_byte=0;
1105   1              capture_check=0;
1106   1              capture_check_count=0;
1107   1              buffer_capture_check=0;
1108   1              compute_capture_check=0;
1109   1              check_stat=0;
1110   1              TR2 = 0; 
1111   1              TF2=0;      //clear pending interrupts
1112   1              TL2=(uchar)(~maxCaptureTimeLow); TH2=(uchar)((~maxCaptureTimeLow)>>8) ;             //set timer with init
             -ial time
1113   1              currentMaxTimeHi = ~maxCaptureTimeHi;
1114   1              last_capture=~maxCaptureTimeLow; 
1115   1              capture_read_time_data_ptr=capture_time;
1116   1              flag_wait=1;ET2=1;
1117   1      
1118   1              for(i=0;i<0xf0;i++)
1119   1              {
1120   2                      if(DEMOD_OUT == 0)              //等待低电平,超时退出
1121   2                              break;
1122   2              }
1123   1              if(i>=0xf0)
1124   1              {
1125   2                      for(i=0;i<120;i++)
1126   2                      {
1127   3                              capture_time[i]=0xff;
1128   3                      }
1129   2                      return;
1130   2              }
1131   1      
1132   1              for(i=0;i<0xf0;i++)
1133   1              {
1134   2                      if(DEMOD_OUT == 1)              //等待高电平,超时退出
1135   2                              break;
1136   2              }
1137   1              if(i>=0xf0)
1138   1              {
1139   2                      for(i=0;i<120;i++)
1140   2                      {
1141   3                              capture_time[i]=0xff;
1142   3                      }
1143   2                      return;
1144   2              }
1145   1      
1146   1              TR2=1;                     
1147   1              while ( flag_wait )         
1148   1              {
1149   2                      for(i=0;i<0xf0;i++)
1150   2                      {
1151   3                              if(DEMOD_OUT == 0)              //等待低电平,超时退出
1152   3                                      break;
1153   3                      }
1154   2                      if(i>=0xf0)
1155   2                      {
1156   3                              for(i=0;i<120;i++)
1157   3                              {
1158   4                                      capture_time[i]=0xff;
1159   4                              }
1160   3                              return;
1161   3                      }
1162   2      
1163   2                      capture();
1164   2      
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 20  

1165   2                      for(i=0;i<0xf0;i++)
1166   2                      {
1167   3                              if(DEMOD_OUT == 1)              //等待高电平,超时退出
1168   3                                      break;
1169   3                      }
1170   2                      if(i>=0xf0)
1171   2                      {
1172   3                              for(i=0;i<120;i++)
1173   3                              {
1174   4                                      capture_time[i]=0xff;
1175   4                              }
1176   3                              return;
1177   3                      }
1178   2      
1179   2                      capture();
1180   2              }
1181   1      
1182   1      
1183   1              check_stat=ERR_EM4469_NEITHER_ACK;
1184   1              for (j=0;j<5;j++)
1185   1              {
1186   2                      if (((j%2)==0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1187   2                      &&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]<MaxCaptureHalfDateRate)\
1188   2                      &&(capture_time[j+3]<MaxCaptureHalfDateRate)&&(capture_time[j+4]<MaxCaptureHalfDateRate)\
1189   2                      &&(capture_time[j+5]<MaxCaptureHalfDateRate)&&(capture_time[j+6]<MaxCaptureHalfDateRate)\
1190   2                      &&(capture_time[j+7]<MaxCaptureHalfDateRate)&&(capture_time[j+8]>MaxCaptureHalfDateRate))
1191   2                      {
1192   3                              check_stat = ERR_EM4469_NACK;
1193   3                              break;          
1194   3                      }
1195   2              }       
1196   1              if (check_stat != ERR_EM4469_NACK)
1197   1              {
1198   2                      for (j=0;j<76;j++)
1199   2                      {
1200   3                              if (((j%2)!=0)&&(capture_time[j]<MaxCaptureHalfDateRate)\
1201   3                      &&(capture_time[j+1]>MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)\
1202   3                      &&(capture_time[j+3]>MaxCaptureHalfDateRate)&&(capture_time[j+4]>MaxCaptureHalfDateRate))
1203   3                              {
1204   4                                      check_stat = UART_MESSAGE_OK;
1205   4                                      break;
1206   4                              }
1207   3                      }
1208   2              }
1209   1      
1210   1              for(i=0;i<120;i++)
1211   1              {
1212   2                      capture_time[i]=0xff;
1213   2              }
1214   1      }
1215          
1216          
1217          
1218          void ClearCaptureBuffers(void) 
1219          {
1220   1              uchar i;
1221   1              for(i=0; i<CAPTURE_SIZE; i++) 
1222   1              {
1223   2              capture_data[i] = 0;
1224   2              }
1225   1      }
1226          
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 21  

1227          void capture(void)
1228          {
1229   1              uint capt;
1230   1              uint icr = count_module();   
1231   1                
1232   1              capt = icr - last_capture;
1233   1              last_capture = icr;                             
1234   1              *capture_read_time_data_ptr++=capt;             //保存高低电平的时间(以125K的脉冲个数),ptr++
1235   1      }
1236          
1237          
1238          //保

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -