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

📄 main.#3

📁 12232液晶单片机驱动程序源代码
💻 #3
📖 第 1 页 / 共 5 页
字号:
        MInfo.nBytesToSend   = 4;
        status = PcdSingleResponseCmd(PCD_TRANSCEIVE);
       
        
        if (status == MI_OK)    // no timeout occured
        {
            if (MInfo.nBitsReceived != 4)   //  bits are necessary
            {
               status = MI_BITCOUNTERR;
            }
            else                     // 4 bit received
            {
              
               MRcvBuffer[0] &= 0x0f; // mask out upper nibble
               switch(MRcvBuffer[0])
               {
                  case 0x00: 
                     status = MI_NOTAUTHERR;
                     break;
                  case 0x01:
                     status = MI_VALERR;
                     break;
                  default:
                     status = MI_CODEERR;
                     break;
               }
               
              status = MI_OK;  ///////////////////////////////////////add

            }
         }                              
         else if(status == MI_NOTAGERR){

              status = MI_OK;  // no response after 4 byte value - 
                             // transfer command has to follow
           //   SendData("time out add value?");
         }
        // else { return  status;}
      }

/////3///////////////////////////////////////////////////////////

     if ( status == MI_OK)
     {
      //  SendData("how to run this");  //I  see
   //     PcdSetTmo(2);   /////////////////////////////////////////////
        ResetInfo();   
        MSndBuffer[0] = PICC_TRANSFER;        // transfer command code
        MSndBuffer[1] = trans_addr;
        MInfo.nBytesToSend   = 2;
        status = PcdSingleResponseCmd(PCD_TRANSCEIVE);
        
        if (status != MI_NOTAGERR)    // timeout occured
        {
            if (MInfo.nBitsReceived != 4)   // 4 bits are necessary
            {
               status = MI_BITCOUNTERR;
            }
            else                     // 4 bit received
            {
               MRcvBuffer[0] &= 0x0f; // mask out upper nibble
              // switch(MRcvBuffer[0])
              // {
              //    case 0x00: 
              //       status = MI_NOTAUTHERR;
              //       break;
              //    case 0x0a:
                     status = MI_OK;
              //       break;
              //    case 0x01:
              //       status = MI_VALERR;
              //       break;
              //    default:
              //       status = MI_CODEERR;
              //       break;
              // }
            }
        }
     
           PcdSetTmo(2);    ////////////////////////////////////////////short timeout   
     } 

////////////////////////////////////////////////////////////
   return status;
}
/*
///////////////////////////////////////////////////////////////////////
//           V A L U E   MANIPULATION   W I T H   BACKUP  
///////////////////////////////////////////////////////////////////////
char Mf500PiccValueDebit(unsigned char dd_mode, 
                         unsigned char addr, 
                         unsigned char *value)
{
   char status = MI_OK;
   
   PcdSetTmo(2);
   ResetInfo();   
   MSndBuffer[0] = dd_mode;        // Inc,Dec command code
   MSndBuffer[1] = addr;
   MInfo.nBytesToSend   = 2;
   status = PcdSingleResponseCmd(PCD_TRANSCEIVE);

   if (status != MI_NOTAGERR)   // no timeout error
   {
        if (MInfo.nBitsReceived != 4)   // 4 bits are necessary
        {
           status = MI_BITCOUNTERR;
        }
        else                     // 4 bit received
        {
           MRcvBuffer[0] &= 0x0f; // mask out upper nibble
           switch(MRcvBuffer[0])
           {
              case 0x00: 
                 status = MI_NOTAUTHERR;
                 break;
              case 0x0a:
                 status = MI_OK;
                 break;
              case 0x01:
                 status = MI_VALERR;
                 break;
              default:
                 status = MI_CODEERR;
                 break;
           }
        }
     }

     if ( status == MI_OK)
     {
        PcdSetTmo(4);     // long timeout 

        ResetInfo();   
        memcpy(MSndBuffer,value,4);
        MInfo.nBytesToSend   = 4;
        status = PcdSingleResponseCmd(PCD_TRANSCEIVE);
        
        if (status == MI_OK)    // no timeout occured
        {
            if (MInfo.nBitsReceived != 4)   // 4 bits are necessary
            {
               status = MI_BITCOUNTERR;
            }
            else                     // 4 bit received
            {
               MRcvBuffer[0] &= 0x0f; // mask out upper nibble
               switch(MRcvBuffer[0])
               {
                  case 0x00: 
                     status = MI_NOTAUTHERR;
                     break;
                  case 0x0a:
                     status = MI_OK;
                     break;
                  case 0x05:
                  case 0x01:
                     status = MI_VALERR;
                     break;
                  default:
                     status = MI_CODEERR;
                     break;
               }
            }
        }        
     }

   return status;
}
*/
/****************************************************************************
*                                                                           *
* Function:  Mf500PiccHalt                                                  *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
****************************************************************************/
char Mf500PiccHalt(void)
{
   char status = MI_CODEERR;

   PcdSetTmo(2);
   ResetInfo();   
   MSndBuffer[0] = PICC_HALT ;     // Halt command code
   MSndBuffer[1] = 0x00;         // dummy address
   MInfo.nBytesToSend   = 2;
   status = PcdSingleResponseCmd(PCD_TRANSCEIVE);   
   if (status)
   {
     // timeout error ==> no NAK received ==> OK
     if (status == MI_NOTAGERR || status == MI_ACCESSTIMEOUT)
        status = MI_OK;
   }
    //reset command register - no response from tag
   WriteRC(RegCommand,PCD_IDLE);
   return status; 
}


