亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 4095.txt

?? EM4095ID讀卡器的參考程序.對學習DI讀卡有比較好的用途.
?? TXT
字號:

#ifndef EM4095
#define EM4095

#ifndef RF_SHD
#define RF_RDY_CLK   PIN_C1         
#define RF_SHD       PIN_B1         
#define RF_MOD       PIN_B2         
#define RF_DEMOD_OUT PIN_C2         
#endif


#define RFBUFFER_SIZE 20
int8 RFbuffer[RFBUFFER_SIZE];
int8 RFbuffer_index = 0;
int8 RFbuffer_bitIndex = 0;
#define END_OF_RFBUFFER (RFbuffer_index == sizeof(RFbuffer))


int8 RF_readMode;
#define RF_MANCHESTER_DATA    0     
#define RF_MEASURE_WIDTHS     1     
#define RF_FIND_WIDTH         2     
#define RF_FIND_PATTERN       3     

int1  bitValue              = 1;
int1  storeData             = TRUE;
int1  RE_FE_TOGGLE          = 1;
int1  RF_widthFound         = FALSE;
int1  RF_patternFound       = FALSE;
int8  RF_widthToFind        = 0;
int8* RF_findWidths         = 0;
int8  RF_uncertainty        = 0;
int8  timer0_overflows      = 0;
int8  dataTransferred       = 0;
int16 old_clock             = 0;




void rf_init()
{
   output_low(RF_SHD);
   output_low(RF_MOD);

   setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);
   setup_ccp1(CCP_CAPTURE_RE);
   setup_ccp2(CCP_COMPARE_INT);

   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);
}

// Purpose:       Powers down the RF antenna
#define rf_powerDown()  output_high(RF_SHD);

// Purpose:       Powers up the RF antenna
#define rf_powerUp()    output_low(RF_SHD);


// Purpose:       Select which edge to begin reading data
void RF_readEdge(int1 edge)
{
   if(edge)
   {
      setup_ccp1(CCP_CAPTURE_RE);
      RE_FE_TOGGLE = 1;
   }
   else
   {
      setup_ccp1(CCP_CAPTURE_FE);
      RE_FE_TOGGLE = 0;
   }
}


// Purpose:       Interrupt service routine to handle compare 1 interrupts.
//                Reads incoming data from a transponder and stores it in
//                the global buffer.
#INT_CCP1
void isr_ccp1()
{
   int8  width;

   // Toggle between capturing rising and falling edges to meausure width
   if(RE_FE_TOGGLE)
   {
      setup_ccp1(CCP_CAPTURE_FE);
      RE_FE_TOGGLE = 0;
   }
   else
   {
      setup_ccp1(CCP_CAPTURE_RE);
      RE_FE_TOGGLE = 1;
   }

   // Calculate the width
   width = CCP_1 - old_clock;
   old_clock = CCP_1;

   switch(RF_readMode)
   {
      // Use to receive manchester formatted data from a transponder
      case RF_MANCHESTER_DATA:
      {
         if(width > 54)           // Check for a phase change
         {
            bitValue = ~bitValue; // Invert the save bit value
            storeData = TRUE;     // Force a bit store
         }

         if(storeData)
         {
            shift_right(RFbuffer+RFbuffer_index, 1, bitValue);
            ++dataTransferred;

            if(++RFbuffer_bitIndex == 8)
            {
               RFbuffer_bitIndex = 0;
               ++RFbuffer_index;
            }
         }

         storeData = ~storeData;
         break;
      }

      // Use to read high and low widths
      case RF_MEASURE_WIDTHS:
      {
         RFbuffer[RFbuffer_index++] = width;
         ++dataTransferred;

         break;
      }

      // Use to search for a certain pulse width
      case RF_FIND_WIDTH:
      {
         if(width > (RF_widthToFind - RF_uncertainty)
         && width < (RF_widthToFind + RF_uncertainty))
         {
            RF_widthFound = TRUE;
         }
         break;
      }

      case RF_FIND_PATTERN:
      {
         if(width > RF_findWidths[RFbuffer_index] - RF_uncertainty
         && width < RF_findWidths[RFbuffer_index] + RF_uncertainty)
         {
            if(++RFbuffer_index == dataTransferred)
            {
               RF_patternFound = TRUE;
            }
         }
         else
         {
            if(RFbuffer_index > 0)
            {
               int8 pos, i, j;
               pos = RFbuffer_index-1;   // Save the initial position

               // Try to match partial pattern
               while(--RFbuffer_index != 0)
               {
                  if(width > RF_findWidths[RFbuffer_index] - RF_uncertainty
                  && width < RF_findWidths[RFbuffer_index] + RF_uncertainty)
                  {
                     for(i=pos, j=RFbuffer_index-1; j!=255; --i, --j)
                     {
                        if(RF_findWidths[j] != RF_findWidths[i])
                        {
                           break;
                        }
                     }
                     if(j == 255)
                     {
                        break;
                     }
                  }
               }
            }
         }
         break;
      }
   }
}


