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

📄 m500auc.c

📁 奥尔斯公司pxa270试验箱射频卡读写器相关资料
💻 C
📖 第 1 页 / 共 4 页
字号:
        TL1   = 0xFD;

	//TH1   = 0xF3;				// 波特率设为2400

	//TL1   = 0xF3;

	TR1   = TRUE; 	            // 波特率发生器

        SM2   = 1;



	//TH0 = 0x60;

        //TL0 = 0x60;

        TH0 = 0xB1;

        TL0 = 0xE0;

        TR0 = TRUE;





        SPEAKER = 0;

        RLED = FALSE;

        GLED = FALSE;



        ET0=1;

	ET1=0;

	EA=1;

	EX0=1;

	IT0 = 1;

	TR2=0;

 	ES = TRUE;

	CmdValid=0;



        RECEIVE = 0;

	isSelect = FALSE;

        haveRead = TRUE;



	//RLED=0;



	//delay_10ms(30);

	//RLED=1;

	//delay_10ms(30);

	//RLED=0;



 	MfConfig();

        SM2 = 1;

}



///////////////////////////////////////////////////////////////////////

// IC卡处理函数

///////////////////////////////////////////////////////////////////////

void cmd_execution(void)

{

	//unsigned char cmd;

        unsigned char checksum = 0;

	unsigned char status;



	switch(cmd)

	{

	 	case 1:					// 读卡信息

			if(!haveRead && cardtype == mifare1)                        // 正确读取卡号

			{

				SerBuffer[0] = SLAVEADDR;                           // 从机地址

                                SerBuffer[1] = 6;                                   // 返回字节数

                                SerBuffer[2] = 1;

				memcpy(&SerBuffer[3], &CardInfoBuffer[2], 4);       // 卡序列号

                                checksum = checksum ^ SerBuffer[0];

                                checksum = checksum ^ SerBuffer[1];

                                checksum = checksum ^ SerBuffer[2];

                                checksum = checksum ^ SerBuffer[3];

                                checksum = checksum ^ SerBuffer[4];

                                checksum = checksum ^ SerBuffer[5];

                                checksum = checksum ^ SerBuffer[6];

                                SerBuffer[7] = checksum;                            // 异或校验和

                                RLED = FALSE;

                                haveRead = TRUE;

			}

			else                                                         // 没有卡号或者卡类型不正确

			{

				SerBuffer[0] = SLAVEADDR;

				SerBuffer[1] = 3;

                                SerBuffer[2] = 1;

                                SerBuffer[3] = 0;

                                checksum = checksum ^ SerBuffer[0];

                                checksum = checksum ^ SerBuffer[1];

                                checksum = checksum ^ SerBuffer[2];

                                checksum = checksum ^ SerBuffer[3];

                                SerBuffer[4] = checksum;

		   	}

			break;

                case 2:                                 // 蜂鸣器



                        SerBuffer[0] = SLAVEADDR;

                        SerBuffer[1] = 3;

                        SerBuffer[2] = 2;

                        SerBuffer[3] = 1;

                        checksum = checksum ^ SerBuffer[0];

                        checksum = checksum ^ SerBuffer[1];

                        checksum = checksum ^ SerBuffer[2];

                        checksum = checksum ^ SerBuffer[3];

                        SerBuffer[4] = checksum;

                        break;

		case 3:					// 绿灯开、关

                        if( RevBuffer[1] == 0)

                        {

                                GLED = FALSE;

                                SerBuffer[0] = SLAVEADDR;

                                SerBuffer[1] = 3;

                                SerBuffer[2] = 3;

                                SerBuffer[3] = 1;

                                checksum = checksum ^ SerBuffer[0];

                                checksum = checksum ^ SerBuffer[1];

                                checksum = checksum ^ SerBuffer[2];

                                checksum = checksum ^ SerBuffer[3];

                                SerBuffer[4] = checksum;

                        }

                        else if( RevBuffer[1] == 1)

                        {

                                GLED = TRUE;

                                SerBuffer[0] = SLAVEADDR;

                                SerBuffer[1] = 3;

                                SerBuffer[2] = 3;

                                SerBuffer[3] = 1;

                                checksum = checksum ^ SerBuffer[0];

                                checksum = checksum ^ SerBuffer[1];

                                checksum = checksum ^ SerBuffer[2];

                                checksum = checksum ^ SerBuffer[3];

                                SerBuffer[4] = checksum;

                        }

                        else

                        {

                                SerBuffer[0] = SLAVEADDR;

                                SerBuffer[1] = 3;

                                SerBuffer[2] = 3;

                                SerBuffer[3] = 0;

                                checksum = checksum ^ SerBuffer[0];

                                checksum = checksum ^ SerBuffer[1];

                                checksum = checksum ^ SerBuffer[2];

                                checksum = checksum ^ SerBuffer[3];

                                SerBuffer[4] = checksum;

                        }

			break;

	  	case 4:					// 灯闪烁

                        SerBuffer[0] = SLAVEADDR;

                        SerBuffer[1] = 3;

                        SerBuffer[2] = 4;

                        SerBuffer[3] = 1;

                        checksum = checksum ^ SerBuffer[0];

                        checksum = checksum ^ SerBuffer[1];

                        checksum = checksum ^ SerBuffer[2];

                        checksum = checksum ^ SerBuffer[3];

                        SerBuffer[4] = checksum;

			break;

		case 5:					// 重启状态

                        SerBuffer[0] = SLAVEADDR;

                        SerBuffer[1] = 3;

                        SerBuffer[2] = 5;

                        SerBuffer[3] = 1;

                        checksum = checksum ^ SerBuffer[0];

                        checksum = checksum ^ SerBuffer[1];

                        checksum = checksum ^ SerBuffer[2];

                        checksum = checksum ^ SerBuffer[3];

                        SerBuffer[4] = checksum;

			break;

		default:

			break;

	}

	CALL_isr_UART();

}



