微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > sle4442卡,可以读数据,但是写不上去,求大神解惑

sle4442卡,可以读数据,但是写不上去,求大神解惑

时间:10-02 整理:3721RD 点击:

弄了两天了,求大神给看看
每个引脚都通过三极管驱动,所以都是反向的,即单片机输出1的时候,sle4442接收到的是0.    IC_IO_R除外。

  1. void sle4442_start_com()
  2. {
  3.         IC_IO_W = 0;
  4.         Delay10us();
  5.         IC_CLK = 0;
  6.         Delay5us();
  7.         IC_IO_W = 1;
  8.         Delay5us();        
  9.         IC_CLK=1;
  10. }

  11. void sle4442_stop_com()
  12. {
  13.     IC_CLK = 1;
  14.         IC_IO_W = 1;
  15.         Delay10us();
  16.         IC_CLK = 0;
  17.         Delay5us();
  18.         IC_IO_W = 0;
  19.         Delay10us();
  20. }

  21. void sle4442_sendbyte(uchar data)
  22. {
  23.     uint i;
  24.         for(i = 8; i > 0; i--)
  25.         {
  26.             IC_CLK = 1;
  27.                 IC_IO_W = !(data & 0x01);
  28.                 Delay10us();
  29.                 IC_CLK = 0;
  30.                 Delay10us();
  31.                 data = data >>1;
  32.         }
  33. }

  34. unsigned char sle4442_rcvbyte()
  35. {
  36.     uint i,ch;
  37.         ch = 0;
  38.         for(i = 8; i > 0; i--)
  39.         {
  40.             IC_CLK = 1;
  41.                 ch = ch >> 1;
  42.                 if((uint)IC_IO_R)
  43.                     ch |= 0x80;
  44.                 else ch |= 0x00;
  45.                 Delay10us();
  46.                 IC_CLK = 0;
  47.                 Delay10us();
  48.         }
  49.         IC_CLK=1;
  50.         return ch;
  51. }

  52. void sle4442_ansrst()
  53. {
  54.         //IC_CLK=1;
  55.         //IC_RST=1;
  56.         IC_RST=0;
  57.         Delay5us();
  58.         IC_CLK=0;
  59.         Delay10us();
  60.         Delay5us();
  61.         IC_CLK=1;
  62.         Delay5us();
  63.         IC_RST=1;
  64.         
  65.         ic_id[0] = sle4442_rcvbyte();
  66.         ic_id[1] = sle4442_rcvbyte();
  67.         ic_id[2] = sle4442_rcvbyte();
  68.         ic_id[3] = sle4442_rcvbyte();    //读出32个相应数据   是IC卡的ID
  69.         
  70.         IC_CLK = 1;
  71.         Delay5us();
  72.         IC_IO_W = 0;
  73. }

  74. void sle4442_process_plus()
  75. {
  76.     uint i=255;
  77.         IC_CLK = 1;
  78.         Delay5us();
  79.         IC_IO_W = 1;
  80.         Delay5us();
  81.         while(i--)
  82.         {
  83.             IC_CLK = 1;
  84.                 Delay10us();
  85.                 IC_CLK = 0;
  86.                 Delay5us();
  87.         }
  88.         IC_IO_W = 0;
  89.         IC_CLK=1;;
  90. }

复制代码



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top