// Purpose:       This interrupt service routine is used
//                to send data to a transponder
// Inputs:        None
// Outputs:       None
#INT_CCP2
void isr_ccp2()
{
   static int1 mode = 1;

   if(mode == 1 && !END_OF_RFBUFFER)
   {
      // Output high to modulate the antenna, so send a 0 with modulation pin high
      output_bit(RF_MOD, !bit_test(RFbuffer[RFbuffer_index], RFbuffer_bitIndex));

      if(++RFbuffer_bitIndex == 8)   // Increment the buffer indexes as necessary
      {
         RFbuffer_bitIndex = 0;
         ++RFbuffer_index;
      }

      CCP_2 += 30;            // Wait for half the bit period minus two RF periods
      mode = 0;               // Toggle the mode
   }
   else
   {
      output_low(RF_MOD);     // No modulation
      CCP_2 += 34;            // Wait for half the bit period plus 2 RF periods before sending another bit
      ++dataTransferred;      // Increment the bits transferred counter
      mode = 1;               // Toggle the mode
   }
}


// Purpose:       Interrupt for timer 0. Keeps track of the number of
//                overflows for timeouts.
// Inputs:        None
// Outputs:       None
#INT_RTCC
void isr_rtcc()
{
   ++timer0_overflows;
}


// Purpose:       Fill the buffer with data read from the basestation
// Inputs:        1) The number of bits to read
//                2) TRUE start on rising edge
//                   FALSE start on falling edge
// Outputs:       The number of bits read. Could be used to check for timeout
int8 RF_get(int8 numBits, int1 edge)
{
   RF_readEdge(edge);
   RF_readMode = RF_MANCHESTER_DATA;

   storeData         = TRUE;
   bitValue          = 0;
   RFbuffer_index    = 0;
   RFbuffer_bitIndex = 0;
   dataTransferred   = 0;
   timer0_overflows  = 0;
   old_clock         = 0;
   set_timer1(0);

   clear_interrupt(INT_CCP1);
   enable_interrupts(INT_CCP1);
   while(dataTransferred < numBits && timer0_overflows < 15);
   disable_interrupts(INT_CCP1);

   RFbuffer_index = 0;
   RFbuffer_bitIndex = 0;

   return dataTransferred;
}


// Purpose:       Send data from the buffer to the transponder
// Inputs:        1) Send numBits of data to the transponder
//                2) The index in the buffer to start at
//                3) The bit position at the index to start at
// Outputs:       None
void RF_send(int8 numBits, int8 index, int8 bitPosition)
{
   RFbuffer_index    = index;
   RFbuffer_bitIndex = bitPosition;
   dataTransferred   = 0;
   CCP_2             = 3;  //
   set_timer1(0);          // Cause an interrupt imediately

   enable_interrupts(INT_CCP2);
   while(dataTransferred < numBits);
   disable_interrupts(INT_CCP2);
}


