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

📄 mcutest.lst

📁 IC卡的单片机程序proteus仿真
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159   1              WriteI2CByte(thedata);
 160   1              acktemp=Check_Acknowledge();
 161   1              I2C_Stop();
 162   1      }       
 163          
 164          unsigned char Read_One_Byte(unsigned char addr) 
 165          { 
 166   1              bit acktemp=1;
 167   1              unsigned char mydata;
 168   1              I2C_Start();
 169   1              WriteI2CByte(0xa0);
C51 COMPILER V8.02   MCUTEST                                                               03/26/2009 15:06:07 PAGE 6   

 170   1              acktemp=Check_Acknowledge();
 171   1              WriteI2CByte(addr);
 172   1              acktemp=Check_Acknowledge();
 173   1              I2C_Start();
 174   1              WriteI2CByte(0xa1);
 175   1              acktemp=Check_Acknowledge();
 176   1              mydata=ReadI2CByte();
 177   1              acktemp=Check_Acknowledge();
 178   1              return mydata;
 179   1              I2C_Stop();
 180   1      }
 181          
 182          char Num2Char(unsigned char ch)
 183          {
 184   1              if(ch<=9)
 185   1                      return (ch+'0');
 186   1              else return (ch-10+'a');
 187   1      }
 188          
 189          void System_Init(void)
 190          {
 191   1              TMOD=0x21;              //串行口初始化
 192   1              TH1=0xfd;TL1=0xfd;      //设定波特率  9600  
 193   1              PCON=0x00;
 194   1              TR1=1;                  //启动T1
 195   1              SCON=0x50;      //串行口工作在方式1,并允许接收 
 196   1              EA=1;                   
 197   1              ES=1;   
 198   1      }
 199          
 200          void main(void)
 201          {
 202   1              System_Init();          //初始化
 203   1              LCD_Init();
 204   1      
 205   1              while(1)
 206   1              {
 207   2              //////////////此代码用来测试IIC读写/////////////////
 208   2      #ifdef _IIC_DUBG                 
                               Write_One_Byte(0,2); //ADD0 写入数据2
                               Write_One_Byte(1,7); //ADD1 写入数据3
                               LCD_Wr_Char(0,0,Read_One_Byte(0)+'0');  //读取24C02 并在LM016显示
                               LCD_Wr_Char(1,0,Read_One_Byte(1)+'0');          
              #endif           
 214   2              //////////////////IIC测试结束//////////////////////////
 215   2                      Money_num[6]=((money/10000)%10)+'0';
 216   2                      Money_num[7]=((money/1000)%10)+'0';
 217   2                      Money_num[8]=((money/100)%10)+'0';
 218   2                      Money_num[9]=((money/10)%10)+'0';
 219   2                      Money_num[11]=(money%10)+'0';
 220   2      
 221   2                      LCD_Wr_String(0,0,Card_num);
 222   2                      LCD_Wr_String(0,1,Money_num);
 223   2              }
 224   1      
 225   1      }
 226          
 227          //IC卡读和写子程序,中断 
 228          void rxdata(void) interrupt 4 using 0
 229          {
 230   1              unsigned char i,j;
 231   1              unsigned char rdbuf[20]; //读取卡中的数据缓冲
C51 COMPILER V8.02   MCUTEST                                                               03/26/2009 15:06:07 PAGE 7   

 232   1              unsigned char RxBuf[20];  //读取串口数据缓冲
 233   1              EA=0;
 234   1              for(i=0;i<2;i++) ////读取命令,第一个字节为命令字节,第二个字节为在第二个字节之后还有多少个字节      
 235   1              {
 236   2                      while(!RI);
 237   2                      RI=0;
 238   2                      RxBuf[i]=SBUF;  
 239   2              }
 240   1      
 241   1              if(RxBuf[1]!=0)   //如果字节数不是0,则继续读取剩余的数据
 242   1              {
 243   2                      for(i=0;i<RxBuf[1];i++)
 244   2                      {
 245   3                              while(!RI);
 246   3                              RI=0;
 247   3                              RxBuf[2+i]=SBUF; 
 248   3                      }
 249   2              }
 250   1      
 251   1              if(RxBuf[0]==COM_RD_CARD) //读卡命令
 252   1              {
 253   2                      err_flag=0;
 254   2                      rdbuf[0]=Read_One_Byte(CardID_Addr);   //读卡中的ID号
 255   2                      rdbuf[1]=Read_One_Byte(CardID_Addr+1);
 256   2                      rdbuf[2]=Read_One_Byte(CardID_Addr+2);
 257   2                      rdbuf[3]=Read_One_Byte(CardID_Addr+3);
 258   2                      rdbuf[4]=Read_One_Byte(CardID_Addr+4);
 259   2      
 260   2                      rdbuf[5]=Read_One_Byte(Money_Addr);
 261   2                      rdbuf[6]=Read_One_Byte(Money_Addr+1);
 262   2      
 263   2                      SBUF= COM_RD_CARD; //发送读卡命令返回PC
 264   2      
 265   2                      while(!TI);
 266   2                      TI=0;
 267   2      
 268   2                      for(j=0;j<7;j++) //发送卡数据返回PC
 269   2                      {
 270   3                              SBUF=rdbuf[j];
 271   3                              while(!TI);
 272   3                              TI=0;
 273   3                      }
 274   2      
 275   2                Card_num[3]=(rdbuf[0]>>4) +'0';         
 276   2                        Card_num[4]=(rdbuf[0]&0x0f) +'0';  
 277   2                        Card_num[5]=(rdbuf[1]>>4) + '0';
 278   2                        Card_num[6]=(rdbuf[1]&0x0f) + '0';
 279   2                        Card_num[7]=(rdbuf[2]>>4) + '0';
 280   2                        Card_num[8]=(rdbuf[2]&0x0f) + '0';
 281   2                        Card_num[9]=(rdbuf[3]>>4) + '0';
 282   2                        Card_num[10]=(rdbuf[3]&0x0f) + '0';
 283   2                        Card_num[11]=(rdbuf[4]>>4) + '0';
 284   2                        Card_num[12]=(rdbuf[4]&0x0f) + '0';
 285   2                              
 286   2                        money=rdbuf[5]*256+rdbuf[6];
 287   2      
 288   2              }
 289   1              else if(RxBuf[0]==COM_WR_CARD) //写卡命令
 290   1              {
 291   2                      err_flag=0;
 292   2                      Write_One_Byte(CardID_Addr,RxBuf[2]); //写卡号
 293   2                      Write_One_Byte(CardID_Addr+1,RxBuf[3]);
C51 COMPILER V8.02   MCUTEST                                                               03/26/2009 15:06:07 PAGE 8   

 294   2                      Write_One_Byte(CardID_Addr+2,RxBuf[4]);
 295   2                      Write_One_Byte(CardID_Addr+3,RxBuf[5]);
 296   2                      Write_One_Byte(CardID_Addr+4,RxBuf[6]);
 297   2      
 298   2                      Write_One_Byte(Money_Addr,RxBuf[7]);
 299   2                      Write_One_Byte(Money_Addr+1,RxBuf[8]);
 300   2                      SBUF=COM_WR_CARD;while(!TI);TI=0;
 301   2                      SBUF=COM_WR_CARD;while(!TI);TI=0;
 302   2                      SBUF=COM_WR_CARD;while(!TI);TI=0;
 303   2                      /*if((Read_One_Byte(CardID_Addr)!=RxBuf[2])
 304   2                       ||(Read_One_Byte(CardID_Addr+1)!=RxBuf[3])
 305   2                       ||(Read_One_Byte(CardID_Addr+2)!=RxBuf[4])
 306   2                       ||(Read_One_Byte(CardID_Addr+3)!=RxBuf[5])
 307   2                       ||(Read_One_Byte(CardID_Addr+4)!=RxBuf[6]))
 308   2                       err_flag=1;
 309   2      
 310   2                      if(!err_flag)
 311   2                      {
 312   2                              SBUF=COM_WR_CARD;while(!TI);TI=0;
 313   2                              SBUF=COM_WR_CARD;while(!TI);TI=0;
 314   2                              SBUF=COM_WR_CARD;while(!TI);TI=0;
 315   2                              SBUF=COM_WR_CARD;while(!TI);TI=0;
 316   2                      }
 317   2                      else
 318   2                      {
 319   2                              SBUF=COM_WR_ERROR;
 320   2                              while(!TI);
 321   2                              TI=0;
 322   2                      } */
 323   2              }
 324   1              else if(RxBuf[0]==COM_ADD_MONEY) //充钱命令
 325   1              {
 326   2                      err_flag=0;
 327   2                      money=Read_One_Byte(Money_Addr)*256+Read_One_Byte(Money_Addr+1);
 328   2                      money += (RxBuf[7]*256 + RxBuf[8]);
 329   2      
 330   2                      if( Read_One_Byte(Money_Addr)!=(money/256)
 331   2                       || Read_One_Byte(Money_Addr+1)!=(money%256))
 332   2                              err_flag=1;
 333   2      
 334   2                      if(!err_flag)
 335   2                      {
 336   3                              SBUF=COM_ADD_MONEY;
 337   3                              while(!TI);
 338   3                              TI=0;
 339   3                      }else 
 340   2                      {
 341   3                              SBUF=COM_WR_ERROR;
 342   3                              while(!TI);
 343   3                              TI=0;
 344   3                      } 
 345   2              }
 346   1              else if(RxBuf[0]==COM_DEC_MONEY)
 347   1              {
 348   2                               err_flag=0;
 349   2                               money=Read_One_Byte(Money_Addr)*256+Read_One_Byte(Money_Addr+1);
 350   2                               money -= (RxBuf[7]*256 + RxBuf[8]); 
 351   2      
 352   2                               Write_One_Byte(Money_Addr,money/256);
 353   2                               Write_One_Byte(Money_Addr+1,money%256);          
 354   2      
 355   2                               if( Read_One_Byte(Money_Addr)!=(money/256)
C51 COMPILER V8.02   MCUTEST                                                               03/26/2009 15:06:07 PAGE 9   

 356   2                                       || Read_One_Byte(Money_Addr+1)!=(money%256))
 357   2                               err_flag=1;
 358   2      
 359   2                               if(!err_flag)
 360   2                               {
 361   3                                      SBUF=COM_DEC_MONEY;
 362   3                                      while(!TI);
 363   3                                      TI=0;
 364   3                               }else 
 365   2                               {
 366   3                                      SBUF=COM_WR_ERROR;
 367   3                                      while(!TI);
 368   3                                      TI=0;
 369   3                               }              
 370   2              }
 371   1              EA=1;
 372   1      
 373   1      }
