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

📄 main.lst

📁 12232液晶单片机驱动程序源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 433   4                 break;
 434   4      
 435   4              case 0x05:  //卡密钥装载命令				                             
 436   4                     block_num=Receive_Buf_UART1[2]*4+3;                   
 437   4                     memmove(temp_buf,Receive_Buf_UART1+3,16);   //搬移16个16进制数      			                    
             -                                                  
 438   4                     status=Mf500PiccWrite(block_num,temp_buf);                              
 439   4       			   if(status==0)                 		
 440   4                          SEND_ICINFO_PC(5,0,0,NULL);  //显示写成功                             
 441   4                     else  
 442   4                          SEND_ICINFO_PC(5,1,0,NULL);
 443   4      			   SpeakSound();		 
 444   4      			   break;
 445   4      									                               
 446   4              case 0x06://设备密钥装载命令 loadkeye2  将密钥装入RC500的密钥存贮区                               
             -                  																																					                 
 447   4                     if(Receive_Buf_UART1[3]==0x0A)
 448   4                             selec_abkey=PICC_AUTHENT1A;
 449   4                     if(Receive_Buf_UART1[3]==0x0B) 
 450   4                             selec_abkey=PICC_AUTHENT1B; 
 451   4                     e2key_secotor=Receive_Buf_UART1[2];
 452   4                          
 453   4                     keybuf[0]=Receive_Buf_UART1[4];  
 454   4                     keybuf[1]=Receive_Buf_UART1[5];
 455   4                     keybuf[2]=Receive_Buf_UART1[6];
 456   4                     keybuf[3]=Receive_Buf_UART1[7];
 457   4                     keybuf[4]=Receive_Buf_UART1[8];
 458   4                     keybuf[5]=Receive_Buf_UART1[9];
 459   4      
 460   4                     status=Mf500PcdLoadKeyE2(selec_abkey,e2key_secotor,keybuf);  //first save key to e2rom
 461   4                     if(status==00)             
 462   4                   	     SEND_ICINFO_PC(6,0,0,NULL);  //显示写成功      
 463   4                     else
 464   4                           SEND_ICINFO_PC(6,1,0,NULL);    
 465   4                     SpeakSound();
 466   4                     break;
 467   4                                                                     
 468   4             default:
 469   4                     SEND_ICINFO_PC(6,2,0,NULL);    
 470   4                     break;
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 9   

 471   4             }//run command
 472   3           }////接收成功
 473   2        }//while(1)                    
 474   1      }//end main()