// Purpose:       Search for a certain pulse width
// Inputs:        1) The width length in clocks
//                2) Uncertainty to search over a range
//                3) TRUE start on rising edge
//                   FALSE start on falling edge
//                ex) numClocks = 128; uncertainty = 6; range = 122 to 134
// Outputs:       TRUE if width was found, FALSE if not found
int1 RF_findWidth(int8 numClocks, int8 uncertainty, int1 edge)
{
   RF_readEdge(edge);

   RF_readMode          = RF_FIND_WIDTH;
   RF_widthToFind       = numClocks;
   RF_widthFound        = FALSE;
   RF_uncertainty       = uncertainty;
   timer0_overflows     = 0;
   old_clock            = 0;
   set_timer1(0);

   clear_interrupt(INT_CCP1);
   enable_interrupts(INT_CCP1);
   while(RF_widthFound == FALSE && timer0_overflows < 50);
   disable_interrupts(INT_CCP1);

   return RF_widthFound;
}


// Purpose:    Measure a number of pulse widths, both high and low
// Inputs:     1) The number of widths to measure
//             2) TRUE start on rising edge
//                FALSE start on falling edge
// Outputs:    The number of widths that were measured. If there is
//             no transponder in range, the timeout could occur.
int8 RF_measureWidths(int8 numWidths, int1 edge)
{
   RF_readEdge(edge);

   RF_readMode       = RF_MEASURE_WIDTHS;
   dataTransferred   = 0;
   RFbuffer_index    = 0;
   timer0_overflows  = 0;
   old_clock         = 0;
   set_timer1(0);

   clear_interrupt(INT_CCP1);
   enable_interrupts(INT_CCP1);
   while(dataTransferred < numWidths && timer0_overflows < 50);
   disable_interrupts(INT_CCP1);

   return dataTransferred;
}

// Purpose:    Measure a number of pulse widths, both high and low
// Inputs:     1) A pointer to an array of widths. It is safe to use RFbuffer.
//             2) The number of widths in the pattern
//             3) Uncertainty to search over a range
//             4) TRUE start on rising edge
//                FALSE start on falling edge
// Outputs:    The number of widths that were measured. If there is
//             no transponder in range, the timeout could occur.
int8 RF_findPattern(int8* widths, int8 numWidths, int8 uncertainty, int1 edge)
{
   RF_readEdge(edge);

   RF_readMode       = RF_FIND_PATTERN;
   RF_patternFound   = FALSE;
   RFbuffer_index    = 0;
   RF_findWidths     = widths;
   dataTransferred   = numWidths;
   RF_uncertainty    = uncertainty;
   timer0_overflows  = 0;
   old_clock         = 0;
   set_timer1(0);

   clear_interrupt(INT_CCP1);
   enable_interrupts(INT_CCP1);
   while(RF_patternFound == FALSE && timer0_overflows < 40);
   disable_interrupts(INT_CCP1);

   return RF_patternFound;
}


// Purpose:       Set every byte in the buffer to data
// Inputs:        None
// Outputs:       None
void RFbuffer_fill(int8 data)
{
   int i;

   for(i=0; i<sizeof(RFbuffer); ++i)
   {
      RFbuffer[i] = data;
   }
}


// Purpose:       Inverts every byte in the buffer
// Inputs:        None
// Outputs:       None
void RFbuffer_invert()
{
   int i;

   for(i=0; i<sizeof(RFbuffer); ++i)
   {
      RFbuffer[i] = ~RFbuffer[i];
   }
}


// Purpose:       Get a bit of data from the buffer and increment to the next bit
// Inputs:        None
// Ouputs:        A bit of data
int1 RFbuffer_getBit()
{
   int1 bit;

   if(!END_OF_RFBUFFER)
   {
      bit = bit_test(RFbuffer[RFbuffer_index], RFbuffer_bitIndex);

      if(++RFbuffer_bitIndex == 8)
      {
         ++RFbuffer_index;
         RFbuffer_bitIndex = 0;
      }
   }

   return bit;
}


// Purpose:       Get a byte of data from the buffer
// Inputs:        None
// Outputs:       The byte of data
int8 RFbuffer_getByte()
{
   if(!END_OF_RFBUFFER)
   {
      int8 i;
      int8 data;

      for(i=0; i<8; ++i)
      {
         shift_right(&data, 1, RFbuffer_getBit());
      }

      return data;
   }
}