void SetBitMask(unsigned int reg,unsigned char mask)  
{
 	unsigned int idata reg1;
 	unsigned char mask1;
 	reg1=reg;
 	mask1=mask;
 	
     XBYTE[reg1] |= mask1;  // clear bit mask

}
void ClearBitMask(unsigned int reg,unsigned char mask)  
{
	unsigned char mask1;
	mask1=mask;

      XBYTE[reg] &= ~mask1;  // clear bit mask

}

void FlushFIFO(void)
{  
   SetBitMask(RegControl,0x01);
}
void WriteRC(unsigned int Address, unsigned char value)
{
   

    XBYTE[Address]=value;              // write value at the specified 
   
}
unsigned char ReadRC(unsigned int Address)
{

  
    Returnval=XBYTE[Address];              // read value at the specified 
   
	return(Returnval); 						// address
}
//////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////
void PcdSetTmo(unsigned char tmoLength)
{
   switch(tmoLength)
   {  // timer clock frequency 13,56 MHz
      case 1:                         // short timeout (1,0 ms)
         WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128选择定时器的分频值 如果TAutoRestart设置为1,定时器从
                                       //TReloadValue处自动重新开始向下计数,而不是向下计数到零
         WriteRC(RegTimerReload,0x6a);// TReloadVal = 'h6a =106(dec) 
         break;
      case 2:                       // medium timeout (1,5 ms)
         WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
         WriteRC(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec) 
         break;
      case 3:                       // long timeout (6 ms)
         WriteRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
         WriteRC(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec) 
         break;
      case 4:                       // long timeout (9.6 ms)
         WriteRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
         WriteRC(RegTimerReload,0xff);// TReloadVal = 'ff =255(dec) 
         break;
      case 5:
         WriteRC(RegTimerClock,0x01); // TAutoRestart=0,TPrescale=4*128
         WriteRC(RegTimerReload,0xff);// TReloadVal = 'ff =255(dec) 
      default:                       // short timeout (1,0 ms)
         WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
         WriteRC(RegTimerReload,tmoLength);// TReloadVal = tmoLength
         break;
   }     
}  

   
char PcdRfReset(unsigned int nms)
{
  
  char   status = MI_OK;

   ClearBitMask(RegTxControl,0x03);  // Tx2RF-En, Tx1RF-En disablen
   
   if (nms > 0)
  {
    nms=1000*nms;
    Delay(nms);  
    SetBitMask(RegTxControl,0x03);                    
  }
  return status; 
}  

void ResetInfo(void) 
{
            MInfo.cmd            = 0; 
            MInfo.status         = MI_OK;
            MInfo.irqSource      = 0; 
            MInfo.nBytesSent     = 0; 
            MInfo.nBytesToSend   = 0; 
            MInfo.nBytesReceived = 0; 
            MInfo.nBitsReceived  = 0; 
            MInfo.collPos        = 0; 
} 
           
char  PcdSingleResponseCmd(unsigned char cmd)
{     
   int i;
   char          status    = MI_OK;
   char          tmpStatus ;
   unsigned char lastBits;

   unsigned char irqEn     = 0x00;
   unsigned char waitFor   = 0x00;
   unsigned char timerCtl  = 0x00;

   WriteRC(RegInterruptEn,0x7F); // disable all interrupts
   WriteRC(RegInterruptRq,0x7F); // reset interrupt requests
   WriteRC(RegCommand,PCD_IDLE); // terminate probably running command

   FlushFIFO();                  // flush FIFO buffer

   // save info structures to module pointers
/*    MInfo.cmd=MInfo.cmd; 
    MInfo.status=MInfo.status; 
    MInfo.irqSource=MInfo.irqSource; 
    MInfo.nBytesSent=MInfo.nBytesSent; 
    MInfo.nBytesToSend=MInfo.nBytesToSend; 
    MInfo.nBytesReceived=MInfo.nBytesReceived; 
    MInfo.nBitsReceived=MInfo.nBitsReceived; 
    MInfo.collPos=MInfo.collPos;     */
 
    haveset=1;
   // initialising the ISR-Function pointer for mifare
   // protocol - do this after initialising the MpXXXX variables   
                         
   MInfo.irqSource = 0x0; // reset interrupt flags
  
   // depending on the command code, appropriate interrupts are enabled (irqEn)
   // and the commit interrupt is choosen (waitFor).
   switch(cmd)
   {
      case PCD_IDLE:                   // nothing else required
         irqEn = 0x00;
         waitFor = 0x00;
         break;
      case PCD_WRITEE2:                // LoAlert and TxIRq
         irqEn = 0x11;
         waitFor = 0x10;
         break;
      case PCD_READE2:                 // HiAlert, LoAlert and IdleIRq
         irqEn = 0x07;
         waitFor = 0x04;
         break;
      case PCD_LOADCONFIG:             // IdleIRq and LoAlert
      case PCD_LOADKEYE2:       

⌨️ 快捷键说明

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