*** WARNING 280 IN LINE 214 OF MAIN.C: 'j': unreferenced local variable
 475          
 476          
 477          //串口0中断服务程序
 478          // Head_Flag=0x0E	End_Flag=0x05  0x0A means 0x7D 
 479          // when x<0x10  ,x= 0x7D x^0x10	
 480          void  Seri_int(void)  interrupt 4
 481          { 
 482   1      	if(RI0){ 
 483   2      
 484   2      		RI0=0; 					// 清串口0标字位
 485   2      
 486   2      		if(UART1_Receive_Len > 240)	                                                                            
             -            
 487   2      		{
 488   3      			UART1_Receive_Len = 0;
 489   3      			Receive_Flag_UART1 = 0;
 490   3      		}
 491   2      
 492   2      		if(SBUF0==0x0E)
 493   2      		{				// 接收帧头
 494   3      			Receive_Flag_UART1=1;
 495   3      			UART1_Receive_Len = 0;
 496   3      		}			
 497   2      		else{
 498   3      
 499   3      			if(Receive_Flag_UART1==1)
 500   3      			{
 501   4      								
 502   4      				// 接收数据			
 503   4      				if(SBUF0==0x05){
 504   5      					Receive_Flag_UART1=0;
 505   5      					Padding_Flag_UART1=0;
 506   5      				 	UART1_Rec_Complete=1;
 507   5      				}
 508   4      				else if(Padding_Flag_UART1==1){
 509   5      					Padding_Flag_UART1=0;
 510   5      					Receive_Buf_UART1[UART1_Receive_Len] = SBUF0;
 511   5      	  	        	Receive_Buf_UART1[UART1_Receive_Len] ^= 0x7D;
 512   5      	  	        	UART1_Receive_Len++;
 513   5      				}
 514   4      				else if(SBUF0==0x7D){
 515   5      					Padding_Flag_UART1=1;
 516   5      				}
 517   4      				else if(SBUF0==0x0A){
 518   5      					Receive_Buf_UART1[UART1_Receive_Len] = 0x7D;
 519   5      					UART1_Receive_Len++;
 520   5      				}
 521   4      				else{
 522   5      					Receive_Buf_UART1[UART1_Receive_Len] = SBUF0;
 523   5      					UART1_Receive_Len++;
 524   5      				}							
 525   4      			}
 526   3      		}
 527   2      	}						
 528   1      }
 529          
 530          // 向pc发送子程序
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 10  

 531          // command----命令,status_flag----应答状态,len-----应答数据长度,buf[]-----应答数据
 532          //此函数请不要添加看门狗定时器复位,否则卡不能认证,不知为何,曾为此痛不于生
 533          void SEND_ICINFO_PC(unsigned char command,unsigned char status_flag,unsigned char len,unsigned char buf[])
 534          {
 535   1      	unsigned char i;
 536   1      	unsigned char checksum=0;
 537   1      	unsigned char xdata buff[20];
 538   1          unsigned char Data_Len;
 539   1      
 540   1           DIR=1;
 541   1          Delay(5000);
 542   1          Delay(5000);
 543   1          Delay(5000);
 544   1          Delay(5000);
 545   1          Delay(5000);
 546   1          Delay(5000);
 547   1          Delay(5000);
 548   1          Delay(5000);
 549   1        
 550   1          Data_Len=0; 
 551   1          buff[Data_Len]=0x66;       //应答标志
 552   1      	buff[++Data_Len]=command;  //命令 
 553   1      	if(status_flag==0)
 554   1            	buff[++Data_Len]=0x00;   //成功标志
 555   1          else 
 556   1      	    buff[++Data_Len]=0x01;	
 557   1      
 558   1          for(i=0;i<len;i++)
 559   1      	    buff[++Data_Len]=buf[i];      
 560   1       
 561   1      	for(i=0;i<Data_Len+1;i++)
 562   1      	{ 
 563   2      		checksum = checksum + buff[i];
 564   2      	}
 565   1      
 566   1      	buff[++Data_Len] = checksum;  //校验和
 567   1      
 568   1      	TI0=0;
 569   1      	SBUF0 = 0x0E;									// 发送帧头
 570   1      	while(!TI0); TI0=0;
 571   1      
 572   1      	for(i=0;i<Data_Len+1;i++)						// 发送数据
 573   1      	{
 574   2      		if(buff[i] == 0x7D)
 575   2      		{
 576   3      			SBUF0 = 0x0A;
 577   3      			while(!TI0); TI0=0;
 578   3      		}
 579   2      		else if(buff[i]<0x10)
 580   2      		{
 581   3      			SBUF0 = 0x7D;
 582   3      			while(!TI0); TI0=0;
 583   3      			SBUF0 = buff[i]^0x7D;
 584   3      			while(!TI0); TI0=0;
 585   3      		}
 586   2      		else 
 587   2      		{
 588   3      			SBUF0 = buff[i];
 589   3      			while(!TI0); TI0=0;
 590   3      		}
 591   2      	}
 592   1      	SBUF0 = 0x05;									// 发送帧尾
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 11  

 593   1      	while(!TI0); TI0=0;
 594   1      
 595   1      //	SBUF1 = 0x05;									// 发送帧尾
 596   1      //	while(!(SCON1 & 0x02)); SCON1 &=0xFD;
 597   1          DIR=0;
 598   1      }
 599          
 600          /****************************************************************************
 601          *                                                                           *
 602          * Function:   Mf500PcdConfig                                                  *
 603          *                                                                           *
 604          * Input:                                                                *
 605          * Output:       STATE                                                     *
 606          *                                                                           *
 607          ****************************************************************************/
 608          char Mf500PcdConfig(void)
 609          {
 610   1         
 611   1         unsigned int idata RstLoopCnt = 0;
 612   1         unsigned int idata CmdWaitCnt = 0;
 613   1          status = MI_RESETERR;
 614   1         // wait until reset command recognized
 615   1      do
 616   1        {      
 617   2         Delay(100);     	// wait     
 618   2         PReset=1;   		// reset RC500
 619   2         Delay(300);      	// wait
 620   2         PReset=0; // clear reset pin
 621   2         Delay(300);      	// wait 
 622   2         } 
 623   1        while (ReadRC(RegPage) != 0x80);  
 624   1       do
 625   1       {   
 626   2             WriteRC(RegPage,0x0); // Dummy access in order to determine the bus 
 627   2       }while(ReadRC(RegCommand) != 0x00); // configuration
 628   1            // necessary read access 
 629   1            // after first write access, the returned value
 630   1            // should be zero ==> interface recognized
 631   1            if (ReadRC(RegCommand) != 0x00)
 632   1            {                           
 633   2                status = MI_INTERFACEERR;
 634   2            }
 635   1            else
 636   1            {
 637   2               status = 0;
 638   2            }
 639   1      
 640   1         if(status==0)
 641   1         {
 642   2          // loade2();
 643   2           
 644   2      	 XBYTE[RegClockQControl]=0x0;
 645   2           XBYTE[RegClockQControl]=0x40;
 646   2        	
 647   2      	 Delay(24);// wait approximately 100 us - calibration in progress
 648   2           ClearBitMask(RegClockQControl,0x40);  // clear bit ClkQCalib for 
 649   2           
 650   2      	 XBYTE[RegBitPhase]=0xAd;      
 651   2           XBYTE[RegRxThreshold]=0xFF;   
 652   2           XBYTE[RegRxControl2]=01;
 653   2           XBYTE[RegFIFOLevel]=0x1A; // initialize to 26d 
 654   2           XBYTE[RegTimerControl]=0x02;  // TStopRxEnd=0,TStopRxBeg=0,当数据发送结束时定时器自动启动
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 12  

 655   2           XBYTE[RegIRqPinConfig]=0x3; // interrupt active low enable管脚irq上的信号与位irq状态相反,标准cmos输

⌨️ 快捷键说明

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