// Purpose:       Set the value of the next bit in the buffer
// Inputs:        None
// Outputs:       None
void RFbuffer_setBit(int1 bit)
{
   if(!END_OF_RFBUFFER)
   {
      if(bit)
      {
         bit_set(RFbuffer[RFbuffer_index], RFbuffer_bitIndex);
      }
      else
      {
         bit_clear(RFbuffer[RFbuffer_index], RFbuffer_bitIndex);
      }

      if(++RFbuffer_bitIndex >= 8)
      {
         ++RFbuffer_index;
         RFbuffer_bitIndex = 0;
      }
   }
}

// Purpose:       Set the value of the next byte in the buffer
// Inputs:        None
// Outputs:       None
void RFbuffer_setByte(int8 data)
{
   if(!END_OF_RFBUFFER)
   {
      int8 i;
      for(i=0; i<8; ++i)
      {
         RFbuffer_setBit(bit_test(data, 7));
         rotate_left(&data, 1);
      }
   }
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区免费观看视频| 大白屁股一区二区视频| 国产一区二区三区在线观看精品 | 日韩免费电影网站| 精品久久久久久久一区二区蜜臀| 国产精品久久久久9999吃药| 日日摸夜夜添夜夜添亚洲女人| 国产成人自拍网| 欧美一卡在线观看| 亚洲丝袜精品丝袜在线| 国产另类ts人妖一区二区| 欧美日韩一级黄| 国产欧美精品国产国产专区| 欧美96一区二区免费视频| 91在线无精精品入口| 91麻豆精品国产91久久久使用方法| 国产性天天综合网| 日韩国产欧美三级| 欧美亚洲国产bt| 综合久久久久综合| 黄一区二区三区| 欧美三级午夜理伦三级中视频| 国产亚洲制服色| 日本美女一区二区三区视频| 91一区二区三区在线播放| 日韩免费在线观看| 日韩精品1区2区3区| 91久久精品网| 国产精品人人做人人爽人人添| 免费高清在线视频一区·| 欧美午夜精品理论片a级按摩| 中文幕一区二区三区久久蜜桃| 亚洲一区二三区| 欧美午夜片在线观看| 日韩伦理电影网| 一本色道a无线码一区v| 亚洲色图色小说| 日本韩国欧美一区| 亚洲欧洲日韩综合一区二区| 91在线视频免费观看| 国产精品久久久久久久久免费相片 | 国产一区二区精品久久91| 在线亚洲人成电影网站色www| 久久免费视频一区| 国产一区二区影院| 精品国产一区二区亚洲人成毛片 | 日本aⅴ亚洲精品中文乱码| 欧美一区二区三区视频在线观看| 亚洲欧美综合另类在线卡通| 91麻豆国产在线观看| 中文字幕一区二区日韩精品绯色| 99视频精品免费视频| 国产精品欧美一区喷水| 91理论电影在线观看| 亚洲免费观看高清在线观看| 国产老妇另类xxxxx| 日韩一区在线免费观看| 99vv1com这只有精品| 亚洲综合久久久久| 欧美日本国产视频| 寂寞少妇一区二区三区| 久久久www成人免费毛片麻豆| 盗摄精品av一区二区三区| 国产精品久久久久久福利一牛影视 | 在线观看成人免费视频| 亚洲成av人在线观看| 国产成人夜色高潮福利影视| 日本一区二区三区四区在线视频| 福利电影一区二区三区| 国产98色在线|日韩| 国产精品―色哟哟| 欧美日韩一区二区三区在线 | 经典三级一区二区| 亚洲欧美日韩人成在线播放| 欧美日产在线观看| 国产伦精一区二区三区| 一区二区三区免费在线观看| 欧美精品日韩一本| 成人h动漫精品一区二区| 一区二区视频在线| 91精品国产欧美一区二区| 夫妻av一区二区| 亚洲一区二区成人在线观看| 日韩美女天天操| 91视频91自| 久久精品噜噜噜成人88aⅴ | 99r国产精品| 午夜在线成人av| 成人免费在线视频| 日韩欧美在线网站| 欧美区视频在线观看| 丁香网亚洲国际| 久久精品国产一区二区三区免费看| 亚洲欧洲日韩女同| 欧美日韩国产综合久久| 91浏览器入口在线观看| 九九久久精品视频| 日韩精品福利网| 亚洲精品欧美激情| 国产精品三级视频| 日韩精品中午字幕| 91精品国产麻豆国产自产在线| 成人国产精品免费观看| 国产成人av电影在线播放| 日本伊人色综合网| 性做久久久久久久免费看| 日韩av中文字幕一区二区| 久久综合五月天婷婷伊人| 欧美性色欧美a在线播放| 国产一区二区三区四区在线观看| 日本大胆欧美人术艺术动态| 亚洲精品国产a| 亚洲视频在线观看三级| 国产亚洲欧美色| 精品国产一区二区三区久久影院| 91麻豆精品国产91久久久久久 | 粉嫩绯色av一区二区在线观看| 日本va欧美va瓶| 久久狠狠亚洲综合| 免费xxxx性欧美18vr| 久久精品国产亚洲一区二区三区| 午夜成人在线视频| 亚洲国产美国国产综合一区二区| 亚洲视频你懂的| 久久久不卡影院| 成人欧美一区二区三区在线播放| 久久嫩草精品久久久久| 国产嫩草影院久久久久| 国产亚洲成年网址在线观看| 国产精品超碰97尤物18| 国产精品亲子乱子伦xxxx裸| 中文字幕中文在线不卡住| 国产精品久久一级| 久久精品亚洲麻豆av一区二区 | 国产在线视频不卡二| 狠狠色丁香婷婷综合久久片| 日本欧美一区二区三区| 国产精品乡下勾搭老头1| 久久精品国产999大香线蕉| 国产精品91xxx| av中文字幕不卡| 欧美优质美女网站| 欧美日韩一区二区三区在线| 精品国产青草久久久久福利| 久久久久国产一区二区三区四区 | 久久久久久久网| 国产精品污www在线观看| 亚洲一区在线观看免费观看电影高清| 亚洲人成7777| 午夜精品一区二区三区免费视频| 黄页视频在线91| av电影在线观看不卡| 欧美日韩国产成人在线免费| 日韩一区二区免费在线电影| 国产精品欧美精品| 亚洲小少妇裸体bbw| 亚洲成人精品在线观看| 国产一区二区三区免费在线观看| 国产综合成人久久大片91| 99久久精品国产一区| 欧美日韩不卡在线| 日韩毛片在线免费观看| 亚洲高清不卡在线观看| 成人黄色av电影| 欧美裸体一区二区三区| 国产女同性恋一区二区| 亚洲国产一区二区三区| 懂色av噜噜一区二区三区av| 在线免费观看不卡av| 国产情人综合久久777777| 夜夜精品浪潮av一区二区三区| 国产一区二区成人久久免费影院| 91亚洲精华国产精华精华液| 久久免费视频色| 亚洲一区免费视频| 高清不卡在线观看av| 欧美视频在线观看一区| 国产精品日日摸夜夜摸av| 免费的成人av| 色偷偷成人一区二区三区91| 久久久综合精品| 18欧美亚洲精品| 激情成人午夜视频| 欧美无乱码久久久免费午夜一区| 26uuu成人网一区二区三区| 夜夜精品视频一区二区| 成人午夜电影小说| 精品久久久久一区二区国产| 国产精品无圣光一区二区| 午夜亚洲福利老司机| 波多野结衣中文字幕一区| 91精品国产综合久久久久久漫画 | 91猫先生在线| 51久久夜色精品国产麻豆| 亚洲午夜三级在线| youjizz国产精品| 国产精品久久久久久久久晋中| 精品一区在线看| 欧美tickling网站挠脚心| 日本欧美韩国一区三区|