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

📄 sle4442.lst

📁 Linux 系统中
💻 LST
📖 第 1 页 / 共 2 页
字号:
 218          修    改:                             日期:
 219          ***********************************************************************/
 220          void BreakOperate(void)
 221          {
 222   1           IC_CLK = 0;
 223   1           IC_RST = 0;
 224   1           IC_IO  = 0;
 225   1           Delay5us();
 226   1           IC_RST = 1;
 227   1           IC_IO  = 1;
 228   1           Delay5us();
 229   1           IC_RST = 0;
 230   1           Delay5us();
 231   1      }
 232          /*********************************************************************  
 233          
 234          函 数 名: ReadByte()
 235          功    能: 从SLE4442读一个字节
 236          说    明: (内部函数)
 237          调    用: 
 238          全局变量:
 239          入口参数: 无
 240          出口参数:无
 241          返 回 值: uchar
C51 COMPILER V6.23a  SLE4442                                                               08/23/2003 10:33:26 PAGE 5   

 242          设    计:zhaojunjie                   日期:2002-04-24
 243          修    改:                             日期:
 244          ***********************************************************************/
 245          uchar ReadByte(void)
 246          {
 247   1          uchar i,ch;
 248   1          ch = 0;
 249   1          for (i = 8; i > 0; i--)
 250   1          {
 251   2              IC_CLK = 0;
 252   2              ch = ch >> 1;           //从低位读起 
 253   2              if((uchar)IC_IO)
 254   2                  ch |= 0x80;
 255   2              Delay5us();
 256   2              IC_CLK = 1;
 257   2              Delay5us();
 258   2          }
 259   1          return ch;
 260   1      }
 261          /*********************************************************************  
 262          
 263          函 数 名: WriteByte()
 264          功    能: 往SLE4442写一个字节
 265          说    明: (内部函数)
 266          调    用: 
 267          全局变量:
 268          入口参数: uchar
 269          出口参数:无
 270          返 回 值: 无
 271          设    计:zhaojunjie                   日期:2002-04-24
 272          修    改:                             日期:
 273          ***********************************************************************/
 274          void WriteByte(uchar ch)
 275          {
 276   1          uchar i;
 277   1          for(i = 8; i > 0; i--)
 278   1          {
 279   2              IC_CLK = 0;
 280   2              IC_IO = (bit)(ch & 0x01);     
 281   2              Delay5us();
 282   2              IC_CLK = 1;
 283   2              Delay10us();
 284   2              ch = ch >> 1;                 //右移一位
 285   2          }
 286   1      }
 287          /*********************************************************************  
 288          
 289          函 数 名: ReadMode()
 290          功    能: 连续输入i(=<255)个字节,存放到以pt开头的内部单元中,必须在某一读数据命令模式之后使用
 291          说    明: (内部函数)
 292          调    用: 
 293          全局变量:
 294          入口参数: pt: 起始地址, count: 数据个数
 295          出口参数:无
 296          返 回 值: 无
 297          设    计:zhaojunjie                   日期:2002-04-24
 298          修    改:                             日期:
 299          *********************************************************************/
 300          void ReadMode(uchar idata *pt,uchar count)
 301          {
 302   1          IC_CLK=0;
 303   1          Delay5us();
C51 COMPILER V6.23a  SLE4442                                                               08/23/2003 10:33:26 PAGE 6   

 304   1          do
 305   1          {
 306   2              *pt = ReadByte();    //读入一个字节
 307   2              pt++;                //指针加一
 308   2          }while(--count);             //计数器减一,判断
 309   1      }
 310          /*********************************************************************  
 311          
 312          函 数 名: ProcessMode()
 313          功    能: 处理模式,开始处理模式后,卡片将输入口拉低,处理完后输入口变成高电平
 314          说    明: (内部函数)
 315          调    用: 
 316          全局变量:
 317          入口参数: 无
 318          出口参数:无
 319          返 回 值: 无
 320          设    计:zhaojunjie                   日期:2002-04-24
 321          修    改:                             日期:
 322          *********************************************************************/
 323          void ProcessMode(void)
 324          {
 325   1          uint i;
 326   1          IC_CLK = 0;
 327   1          Delay5us();    
 328   1          IC_IO  = 0;
 329   1          for (i = 255; i > 0; i--)
 330   1          {
 331   2              IC_CLK = 1;
 332   2              Delay5us();
 333   2              IC_CLK = 0;
 334   2              Delay5us();
 335   2          }
 336   1          IC_IO  = 1;
 337   1      }
 338          /*********************************************************************  
 339          
 340          函 数 名: Verify()
 341          功    能: 校验密码
 342          说    明: 
 343          调    用: 
 344          全局变量:
 345          入口参数: 指向存放密码的内部直接寻址RAM地址,
 346                     密码:BCD 码,从低往高放,比如:114086  *pt = 0x11 *pt+1 = 0x40 *pt+2 = 0x86
 347          出口参数:无
 348          返 回 值: 成功返回1,失败返回0,卡片已锁也返回0
 349          设    计:zhaojunjie                   日期:2002-04-24
 350          修    改:                             日期:
 351          *********************************************************************/
 352          bit Verify(uchar idata *pt)
 353          {
 354   1           uchar idata temp[4];                //暂存4字节的保密区内容
 355   1           uchar i;
 356   1      
 357   1           SendComm(RSM_COMM,0xff,0xff);        //读密码存储区的命令字,第2,3个参数在此命令中被忽略
 358   1           ReadMode(temp, 4);                   //读出
 359   1           if((temp[0] & 0x07) != 0)            //第一字节是错误计数器,如果错误计数器为0,直接退出
 360   1           {
 361   2               if((temp[0] & 0x07)==0x07)     // 00000111
 362   2                      i = 0x06;
 363   2               else if((temp[0] & 0x07)==0x06)// 00000110 
 364   2                      i = 0x04;
 365   2               else if((temp[0] & 0x07)==0x04)// 00000100
C51 COMPILER V6.23a  SLE4442                                                               08/23/2003 10:33:26 PAGE 7   

 366   2                         i = 0x00;               //将其中一位为1的改为0
 367   2              SendComm(WSM_COMM,0,i);            //修改错误计数器
 368   2              ProcessMode();                  //处理
 369   2              for (i = 1; i < 4; i++, pt++)   //校对3字节的密码
 370   2              {
 371   3                   SendComm(VER_COMM,i,*pt);  //发出校对命令,
 372   3                   ProcessMode();             //处理
 373   3              }
 374   2              SendComm(WSM_COMM,0,0xff);      //擦除计数器恢复错误计数器
 375   2              ProcessMode();                  //处理
 376   2              SendComm(RSM_COMM,0xff,0xff);   //读密码存储区的命令字,第2,3个参数在此命令中被忽略
 377   2              ReadMode(temp, 4);              //读错误计数器的内容
 378   2              if((temp[0] & 0x07)==0x07)      //如果没有被成功擦除,表明校对失败
 379   2                   return 1 ;
 380   2           }
 381   1           return 0;
 382   1      }
 383          /******************************************************************** 
 384          
 385          函 数 名:Delay10us()
 386          功    能:延时10微秒(包括调用和返回的时间),f = 11.0592Mhz
 387          说    明:
 388          调    用:
 389          入口参数:无
 390          出口参数:无
 391          返 回 值:无  
 392          设    计:zhaojunjie           日    期:2002-04-24
 393          修    改:                     日    期: 
 394          ***********************************************************************/
 395          void Delay10us(void)
 396          {
 397   1          _nop_();
 398   1          _nop_();
 399   1          _nop_();
 400   1          _nop_();
 401   1          _nop_();
 402   1          _nop_();
 403   1      }
 404          
 405          /******************************************************************** 
 406          
 407          函 数 名: Delay5us()
 408          功    能:延时10微秒(包括调用和返回的时间),f = 11.0592Mhz
 409          说    明:
 410          调    用:
 411          入口参数:无
 412          出口参数:无
 413          返 回 值:无  
 414          设    计:zhaojunjie           日    期:2002-04-24
 415          修    改:                     日    期: 
 416          ***********************************************************************/
 417          void Delay5us(void)
 418          {
 419   1          _nop_();
 420   1          _nop_();
 421   1          _nop_();
 422   1      }
 423          /*//////////////////////////////////////////////////////////////////////*/
 424          
 425           


C51 COMPILER V6.23a  SLE4442                                                               08/23/2003 10:33:26 PAGE 8   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    530    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      21
   IDATA SIZE       =   ----       4
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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