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

📄 cpu_com.lst

📁 keil下ISO7816规则的APDU程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.50   CPU_COM                                                               05/16/2006 17:45:20 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CPU_COM
OBJECT MODULE PLACED IN CPU_COM.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE CPU_COM.c LARGE BROWSE INCDIR(G:\生产许可证北京\朱胜春\WORK\a
                    -pdu_ok\小机器\Cpu_22.1184\;G:\生产许可证北京\朱胜春\WORK\apdu_ok\小机器\Cpu_22.1184\;G:\生产许可证北京\朱胜春\WORK\apdu_
                    -ok\小机器\Cpu_22.1184\) DEBUG OBJECTEXTEND

line level    source

   1          //#include "type.h"
   2          #include "reg51.h"
   3          #include "stdio.h"
   4          #include "stdlib.h"
   5          #include "string.h"
   6          #include "INTRINS.H"
   7          #include "CPU_COM.h"
   8          unsigned char xdata OutData[255] _at_ 0x0200;
   9          void main()
  10          {          
  11   1              unsigned char idata pATR[1],InData[32]={0x05,0xAA,0x55,0x00,0x00,0x08};
  12   1              unsigned char ndata[2] = {0xAA,0x55};
  13   1              //unsigned char idata OutData[64];
  14   1              
  15   1              PLY_APDU();
  16   1              Inttime0();                                     //定时器0初始化
  17   1              com_Open();                                     //打开串口
  18   1      //      SendCom()
  19   1              //cpu_Open();                                   //CPU卡上电并读ATR并把ATR通过串口发送,如果读ATR错误则输出FF
  20   1      //      ICC_INS(&InData[1],OutData,*InData);
  21   1      //      SendChar(0x36);
  22   1                              //ICC_INS:输入数据指针*InData,输入数据长度lnin,输出数据指针*OutData,输出数据长度为*OutData
  23   1      //      if (ICC_INS(&InData[1],OutData,*InData)!=TRUE)
  24   1      //      {
  25   1      //              OutData[0] = 1;
  26   1      //      OutData[1] = 0xff;
  27   1      //      }
  28   1              while(1)
  29   1              {
  30   2                      //SendCom(2,&InData[1]);
  31   2                      if(readCom(InData) == TRUE)
  32   2                      {
  33   3                              if(!memcmp(ndata,InData+1,2))
  34   3                              {
  35   4                                      SendCom(2,"OK");        
  36   4                                      break;
  37   4                              }
  38   3                              else
  39   3                                      SendCom(2,"ER");
  40   3                      }
  41   2                      else
  42   2                              SendCom(2,"ER");
  43   2              }
  44   1              ndata[0]=0xaa;          
  45   1              while(1)
  46   1              {
  47   2                      if(readCom(InData) == TRUE)
  48   2                      {
  49   3                              if(*InData == 1)
  50   3                                      continue;
  51   3                              else
  52   3                              {
  53   4                                      if (ICC_INS(&InData[1],*InData)!=TRUE)
C51 COMPILER V7.50   CPU_COM                                                               05/16/2006 17:45:20 PAGE 2   

  54   4                                      {
  55   5                                              OutData[0] = 1;
  56   5                              OutData[1]=0xff;
  57   5                                      }
  58   4      //                              Extra_guardtime_N = Extra_guardtime_N_bak;
  59   4                      //if(OutData[0]<=64)
  60   4                              SendCom(OutData[0],&OutData[1]);
  61   4                                      //else
  62   4                                              //SendCom((OutData[0]-64),OutData1);
  63   4                              }
  64   3                      }
  65   2                      else
  66   2                      {
  67   3                              OutData[0] = 1;
  68   3                      OutData[1]=0xff;
  69   3                              SendCom(OutData[0],&OutData[1]);
  70   3                      }
  71   2      
  72   2              }
  73   1      
  74   1      }
