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

📄 sim.lst

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 LST
📖 第 1 页 / 共 5 页
字号:
 259   3                              if(dat&0x40){TX[10]=1;len++;v++;}
 260   3                              if(dat&0x80){TX[11]=1;len++;}
 261   3                      }
 262   2                      if(i==v && TX[11]==1)   //TD3存在并且已经收到
 263   2                      {
 264   3                              if(f==0 && ((dat&0x0F)!=0))
 265   3                              {//TCK存在
 266   4                                      len++;
 267   4                                      f=1;
 268   4                              }
 269   3                              if(dat&0x10){TX[12]=1;len++;}           //判断TA4-TD4是否存在
 270   3                              if(dat&0x20){TX[13]=1;len++;}
 271   3                              if(dat&0x40){TX[14]=1;len++;}
 272   3                              if(dat&0x80){TX[15]=1;len++;}
 273   3                      }
 274   2                      i++;
 275   2                      if(i>=len)break;
 276   2              }
 277   1              if(k!=0)SimWaitTime=k;
 278   1      
 279   1              switch(RxdBuf[1])
 280   1              {
 281   2                      case 0x7A:      SimType=SimTianYu;              break;
 282   2                      case 0x7D:      SimType=SimWoQi;                break;
 283   2                      case 0x7F:      SimType=SimWoQi100K;    break;
 284   2                      default :       SimType= 0;                             break;
 285   2              }
 286   1      //      RxdLen=len;             //test
 287   1              if(f!=0)
 288   1              {//TCK存在
 289   2                      k=0;
 290   2                      len-=1;
 291   2                      for(i=1;i<len;i++)
 292   2                              k^=RxdBuf[i];
 293   2                      if(k!=RxdBuf[len])
 294   2                      {
 295   3                              ErrorHint("复位应答TCK错误!",0x9100);
 296   3                      }
 297   2              }
 298   1              k=12;
 299   1              while(--k)
 300   1              {//The answer to reset is complete 12 etu after the leading edge of the last character.
 301   2                      i=104;
 302   2                      while(--i);
 303   2              }