C51 COMPILER V8.02   MCUTEST                                                               03/26/2009 15:06:07 PAGE 10  

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


System_Init. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P2 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A0H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
_DELAY_IIC . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0008H  -----
  t. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
rxdata . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  j. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  rdbuf. . . . . . . . . . . . . . . .  AUTO     DATA   ARRAY    0000H  20
  RxBuf. . . . . . . . . . . . . . . .  AUTO     DATA   ARRAY    0014H  20
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
ES . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00ACH  1
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
RI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0098H  1
Send_0 . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
Send_1 . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
TI . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0099H  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
money. . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_INT    0000H  2
Check_Acknowledge. . . . . . . . . . .  PUBLIC   CODE   PROC     0008H  -----
Card_num . . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0002H  14
I2C_Start. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
SBUF . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0099H  1
PCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0087H  1
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TMOD . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0089H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
_LCD_Wr_String . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
Money_num. . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0010H  14
_Num2Char. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  ch . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
_WriteI2CByte. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  b. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   CHAR     0004H  1
I2C_Stop . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
err_flag . . . . . . . . . . . . . . .  PUBLIC   DATA   BIT      0000H  1
LCD_Init . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
TH1. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008DH  1
TL1. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008BH  1
ReadI2CByte. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  b. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0004H  1
TR1. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008EH  1
_Read_One_Byte . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  addr . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  acktemp. . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
  mydata . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
SDA. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0091H  1
Rec_Buffer . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    001EH  4
SCL. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0090H  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
_Write_One_Byte. . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  addr . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0002H  1
  thedata. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  acktemp. . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
C51 COMPILER V8.02   MCUTEST                                                               03/26/2009 15:06:07 PAGE 11  

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


F0 . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00D5H  1
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1022    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34      40
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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