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

📄 write2401a.lst

📁 IC卡的读取源程序,包括源代码.Protel原理图和PCB图,直接就可以设计使用.
💻 LST
字号:
C51 COMPILER V6.23a  WRITE2401A                                                            08/22/2003 15:20:39 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE WRITE2401A
OBJECT MODULE PLACED IN Write2401A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Write2401A.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg51.h"
   2          #include "Write2401A.h"
   3          #include "intrins.h"
   4          main()
   5          {
   6   1      //    uchar i;
   7   1              init();
   8   1      //      Write_Add = 0x35;
   9   1      //      Write_Data = 0x66;
  10   1              for(;;)
  11   1              {       
  12   2                      if(Card_In == True)
  13   2                      {
  14   3                              Card_Insert_Flag = True;
  15   3                      }
  16   2                      else
  17   2                              Card_Insert_Flag = False;
  18   2                      if(Card_Insert_Flag == True)
  19   2                      {
  20   3                              Write_Add = R_Buffer[0];
  21   3                              Write_Data = R_Buffer[1];
  22   3                              if(Card_Write_Flag == True)
  23   3                              {
  24   4                                      NOP();
  25   4                                      NOP();
  26   4                                      Card_Power_Control = True;
  27   4                                      Card_Power_LED = ON;
  28   4                                      Open_At24c01A();
  29   4                                      NOP();
  30   4                                      Start_I2C();
  31   4                                      SendByte(Write_At24c01A);
  32   4                                      if(ack == 1)
  33   4                                      {
  34   5                                              SendByte(Write_Add);
  35   5                                              if(ack == 1)
  36   5                                              {
  37   6                                                      SendByte(Write_Data);
  38   6                                                      if(ack == 1)
  39   6                                                      {
  40   7                                                              Send();
  41   7                                                              Card_Write_Flag = False;
  42   7                                                              Stop_I2C();
  43   7                                                              Close_At24c01A();       
  44   7                                                      }
  45   6                                              }
  46   5                                      }
  47   4                              }
  48   3                              else    NOP();
  49   3                      }
  50   2                      else    
  51   2                      {
  52   3                              Card_Power_Control = False;
  53   3                              Card_Power_LED = OFF;
  54   3                      }
  55   2              }
C51 COMPILER V6.23a  WRITE2401A                                                            08/22/2003 15:20:39 PAGE 2   

  56   1      }
  57          
  58          
  59          
  60          
  61          
  62          
  63          
  64          
  65          
  66          
  67          
  68          
  69          
  70          
  71          
  72          
  73          
  74          /*--------------------------------
  75          启动卡函数
  76          函数原型:Open_At24c01A()
  77          功能:启动ic卡片
  78          ---------------------------------*/
  79          void Open_At24c01A()
  80          {
  81   1          NOP();
  82   1          SCL=0;
  83   1          NOP();
  84   1          RST=0;
  85   1          NOP();
  86   1          RST=1;
  87   1          NOP();
  88   1          SDA=1;
  89   1          NOP();
  90   1          SCL=1;
  91   1          NOP();
  92   1          SCL=0;
  93   1          NOP();
  94   1          RST=0;
  95   1      }
  96          /*--------------------------------
  97          关闭卡函数
  98          函数原型:Close_At24c01A()
  99          功能:关闭ic卡片
 100          ---------------------------------*/
 101          void Close_At24c01A()
 102             {
 103   1            SDA=0;
 104   1            NOP();
 105   1            SCL=0;
 106   1            NOP();
 107   1            RST=0;
 108   1            NOP();
 109   1         }
 110          /*--------------------------------
 111          延时
 112          函数原型:Nop();
 113          功能:延时
 114          ---------------------------------*/
 115          void NOP()
 116          {
 117   1          _nop_();
C51 COMPILER V6.23a  WRITE2401A                                                            08/22/2003 15:20:39 PAGE 3   

 118   1          _nop_();
 119   1          _nop_();
 120   1          _nop_();
 121   1          _nop_();
 122   1      }
 123          
 124          /*---------------------------------
 125          启动总线函数
 126          函数原型:Start_I2C()
 127          功能:启动I2C总线,即发送起始条件
 128          ---------------------------------*/
 129          void Start_I2C()
 130          {
 131   1              SDA = 1;        //发送起始条件数据信号
 132   1              _nop_();
 133   1              SCL = 1;
 134   1              _nop_();                //起始建立时间大于4.7us
 135   1              _nop_();
 136   1              _nop_();
 137   1              _nop_();
 138   1              _nop_();
 139   1              SDA = 0;        //发送起始信号
 140   1              _nop_();
 141   1              _nop_();
 142   1              _nop_();
 143   1              _nop_();
 144   1              _nop_();
 145   1              SCL = 0;        //钳位
 146   1              _nop_();
 147   1              _nop_();
 148   1      }
 149          /*-------------------------------
 150          结束总线函数
 151          函数原型:Stop_I2C()
 152          功能:结束I2C总线,即发送I2C结束条件
 153          -------------------------------*/
 154          void Stop_I2C()
 155          {
 156   1              SDA = 0;        //发送结束条件的数据信号
 157   1              _nop_();                //发送结束条件的时钟信号
 158   1              SCL = 1;        //结束条件建立时间大于4us
 159   1              _nop_();
 160   1              _nop_();
 161   1              _nop_();
 162   1              _nop_();
 163   1              _nop_();
 164   1              SDA = 1;        //发送I2C总线结束命令
 165   1              _nop_();
 166   1              _nop_();
 167   1              _nop_();
 168   1              _nop_();
 169   1              _nop_();
 170   1      }
 171          
 172          /*------------------------------
 173          字节数据传送函数
 174          函数原型:SendByte(uchar c)
 175          功能:将数据C发送出去,可以是地址,
 176          也可以是数据,发送完成之后等待应答
 177          并且对应答状态位进行操作,不应答和非
 178          应答都使得ACK=0,发送数据正常则ACK=1
 179          --------------------------------*/