///////////////////////////////////////////////////////////////////////

// 接收和发送中断

///////////////////////////////////////////////////////////////////////

void isr_UART(void) interrupt 4 using 1

{

	unsigned char i = 0;

	unsigned int  j = 0;

        unsigned char cmdlen;

        unsigned char senlen;

        unsigned char addr;

        unsigned char checksum;



	if(RI)

 	{

  		if( isSelect == TRUE )                               // Receive the data

   		{  

  			cmdlen = SBUF;

                        RI=0;

                        for(i=0; i<cmdlen; i++)

                        {

	                       while(!RI)

                               {

        	    	                 j++;

                                         if(j > 1000)

                                         {

                                                break;

                                         }

                               }



	                       if(j < 1000)

                               {

        	    	                 RevBuffer[i] = SBUF;

                                         RI = 0;

                                         j = 0;

                               }

                               else

                               {

                                        break;

                               }

			}



                        

                        if(cmdlen == i)

                        {

//                                LedOn(1);

                                checksum = SLAVEADDR;

                                checksum = cmdlen ^ checksum;

                                for(i=0; i<cmdlen-1; i++)

                                {

                                        checksum = checksum ^ RevBuffer[i];

                                }

                                if( checksum == RevBuffer[cmdlen-1])

                                {

                                        isSelect = FALSE;

                                        CmdValid = TRUE;

                                        cmd = RevBuffer[0];

                                        cmd_execution();        // 进入IC卡处理程序

                                }

                        }

                        SM2 = 1;

                        isSelect = FALSE;

		}

		else                                        // Receive the address

		{

			addr = SBUF;

   			RI = 0;

			if(addr != SLAVEADDR)

                        {

                                isSelect = FALSE;

                                ES = 1;

                        }

                        else

                        {

				SM2 = 0;

			 	isSelect = TRUE;

                                ES = 1;

			}

		}

	}

	else if(!RI & TI)

	{

                SM2 = 0;

                RECEIVE = 1;

		TI=0;

                delay_1ms(10);                              // by Fxx 2005-2-22

		senlen = SerBuffer[1];

		for(i=0; i<=senlen+1; i++)

		{

			//delay_50us(1);

			SBUF = SerBuffer[i];

                        while(!TI);

                        TI = 0;

   		}

                RECEIVE = 0;

                SM2 = 1;

	}

}