*** WARNING C280 IN LINE 11 OF CPU_COM.C: 'pATR': unreferenced local variable
  75          //=============初始化定时器================================
  76          void Inttime0()
  77          {
  78   1              TMOD|=0x02;                                                     /*定时器0为模式2(8位自动重装) */
  79   1              TR0=0;                                                          //在发送或接收才开始使用
  80   1              TF0=0;                                                          //清定时器溢出标志
  81   1              TH0=0XA0;                                                       //9600是1000000/9600=104.167微秒104.167*11.0592/12=96  (256-96=0XA0)
  82   1              TL0=TH0;                
  83   1              ET0=1;                                                          //开定时器中断
  84   1              EA=1;                                                           //开CPU中断
  85   1      }
  86          //=========================================================
  87          //=============定时器中断子程序============================
  88          void IntTimer0() interrupt 1
  89          {
  90   1              F_TM=1;                                                         //定时器溢出引起中断,置标志位
  91   1      }
  92          //=========================================================
  93          //=============发送一个字符传入发送数据返回是否发送正确====
  94          //=============返回错误时则启用释放终端====================
  95          unsigned char SendChar(unsigned char ch)
  96          {
  97   1              unsigned char i = 0,bak;                        //p为1的个数
  98   1              unsigned char idata b=0;
  99   1              bit a = 0;
 100   1              //bak = ch;
 101   1              if(CPUCD_Format != 0)
 102   1                      ch = ~ch;
 103   1              bak = ch;
 104   1              if(CPUCD_Format == 0)
 105   1              {
 106   2                      F_TM=0;                                                 //关中断标志
 107   2      start:
 108   2                      BT_SND = 0;                                     //发送起始位
 109   2                      TH0 = 0xB6;
 110   2                      TL0 = 0xB6;
 111   2                      TR0 = 1;
 112   2                      //TIMER0_ENABLE;                                //启动定时器
 113   2                      while(!F_TM);                                   //检测到中断标志后开始发送一个字符(8位)
 114   2                      while(i<8)
C51 COMPILER V7.50   CPU_COM                                                               05/16/2006 17:45:20 PAGE 3   

 115   2                      {
 116   3                              if(ch&1)
 117   3                      {
 118   4                              BT_SND = 1;
 119   4                              a=(~a);
 120   4                      }
 121   3                      else
 122   3                      {
 123   4                              BT_SND = 0;
 124   4                                      a = a; 
 125   4                      }
 126   3                              TH0 = 0xBF;
 127   3                              TIMER0_ENABLE;
 128   3                              F_TM=0;                                         //发送一位之后关标志准备发送下一位
 129   3                              while(!F_TM);
 130   3                      i++;
 131   3                      ch>>=1;
 132   3                      }                                                               //结束位(9+0.268)etu~(10+0.098)etu
 133   2                      if(a)
 134   2                      {
 135   3                              BT_SND = 1;                             //数据位1的个数为偶数则发送0保证数据位和效验1的个数为偶数
 136   3                      }
 137   2                      else
 138   2                      {
 139   3                              BT_SND = 0;                             //数据位1的个数为奇数则发送1保证数据位和效验1的个数为偶数
 140   3                      }
 141   2                      TH0 = 0xAD;
 142   2                      TIMER0_ENABLE;
 143   2                      F_TM=0;
 144   2                      while(!F_TM);
 145   2                      //上面是起始+8位数据+1位校验    //(10+0.098)etu
 146   2                      BT_SND = 1;
 147   2                      TH0 = 0xB2;
 148   2                      TIMER0_ENABLE;
 149   2                      F_TM=0;
 150   2                      while(!F_TM);
 151   2      
 152   2                      TH0 = 0xA5;
 153   2                      TIMER0_ENABLE;                                  //(11+0.135)etu   11etu处检测
 154   2                      if(BT_SND == 0)                                 //如果IC卡有误
 155   2                      {
 156   3                              if(b == 4)
 157   3                                      return FALSE;
 158   3                              F_TM=0;
 159   3                              while(!F_TM);
 160   3      //                      BT_SND = 1;
 161   3                              F_TM=0;
 162   3                              while(!F_TM);
 163   3                              F_TM=0;
 164   3      //                      TH0 = 0xFF;
 165   3      //                      TIMER0_ENABLE;                                  //(11+0.135)etu   11etu处检测
 166   3                              i = 0;
 167   3                              b++;
 168   3                              ch = bak;
 169   3                              goto start;
 170   3                      }
 171   2                      TH0 = 0xB4;
 172   2                      TIMER0_ENABLE;
 173   2                      F_TM=0;
 174   2                      while(!F_TM);
 175   2                  for(i=0;i<Extra_guardtime_N;i++)
 176   2                      {       
C51 COMPILER V7.50   CPU_COM                                                               05/16/2006 17:45:20 PAGE 4   

 177   3                              TH0 = 0xB6;
 178   3                              TIMER0_ENABLE;
 179   3                              F_TM=0;
 180   3                              while(!F_TM);
 181   3                      }
 182   2                      TIMER0_DISABLE;                                 //停止定时器
 183   2                      return TRUE;
 184   2              }
 185   1              else
 186   1              {
 187   2                      F_TM=0;                                                 //关中断标志
 188   2      start1:
 189   2                      BT_SND = 0;                                     //发送起始位
 190   2                      TH0 = 0x54;
 191   2                      TL0 = 0x54;
 192   2                      TR0 = 1;
 193   2                      //TIMER0_ENABLE;                                //启动定时器
 194   2                      while(!F_TM);                                   //检测到中断标志后开始发送一个字符(8位)
 195   2                      while(i<8)
 196   2                      {
 197   3                              if(ch&0x80)
 198   3                      {
 199   4                              BT_SND = 1;
 200   4                              a=(~a);
 201   4                      }
 202   3                      else
 203   3                      {
 204   4                              BT_SND = 0;
 205   4                                      a = a;
 206   4                      }
 207   3                              TH0 = 0x5F;
 208   3                              TIMER0_ENABLE;
 209   3                              F_TM=0;                                         //发送一位之后关标志准备发送下一位
 210   3                              while(!F_TM);
 211   3                      i++;
 212   3                      ch<<=1;
 213   3                      }                                                               //结束位(9+0.268)etu~(10+0.098)etu
 214   2                      if(a)
 215   2                      {
 216   3                              BT_SND = 0;                             //数据位1的个数为偶数则发送0保证数据位和效验1的个数为偶数
 217   3                      }
 218   2                      else
 219   2                      {
 220   3                              BT_SND = 1;                             //数据位1的个数为奇数则发送1保证数据位和效验1的个数为偶数
 221   3                      }
 222   2                      TH0 = 0x4E;
 223   2                      TIMER0_ENABLE;
 224   2                      F_TM=0;
 225   2                      while(!F_TM);
 226   2                                                      //(10+0.098)etu
 227   2                      BT_SND = 1;
 228   2                      TH0 = 0x51;
 229   2                      TIMER0_ENABLE;
 230   2                      F_TM=0;

⌨️ 快捷键说明

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