C51 COMPILER V8.01   SIM                                                                   03/28/2006 09:48:50 PAGE 6   

 304   1      //      UartTxd(1,&SimGuardTime);
 305   1              return 1;
 306   1      }
 307          
 308          uchar SimRstCold(uchar ch)
 309          {
 310   1              uint i;
 311   1      
 312   1              SimDeactive(ch);
 313   1              UART0_Mod3_Timer1_9600;         //禁止多机通信,8位数据+奇偶效验位
 314   1              SimActive(ch);
 315   1              i=SimATR();
 316   1              if(i==0)
 317   1              {
 318   2                      if(ch==0)ErrorHint("复位失败,请检查税控卡!",0x110);
 319   2                      if(ch==1)ErrorHint("复位失败,请检查用户卡!",0x111);
 320   2                      else     ErrorHint("复位失败,请检查管理卡!",0x112);
 321   2              }
 322   1      //      return SimBpsSet(19200,ch);
 323   1              return 1;
 324   1      }
 325          
 326          uint ProcedureByte(uchar ins,uchar ch)
 327          {
 328   1              uchar k,ack;
 329   1      //      uchar x;
 330   1              gyt2 mp;
 331   1      
 332   1              if(ch == 0)SIM0RXD;
 333   1              else    SIM1RXD;
 334   1              while(1)
 335   1              {
 336   2                      ack=SimRxdByte();
 337   2                      if(SimTimeOut==1)return 0xFFFC;
 338   2                      if(ack!=0x60)break;
 339   2              }
 340   1              k=ack&0xF0;
 341   1              if(k==0x60 || k==0x90)
 342   1              {
 343   2                      mp.str[0]=ack;
 344   2                      mp.str[1]=SimRxdByte();
 345   2                      if(SimTimeOut==1)return 0xFFFD;
 346   2                      SimTimeOut=0xFF;
 347   2                      return mp.dat;
 348   2              }
 349   1              else
 350   1              {
 351   2                      k=ack^ins;
 352   2                      if(k==0xFF || k==0xFE)  //仅传输下一个字节,编程电压不处理
 353   2                              return 2;
 354   2                      if(k==0 || k==1)                //传输所有余下数据,编程电压不处理
 355   2                              return 1;
 356   2                      ErrorHint("过程字节不正确",k);                  //过程字节不正确必须报错
 357   2              }
 358   1      }
 359          
 360          uint SimCmd(uchar tlen,uchar ch)
 361          {
 362   1              gyt2 *state;
 363   1              uint k;
 364   1              uchar x,dat,rnum,tnum,ins;
 365   1              uchar lc,le,rlen;
C51 COMPILER V8.01   SIM                                                                   03/28/2006 09:48:50 PAGE 7   

 366   1      
 367   1              if(tlen>5)
 368   1              {//lc 存在
 369   2                      lc=TxdBuf[4];
 370   2                      if(tlen>(lc+5))
 371   2                      {//le存在,但是不发送le
 372   3                              le=TxdBuf[lc+5];
 373   3                              tlen-=1;
 374   3                      }
 375   2                      else
 376   2                      {//le不存在
 377   3                              le=0;
 378   3                      }
 379   2              }
 380   1              else //tlen==5,tlen不可能小于5
 381   1              {//le、lc都不存在,或者le=0需要返回最大数据,或者仅le存在,都只需要接受SW1、SW2
 382   2                      lc=0;
 383   2                      le=TxdBuf[4];           
 384   2              }
 385   1              rlen=le+2;              //SW1+SW2
 386   1              UART0_Mod3_Timer1_9600;
 387   1      //      UART0_Mod3_Timer2_19200;
 388   1              tnum=0;
 389   1              SimIns=0;
 390   1              ins=TxdBuf[1];
 391   1      //      SIMCS;                                          //cs6   
 392   1              TI=0;RI=0;
 393   1              while(1)
 394   1              {
 395   2                      if(ch == 0)SIM0TXD;
 396   2                      else    SIM1TXD;
 397   2                      SimTxdByte(TxdBuf[tnum++]);
 398   2                      if(tnum==5 && lc!=0)
 399   2                      {
 400   3                              k=ProcedureByte(ins,ch);                //获得过程字节
 401   3                              if(SimTimeOut==0xFF || SimTimeOut==1)return k;
 402   3                              if(k!=2 && k!=1)return k;
 403   3                              if(k==2)
 404   3                              {
 405   4                                      while(1)
 406   4                                      {
 407   5                                              if(ch == 0)SIM0TXD;
 408   5                                              else    SIM1TXD;
 409   5                                              SimTxdByte(TxdBuf[tnum++]);
 410   5                                              if(tnum>=tlen)break;
 411   5                                              k=ProcedureByte(ins,ch);
 412   5                                              if(SimTimeOut==0xFF || SimTimeOut==1)return k;                                  
 413   5                                              if(k!=2 && k!=1)return k;
 414   5                                              if(k==1)break;                  //传输所有余下数据                                      
 415   5                                      }
 416   4                              }
 417   3                      }       
 418   2                      if(tnum>=tlen)break;
 419   2              }
 420   1              if(ch == 0)SIM0RXD;
 421   1              else    SIM1RXD;
 422   1              rnum=0;tnum=0;
 423   1              x=rlen-2;
 424   1      //      if(le!=0)
 425   1              {
 426   2                      k=ProcedureByte(ins,ch);
 427   2                      if(SimTimeOut==0xFF || SimTimeOut==1)return k;
C51 COMPILER V8.01   SIM                                                                   03/28/2006 09:48:50 PAGE 8   

 428   2                      if(k!=2 && k!=1)return k;
 429   2                      if(k==2)SimIns=1;               //仅传输下一个字节
 430   2      //              if(k==1)                                //传输所有余下数据
 431   2              }       
 432   1              while(1)
 433   1              {               
 434   2                      dat=SimRxdByte();
 435   2                      if(SimTimeOut==1)
 436   2                      {
 437   3                              return 0xFFFF;
 438   3                      }
 439   2                      if(SimIns && rnum<x)
 440   2                      {
 441   3                              tnum++;
 442   3                              if((tnum%2)==0)continue;
 443   3                      }
 444   2                      if(dat==0x60 && rnum==x)continue;
 445   2                      RxdBuf[rnum++]=dat;
 446   2                      if(rnum>=rlen)break;
 447   2              }
 448   1              state = &RxdBuf[rlen-2];
*** WARNING C182 IN LINE 448 OF SIM.C: pointer to different objects
 449   1              return state->dat;
 450   1      }
 451          
 452          //|---------------------------------------------------------------------------------|
 453          //|税控卡和用户卡所支持的波特率:                                                                                                       |
 454          //|9600           3571200/9600=372            FI=DI=1        FF1011FE          11FE     |
 455          //|19200          3579000/19200=186=372/2     FI=1 DI=2      FF1012FD          12FD     |
 456          //|38400          3579000/38400=94=372/4      FI=1 DI=3      FF1013FC          13FC     |
 457          //|56000          3579000/56000=64=512/8      FI=9 DI=4      FF10947B          947B     |
 458          //|首先检测卡片的复位信息,根据复位信息确定,以9600速率发送激活指令ff 10 94+这三        |
 459          //|个字节的单字节异或值。卡片应该以9600返回确认值,确认值字节应该为后两个字节如 |
 460          //|947B等表明速率已经修改成功,必须以修改后的速率进行通讯。若返回值不是后两个字 |
 461          //|节,说明速率修改不成功。                                                                                                             |
 462          //|1/Baud=etu=F/(D*fs)                                                                                                                          |
 463          //|---------------------------------------------------------------------------------|
 464          /*
 465          uint SimBpsSet(uint bps,uchar card)
 466          {
 467                  uint statecode,m;
 468                  gyt2 *xp;
 469                  TxdBuf[0]=0xFF;
 470                  TxdBuf[1]=0x10;
 471                  switch(bps)
 472                  {
 473                          case 9600:
 474                                                  TxdBuf[2]=0x11;
 475                                                  TxdBuf[3]=0xFE;
 476                                                  break;
 477                          case 19200:
 478                                                  TxdBuf[2]=0x12;
 479                                                  TxdBuf[3]=0xFD;
 480                                                  break;
 481          
 482                          case 38400:
 483                                                  TxdBuf[2]=0x13;
 484                                                  TxdBuf[3]=0xFC;
 485                                                  break;
 486          
 487                          case 56000:
 488                                                  TxdBuf[2]=0x94;
C51 COMPILER V8.01   SIM                                                                   03/28/2006 09:48:50 PAGE 9   

 489                                                  TxdBuf[3]=0x7B;
 490                                                  break;
 491          
 492                          default:
 493                                                  TxdBuf[2]=0x11;
 494                                                  TxdBuf[3]=0xFE;
 495                                                  break;
 496                  }
 497                  xp = &TxdBuf[0];
 498                  m = xp->dat;
 499                  TxdLen=0xFF;
 500                  statecode=SimCmd(4,card);
 501                  xp = &RxdBuf[0];
 502                  if(xp->dat==m)
 503                  {
 504                          SimEtu=52;
 505                          return 1;
 506                  }
 507                  else
 508                          ErrorHint("Bps Set Error!",statecode);
 509          }
 510          */
 511          //----------------------------------------------------------------------------------
 512          uint GetResponse(uchar le,uchar card)
 513          {
 514   1              uint statecode;
 515   1      
 516   1              TxdBuf[0]=0x00;
 517   1              TxdBuf[1]=0xC0;
 518   1              TxdBuf[2]=0x00;
 519   1              TxdBuf[3]=0x00;
 520   1              TxdBuf[4]=le;
 521   1              statecode=SimCmd(5,card);
 522   1              return statecode;
 523   1      }
 524          

⌨️ 快捷键说明

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