/////////////////////////////////////////////////////////////////////

// 定时器0中断服务程序

/////////////////////////////////////////////////////////////////////

void isr_TIMER0(void) interrupt 1 using 2

{

        switch(cmd)

        {

                case 2:

                     SPEAKER = 1;

                     while(RevBuffer[1] > 0)

                     {

                        delay(30);

                        RevBuffer[1] --;

                     }

                     SPEAKER = 0;

                     break;

               case 4:

                    LedOn(RevBuffer[1]);

                    break;

               case 5:

                    init();

                    break;

               default:

                    break;

        }



        cmd = 0;

        TH0 = 0xB1;

        TL0 = 0xE0;

        TR0 = TRUE;

}



/////////////////////////////////////////////////////////////////////

// led function

/////////////////////////////////////////////////////////////////////

void LedOn( unsigned char rpt)

{

	unsigned char i;

	unsigned int j=0;

        i = rpt;

        while(i>0)

        {

                delay_1ms(100);

                GLED = TRUE;

                delay_1ms(100);

                GLED = FALSE;

                i--;

        }

}



/////////////////////////////////////////////////////////////////////

// delay function

/////////////////////////////////////////////////////////////////////

void delay(unsigned char time)

{

	unsigned int i;

	while(time>0)

	{

		time--;

		i = 100;

		while(i>0)

		{

			i--;

		}

	 }

}



///////////////////////////////////////////////////////////////////////

// 取得本机地址

///////////////////////////////////////////////////////////////////////

void GetAddr(void)

{

        unsigned char i;

        LOAD = 0;

        delay_50us(1);

        LOAD = 1;

        DCLK = 0;

        delay_50us(1);

        for(i=0; i<8; i++)

        {

                SLAVEADDR = SLAVEADDR << 1;

                if(DIN)

                {

                        SLAVEADDR = SLAVEADDR | 0X01;

                }

                DCLK = 1;

                delay_50us(1);

                DCLK = 0;

                DIN = 1;

                delay_50us(1);

       }

}



///////////////////////////////////////////////////////////////////////

// 主函数

///////////////////////////////////////////////////////////////////////

void main(void)

{

        unsigned char i;

        unsigned char j;

	unsigned char status;



        init();

        GetAddr();

        SM2 = 1;

        while(1)

	{

		while(haveRead)

		{

		//1.寻卡

			status=M500PiccCommonRequest(0x52,&CardInfoBuffer[1]);           // Request ALl

			//status=M500PiccCommonRequest(0x26,&RevBuffer[2]);         // Request Std

			if(status!=MI_OK)

			{

				status=M500PiccCommonRequest(0x52,&CardInfoBuffer[1]);		// Request All

				//status=M500PiccCommonRequest(0x26,&RevBuffer[2]);		// Request Std

				if(status!=MI_OK)

				{

                //	RLED = FALSE;

					continue;

				}

			}

			if(CardInfoBuffer[1]==2)

				cardtype=mifarepro;     // Mifare Pro 卡

			else if(CardInfoBuffer[1]==4)

				cardtype=mifare1;       // Mifare One 卡

			else if(CardInfoBuffer[1]==16)

				cardtype=mifarelight;   // Mifare Light 卡

			else

				cardtype=unknowncard;



			CardInfoBuffer[0] = status;

   			RLED = TRUE;					// 灯亮

                        SPEAKER = TRUE;                                 // 蜂鸣器响

                        delay(200);

                        SPEAKER = FALSE;

                        haveRead = FALSE;

		//寻卡操作完毕



		//2.防冲突,读取卡的序列号

			status = M500PiccCascAnticoll(0,&CardInfoBuffer[2]);

			if(status!=MI_OK)

			{

				continue;

			}

			memcpy(MLastSelectedSnr,&CardInfoBuffer[2],4);

		//防冲突完毕



		//3.选择卡 Select Card

			status=M500PiccCascSelect(MLastSelectedSnr,TempBuffer);

			if(status!=MI_OK)

			{

				continue;

			}

		//选择卡完毕

            break;

		}

  	}

}

⌨️ 快捷键说明

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