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

📄 demo.c.bak

📁 我自己写的RFID读写程序(U2270)供大家参考
💻 BAK
字号:
#include <reg52.h>
//#include <string.h>
//#include <stdio.h>


//u2270b 读卡子程序,利用T0解码
#define uchar unsigned char

#define EMBIT P1^1

uchar OLDEM=0;

        SCON |= 0xc0;  //开启帧错误位。UART设置为9位。
        TCON |= 0x00;  
        PCON &= 0x7f; 
        TMOD |= 0x11;  //定义T0工作模式定时器0作为双8位定时计数		器。
		               //TL0为8位定时/计数器通过标准定时器0控制位控制。
		               //TH0仅作为8位定时器,由定时器1控制位控制,此模式下定时/计数器1关闭。

bit bitchange(void)//检查数据
    {
      uchar outtime;
      bit bitc;
      bitc=1;
      outtime=200;
bitchlp1:      
      if (((EMBIT==OLDEM) && (outtime!=0))==1)//数据正确且当outtime不为0时循环
       {
         outtime--;
         rst_wdog();
         goto bitchlp1;
       }
      if (outtime==0)
       {
        bitc=0;
       }
      OLDEM=EMBIT;
      return bitc;
    }

bit findlongpluse(void)
    {
      bit retbit;
      retbit=1;
      OLDEM=EMBIT;
      TH0=0;
      TL0=0;
      TR0=0;
      if (bitchange()==0)
       {
         goto errfindlong;
       }
      TR0=1;
findllp1:
      if (bitchange()==0)
       {
         goto errfindlong;
       }
      TR0=0;
      if (TH0>2)
       {
         goto errfindlong;
       }
      if (TH0==2)
       {
         goto findllp2;
       }
      if ((TH0==1) && (TL0>98)) 
       {
         goto findllp2;
       }
      if ((TH0==0) && (TL0<100))
       {
         goto errfindlong;
       }
      TH0=0;
      TL0=0;
      TR0=1;
      goto findllp1;
errfindlong:retbit=0;
findllp2:   return retbit;
    }

bit readbit(void)
   {
     bit retbit;
     retbit=1;
     TH0=0;
     TL0=0;
     TR0=1;
     if (bitchange()==0)
      {
        goto errreadbit;
      }
     TR0=0;
     if (TH0>2)
      {
       goto errreadbit;
      }
     if ((TH0==0) && (TL0<100))
      {
        goto errreadbit;
      }
     if (TH0==2)
      {
       goto okreadbit;
      }
     if ((TH0==1) && (TL0>35))
      {
        goto okreadbit;
      }
     TH0=0;
     TL0=0;
     TR0=1;
     if (bitchange()==0)
      {
        goto errreadbit;
      }
     TR0=0;
     if (TH0>1)
      {
       goto errreadbit;
      }
     if ((TH0==0) && (TL0<100))
      {
       goto errreadbit;
      }
     if ((TH0==1) && (TL0>35))
      {
       goto errreadbit;
      }
     goto okreadbit;
errreadbit:retbit=0;
okreadbit:return retbit;
   }

bit findbegin(void)
    {
     bit retbit;
     uchar tempdata;
     uint fk;
     fk=1000;
     retbit=1;
     tempdata=0;
     if (findlongpluse()==0)
      {
        goto errfindbegin;
      }
findbelp1:
     if (readbit()==0)
      {
       goto errfindbegin;
      }
     if (OLDEM==0)
      {
       if (tempdata==0xff)
        {
         goto okfindbegin;
        }
       tempdata=tempdata<<1;
       tempdata=tempdata | 1;
      }
     else
      {
       tempdata=tempdata<<1;
      }
     fk--;
     if (fk==0)
      {
       goto errfindbegin;
      }
     goto findbelp1;
errfindbegin: retbit=0;
okfindbegin:return retbit;
    }

bit rdemdata(void)
    {
      bit retbit;
      uchar i;
      uchar j;
      uchar parity;
      uchar emcheck;
      emcheck=0;
      retbit=1;
      if (findbegin()==0)
       {
        goto errrdem;
       }
      for (j=0;j<=4;j++)
       {
        parity=0;
        for (i=1;i<=4;i++)
         {
          if (readbit()==0)
           {
            goto errrdem;
           }
          emdata[j]=emdata[j]<<1;
          if (OLDEM==0)
           {
             emdata[j]=emdata[j] | 1;
             parity++;
           }
         }
        if (readbit()==0)
         {
          goto errrdem;
         }
        if (OLDEM==0)
         {
           parity++;
         }
        if ((parity & 1)==1)
         {
           goto errrdem;
         }
        parity=0;
       
       for (i=1;i<=4;i++)
         {
           if (readbit()==0)
            {
             goto errrdem;
            }
           emdata[j]=emdata[j]<<1;
           if (OLDEM==0)
            {
             emdata[j]=emdata[j] | 1;
             parity++;
            }
          }
        if (readbit()==0)
         {
              goto errrdem;
         }
        if (OLDEM==0)
         {
              parity++;
         }
        if ((parity&1)==1)
            {
              goto errrdem;
            }
        }
        for (i=1;i<=5;i++)
         {
          if (readbit()==0)
           {
             goto errrdem;
           }
          emcheck=emcheck<<1;
          if (OLDEM==0)
           {
             emcheck=emcheck | 1;
           }
         }
        if ((emcheck&1)==1)
         {
           goto errrdem;
         }
        emcheck=emcheck<<3;
        for (j=0;j<=3;j++)
         {
          parity=0;
          for (i=0;i<=4;i++)
           {
             if (((emdata[i]<<j) & 0x80)==0x80)
              {
                parity++;
              }
             if (((emdata[i]<<j) & 0x8)==0x8)
              {
               parity++;
              }
           }
          if (((emcheck<<j) & 0x80)==0x80)
           {
             parity++;
           }
          if ((parity%2)==1)
           {
            goto errrdem;
           }
         }
        goto okrdemdata;
errrdem:retbit=0;
okrdemdata:return retbit;
    }



⌨️ 快捷键说明

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