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

📄 icrdwr.lst

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 120          void Delay(uint t)
 121          {
 122   1              uint i,j;
 123   1              for(j=0;j<t;j--)
 124   1              {
 125   2                      for (i=0;i<125;i++)                                     //空循环
 126   2                      {
 127   3      }
 128   2              }
 129   1      }
 130          
 131          
 132          
 133          void SPIWrite(uchar dat)
 134          {
 135   1             SPDR = dat;                                                      //写数据寄存器SPDR
 136   1             while (!(SPSR & 0x80))                   //读SPSR,等待传输完成
 137   1                {
 138   2                }
 139   1      }
 140          
 141          
 142          
 143          uchar ICStatus(void)
 144          {
 145   1          P1_1 = 0;                                                   //使能IC卡芯片
 146   1          
 147   1              SPIWrite(StatusRead);                                   //向IC卡芯片写入读IC卡芯片状态指令
 148   1              SPIWrite(0x00);                                 //写无关位
 149   1         
 150   1          P1_1 = 1;                                           //禁用IC卡芯片
 151   1          return SPDR;                                                        //返回IC卡芯片状态
 152   1      }
 153          
 154          
 155          void WriteICFun(uchar dat)
 156          { 
 157   1              uchar status;
 158   1      
 159   1              status= ICStatus();                                             //检查IC卡芯片的状态
 160   1      while ((status&0x80)==0x00)                                     //如果IC卡芯片忙,则等待
 161   1      {
 162   2      }
 163   1              
 164   1          P1_1 = 0;                                           //使能IC卡芯片
 165   1          SPIWrite(BUFFER1Write);                                     //IC卡芯片的写BUFFER1指令代码 
 166   1          SPIWrite(0x00);                                     //写入8位无关位
 167   1          SPIWrite((uchar)(BufStartAddr>>8));                 //写入7位无关位以及9位buffer起始字节地址的第1位
 168   1          SPIWrite((uchar)BufStartAddr);                      //写入9位BUFFER起始字节地址的后8位
 169   1          SPIWrite(dat);                                      //写入数据
 170   1          P1_1 = 1;                                           //禁用IC卡芯片
 171   1          
 172   1          BufStartAddr++;                                             //指向下一BUFFER起始字节地址
 173   1          
 174   1          if (BufStartAddr > 263)                             //如果BUFFER已满
 175   1          {
 176   2              BufStartAddr = 0;                                       // buffer起始字节地址重置0
 177   2              if (PageAddr < 2047)                            //如果IC卡芯片的主内存页不满
 178   2              { 
 179   3                              /* buffer数据写入主内存页 */
C51 COMPILER V8.08   ICRDWR                                                                09/21/2008 11:28:48 PAGE 4   

 180   3                  P1_1 = 0;                                   //使能IC卡芯片
 181   3                  SPIWrite(BUFFER1ToMain);            //由缓冲区写主内存指令代码
 182   3                  SPIWrite((uchar)(PageAddr>>7));             //写入4位保留位加上11位页地址的高4位
 183   3                  SPIWrite((uchar)(PageAddr<<1));             //写入11位页地址的低7位和1位无关位
 184   3                  SPIWrite(0x00);                     //写入8位无关位
 185   3                  P1_1 = 1;                                   //禁用IC卡芯片
 186   3      
 187   3                  PageAddr++;                         //指向下一页地址
 188   3              }
 189   2          }  
 190   1      }
 191          
 192          
 193          uchar ReadICFun()
 194          {
 195   1              uchar status;
 196   1              uchar tmp;
 197   1      
 198   1      status= ICStatus();                                             //检查IC卡芯片的状态
 199   1      while ((status&0x80)==0x00)                             //如果IC卡芯片忙,则等待
 200   1      {
 201   2      }
 202   1      
 203   1              P1_1 = 0;                                                       //使能IC卡芯片
 204   1              SPIWrite(MainPageRead) ;                                //写入主内存页读指令代码
 205   1              tmp = (uchar)(PageAddr>>7);                             //11位页地址的高4位
 206   1              SPIWrite(tmp);                                                  //写入4位保留位以及11位页地址的高4位
 207   1              tmp = (uchar)(PageAddr<<1)|((uchar)(PageStartAddr>>8)&0x01);
 208   1           SPIWrite(tmp);                                                     //写入页地址的低7位以及9位页起始字节地址的最高位
 209   1              tmp = (uchar)(PageStartAddr);
 210   1              SPIWrite(tmp);                                                  //写入9位页起始字节地址的低8位
 211   1              SPIWrite(0x00) ;                                                //写入8位无关位
 212   1              SPIWrite(0x00) ;                                                //写入8位无关位
 213   1              SPIWrite(0x00) ;                                                //写入8位无关位
 214   1              SPIWrite(0x00) ;                                                //再写入8位无关位,共写入32位无关位
 215   1              SPIWrite(0xff) ;                                                        //写入任意值,用来读IC卡芯片返回的数据
 216   1              P1_1 = 1;                                               //禁用IC卡芯片
 217   1      
 218   1              PageStartAddr++;                                                //指向下一页中起始字节地址
 219   1      
 220   1          if (PageStartAddr > 263)                            //如果读完一页
 221   1          {
 222   2              PageStartAddr = 0;                                      //页起始字节地址重置0
 223   2              if (PageAddr < 2047)                            //如果主内存页没有读完
 224   2                      PageAddr++;                                     //指向下一页地址
 225   2          }  
 226   1      
 227   1              return SPDR;                                                    //返回数据
 228   1      }
 229          
 230          
 231          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    628    ----
   CONSTANT SIZE    =    536    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V8.08   ICRDWR                                                                09/21/2008 11:28:48 PAGE 5   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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