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

📄 src.c

📁 mifare的rc500读卡器的demo程序
💻 C
字号:
#define OSC_FREQ                22118400L
                //*note: when using the 8051RD2 (in 6 clk instructiion cycle,
                //        use a crystal that is half the value state in OSC_FREQ.
                //      Example: for OSC_FREQ=22118400, use 11059000 crystal.
#define BAUD_CNT                 7
#define    BAUD_115200                256 - (OSC_FREQ/192L)/115200L    // 255
#define    BAUD_57600                256 - (OSC_FREQ/192L)/57600L    // 254
#define    BAUD_38400                256 - (OSC_FREQ/192L)/38400L    // 253
#define    BAUD_28800                256 - (OSC_FREQ/192L)/28800L    // 252
#define    BAUD_19200                256 - (OSC_FREQ/192L)/19200L    // 250
#define    BAUD_14400                256 - (OSC_FREQ/192L)/14400L    // 248
#define    BAUD_9600                256 - (OSC_FREQ/192L)/9600L    // 244
#ifdef __SRC
uchar code BaudRateTable[BAUD_CNT] = {
                               BAUD_115200,
                               BAUD_57600,
                               BAUD_38400,
                               BAUD_28800,
                               BAUD_19200,
                               BAUD_14400,
                               BAUD_9600
                      };
#else
extern uchar code BaudRateTable[BAUD_CNT];
#endif
#ifdef __SRC
uint code CmpTable[BAUD_CNT + 1]   = {
                              0x078,
                              0x095,
                              0x129,
                              0x1BD,
                              0x252,
                              0x37A,
                              0x4A3,
                              0x6F4
                      };
#else
extern uint code CmpTable[BAUD_CNT + 1];
#endif
void     auto_baud (void)
{
  if (autoBaud && !RXD)    // if autobaud is enable and RXD pin is low
  {
    TR0 = TRUE;     // Start timer0
    do
    {
      if (RXD)        // When RXD pin is high
      {
        Capt_L = TL0;
        Capt_H = TH0;
        do
        {
          if (!RXD)
          {
            break;
          }
        } while (!TF0);
      }
    } while (!TF0);
    TR0 = FALSE;
    TF0 = FALSE;
    Capt = ((uint)Capt_H << 5) | ((uint)Capt_L & 0x001F);
        
    for (BaudRate = BAUD_CNT; BaudRate >= 0; BaudRate--) 
    {
      if (Capt >= CmpTable[BaudRate])
      {
        break;
      }
    }
    if (BaudRate < 0 || BaudRate == BAUD_CNT) // Error baud count
    {
      TH0    = 0;
      TL0    = 0;
      Capt_L = 0;
      Capt_H = 0;
      return;
    }
    TMOD = 0x21;                       // Timer 0, mode 1, 16-bit counter
    TH1  = BaudRateTable[BaudRate];
    TL1  = TH1;
    TR1  = TRUE;
    TH0  = 0xE0;
    TL0  = 0;
    TR0  = TRUE;
    while (!TF0);                   // Wait 4.4 ms
    TR0  = FALSE;
    TF0  = FALSE;
    ET0  = TRUE;
    autoBaud = FALSE;        // Baudrate had been choose, disable autobaud
    SBUF = NAK;
    while (!TI);
    TI   = FALSE;
    RI   = FALSE;
    ES   = TRUE;
  }
}

⌨️ 快捷键说明

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