C51 COMPILER V6.23a  WRITE2401A                                                            08/22/2003 15:20:39 PAGE 4   

 180          void    SendByte(uchar c)
 181          {
 182   1              uchar BitCnt;
 183   1              for(BitCnt = 0;BitCnt < 8;BitCnt++)                     //一个字节
 184   1                      {
 185   2                              if((c << BitCnt)& 0x80) SDA = 1;        //判断发送位
 186   2                              else    SDA = 0;
 187   2                              _nop_();
 188   2                              SCL = 1;        //时钟线为高,通知被控器开始接受数据
 189   2                              _nop_();
 190   2                              _nop_();
 191   2                              _nop_();
 192   2                              _nop_();
 193   2                              _nop_();
 194   2                              SCL = 0;
 195   2                      }
 196   1              _nop_();
 197   1              _nop_();
 198   1              SDA = 1;        //释放数据线,准备接受应答位
 199   1              _nop_();
 200   1              _nop_();
 201   1              SCL = 1;
 202   1              _nop_();
 203   1              _nop_();
 204   1              _nop_();
 205   1              if(SDA == 1) ack =0;
 206   1              else ack = 1;           //判断是否收到应答信号
 207   1              SCL = 0;
 208   1              _nop_();
 209   1              _nop_();
 210   1      }
 211          
 212          void init()
 213          {
 214   1              TMOD=0x20;
 215   1              TL1=0xFd;
 216   1              TH1=0xFd;
 217   1              SCON=0x50;
 218   1              PCON=0x00;
 219   1              EA = 1;
 220   1              ES = 1;
 221   1              TR1=1;  
 222   1              P1_5 = OFF;
 223   1              P1_6 = OFF;
 224   1              P1_7 = OFF;
 225   1              RST = OFF;
 226   1              Card_In = 1;
 227   1              Card_Insert_Flag = False;
 228   1              Card_Power_Control = False;
 229   1              Card_Power_LED = OFF;
 230   1              Card_Write_Flag = False;
 231   1              R_Counter = 0;
 232   1      }
 233          void R_Serial() interrupt 4 using 1
 234          {
 235   1              if( RI == 1)
 236   1              { 
 237   2                      uchar R_Temp;
 238   2                      RI = 0;
 239   2                      R_Temp = SBUF;                  
 240   2                      if(R_Counter==0)
 241   2                      {
C51 COMPILER V6.23a  WRITE2401A                                                            08/22/2003 15:20:39 PAGE 5   

 242   3                              if( R_Temp== 0xFF)
 243   3                              {
 244   4                                      R_Counter=0;    
 245   4                              }
 246   3                              else return;
 247   3                      }
 248   2                      else
 249   2                      {
 250   3                              R_Buffer[R_Counter -1] = R_Temp;
 251   3                  if( R_Counter == 2)
 252   3                          {
 253   4                          R_Counter=0;
 254   4                                      Card_Write_Flag = True;         
 255   4                          return;
 256   4                      }
 257   3                      }
 258   2                      R_Counter++;
 259   2              }
 260   1      }
 261          
 262          void Send()
 263          {
 264   1              SBUF = Write_Add;               
 265   1              do{}
 266   1              while(TI == 0); 
 267   1              TI = 0;
 268   1              SBUF = Write_Data;
 269   1              do{}
 270   1              while(TI == 0);
 271   1              TI = 0;
 272   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    362    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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