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

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

?? rds.c

?? RDS技術是利用調頻多工技術
?? C
字號:
//-------------------------------------------------------------------------
// RDS Decoding
// COPYRIGHT (C) 2003, Enbia Technology Inc.
// Target: 8031
// AUTHOR: STEVEN LUO
//
// Revision History:
// 2003/2/16 - Original Version
//-------------------------------------------------------------------------
#include <reg51.h>
#include <types.h>
#include <intrins.h>
#include <bin.h>

//#define DEBUG

// Gloables ------------------ //
WORD PICode;        //
BYTE GroupType;        //
BYTE PTY;          //
BOOL bTP;          // TP
BOOL bMS;          // M/S
BOOL bTA;          // TA

BOOL bRDSOk = 0;      // set when group 0 ready
BOOL bTextOk = 0;      // set when group 2 ok, Text ready, need 16 groups

extern WORD aRDS_Text[32];  // radio text 
extern WORD aPS[4];      // Service name, 8 chars

// Locals ------------------- //

static WORD aRDS_Block[4];  // Groupe = 4 blocks
static WORD rdsdata[2];    // byte 1, byte 2
              // 0 0 0 0 0 0 c9 c8 c7 c6 c5 c4 c3 c2 c1 c0
static WRD crc;
static BYTE pscnt;
static BYTE textcnt;
BYTE bytecnt;

#ifdef DEBUG
  sbit PIN_RDS_DATA = P3^1;  // using 89c51
  sbit PIN_TEST = P3^7;    
#else
  sbit PIN_RDS_DATA = P3^7;  // using 89c2051
  sbit PIN_TEST = P1^7;O    
#endif

//-------------------------------------------------------------------------
// RDS Callback
//-------------------------------------------------------------------------
void RDS_BLOCK_Auto_Update(void){      
BYTE chr_addr;
static BOOL bTextAB = 0;

  PICode = aRDS_Block[0];          
  GroupType = (aRDS_Block[1] >> 11) & 0x1f;  
  PTY = (aRDS_Block[1] >> 5) & 0x1f;    

  switch (GroupType){            
    case 0:  // Group 0A          
    case 1: // Group 0B          
      bTP = aRDS_Block[1] & 0x0400;    // bit 10
      bTA = aRDS_Block[1] & 0x0010;    // bit 4
      bMS = aRDS_Block[1] & 0x0008;    // bit 3      

      chr_addr = aRDS_Block[1] & 0x03;
      if (chr_addr == 0) pscnt = 0; else pscnt ++;
      if (chr_addr == pscnt) aPS[chr_addr] = aRDS_Block[3]; else bRDSOk = 0;
      if (pscnt == 3) bRDSOk = 1;
      break;

    case 4:  // Group 2A
      // if TextAB changed, should update
      if (bTextAB != (aRDS_Block[1] & 0x10)){    // Text AB : bit 5 in block 1
        bTextAB = (aRDS_Block[1] & 0x10);
        textcnt = 0;
      }

      chr_addr = aRDS_Block[1] & 0x0f;

      if (chr_addr == 0) textcnt = 0; else textcnt ++;
      if (chr_addr == textcnt) {
        aRDS_Text[chr_addr] = aRDS_Block[2]; aRDS_Text[chr_addr + 1] = aRDS_Block[3]; 
        // if "0x0d" found, the text finish.
        if (((aRDS_Text[chr_addr] & 0x00ff) == 0x000d) || ((aRDS_Text[chr_addr] & 0xff00) == 0x0d00) || ((aRDS_Text[chr_addr+1] & 0x00ff) == 0x000d) ||  ((aRDS_Text[chr_addr+1] & 0xff00) == 0x0d00)){
          bTextOk = 1; bytecnt=textcnt*2;textcnt = 0; 
        }
       }
      else { 
        bTextOk = 0;
      }
      if (textcnt >= 16) {bTextOk = 1; bytecnt=textcnt*2;textcnt = 0;}
      break;    

    case 5: // Group 2B  
      // if TextAB changed, should update
      if (bTextAB != (aRDS_Block[1] & 0x10)){    // Text AB : bit 5 in block 1
        bTextAB = (aRDS_Block[1] & 0x10);
        textcnt = 0; 
      }
        
      chr_addr = aRDS_Block[1] & 0x0f;
      if (chr_addr == 0) textcnt = 0; else textcnt ++;
      if (chr_addr == textcnt) {
        aRDS_Text[chr_addr] = aRDS_Block[2]; 
        // if "0x0d" found, the text finish.
        if (((aRDS_Text[chr_addr] & 0x00ff) == 0x000d) || ((aRDS_Text[chr_addr] & 0xff00) == 0x0d00)){
          bTextOk = 1; bytecnt=textcnt;textcnt = 0; 
        }
       }
      else { 
        bTextOk = 0;
      }
      if (textcnt >= 16) {bTextOk = 1;bytecnt=textcnt; textcnt = 0;}
      break;    

    default: 
      break;            
  }  
}

// --------------------------------------------------------------
// RDS_CRCCheck
// --------------------------------------------------------------
void RDS_CRCCheck(void){
bit bCFlag;
BYTE TempH, TempL;

  TempH = rdsdata[0] / 0x100;
  TempL = rdsdata[0] % 256;

  //C9
  ACC = TempH & 0x7c;
  bCFlag = P;
  ACC = TempL & 0x3e;
  bCFlag ^= P;
  if(bCFlag)crc = 0x200;

  //C8
  ACC = TempH & 0x3e;
  bCFlag = P;
  ACC = TempL & 0x1f;
  bCFlag ^= P;
  if(bCFlag) crc |= 0x100;

  //C7
  ACC = TempH & 0x63;
  bCFlag = P;
  ACC = TempL & 0x31;
  bCFlag ^= P;
  if(bCFlag) crc |= 0x80;

  //C6
  ACC = TempH&0xcd;
  bCFlag = P;
  ACC = TempL & 0xa6;
  bCFlag ^= P;
  if(bCFlag)crc |= 0x40;

  //C5
  ACC = TempH & 0xe6;
  bCFlag = P;
  ACC = TempL & 0xd3;
  bCFlag ^= P;
  if(bCFlag)crc |= 0x20;

  //C4
  ACC = TempH & 0x8f;
  bCFlag = P;
  ACC = TempL & 0x57;
  bCFlag ^= P;
  if(bCFlag) crc |= 0x10;

  //C3
  ACC = TempH & 0x3b;
  bCFlag = P;
  ACC = TempL & 0x95;
  bCFlag ^= P;
  if(bCFlag)crc |= 0x08;

  //C2
  ACC = TempH & 0xe1;
  bCFlag = P;
  ACC = TempL & 0xf4;
  bCFlag ^= P;
  if(bCFlag)crc |= 0x04;

  //C1
  ACC = TempH & 0xf0;
  bCFlag = P;
  ACC = TempL & 0xfa;
  bCFlag ^= P;
  if(bCFlag) crc |= 0x02;

  //C0
  ACC = TempH & 0xf8;
  bCFlag = P;
  ACC = TempL & 0x7d;
  bCFlag ^= P;
  if(bCFlag) crc |= 0x01;
}

// -------------------------------------------------- //
#define OFFSET_A      0x00fc      // 0x00fc
#define OFFSET_B      0x0198      // 0x0198
#define OFFSET_C      0x0168      // 0x0168
#define OFFSET_C2      0x0350      // 0x0350
#define OFFSET_D      0x01b4      // 0x01b4
// --------------------------------------------------------------
// Interrupt Handle Routines
// --------------------------------------------------------------
// ISREX0:EXTERNAL INTERRUPT 0 SERVICE ROUTINE 
static void ISREX0() interrupt 0{
static BYTE seq = 0;
static BOOL bSynch = 0;
static BYTE bitcnt;

  PIN_TEST = 1;

  rdsdata[0] <<= 1; if (rdsdata[1] & 0x0200) rdsdata[0] |= 0x0001;
  rdsdata[1] <<= 1;
  if (PIN_RDS_DATA) rdsdata[1] |= 0x0001; else rdsdata[1] &= 0x03fe;
  
  rdsdata[1] &= 0x03ff;
  
  bitcnt ++;   

  if (!bSynch){
    crc = 0;
    RDS_CRCCheck();    // Input = rdsdata[0], output = crc;
    crc ^= rdsdata[1];

    if (crc == OFFSET_A){
      seq = 1; bSynch = 1; bitcnt = 0; aRDS_Block[0] = rdsdata[0]; 
    }
  }
  else if (bitcnt == 26){
    bitcnt = 0;

    crc = 0;
    RDS_CRCCheck();    // Input = rdsdata[0], output = crc;
    crc ^= rdsdata[1];

    // -------------------------- Syn Checking ----------------------- //
    if ((crc == OFFSET_A) && (seq == 0)){
      seq = 1; aRDS_Block[0] = rdsdata[0]; 
    }
    else if ((crc == OFFSET_B) && (seq == 1)){
      seq = 2; aRDS_Block[1] = rdsdata[0]; 
    }
    else if ((crc == OFFSET_C) && (seq == 2)){
      seq = 3; aRDS_Block[2] = rdsdata[0]; 
    }
    else if ((crc == OFFSET_C2) && (seq == 2)){
      seq = 3; aRDS_Block[2] = rdsdata[0]; 
    }
    else if ((crc == OFFSET_D) && (seq == 3)){
      seq = 0; aRDS_Block[3] = rdsdata[0]; 
      RDS_BLOCK_Auto_Update();
    }
    else {  // Lost sychronization
      bSynch = 0; bRDSOk = 0; bTextOk = 0;
    }
  }          

  PIN_TEST = 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品白丝jk白祙喷水网站| 亚洲国产成人va在线观看天堂| 欧美性大战久久久| 精品午夜久久福利影院| 亚洲人吸女人奶水| 精品国产一二三区| 欧美视频精品在线| 成人动漫中文字幕| 麻豆传媒一区二区三区| 亚洲卡通欧美制服中文| 国产欧美日韩另类视频免费观看| 欧美日本乱大交xxxxx| 成人免费视频视频| 美日韩一区二区三区| 亚洲免费观看高清| 亚洲国产高清aⅴ视频| 日韩一区二区三区四区| 欧美性一级生活| av在线综合网| 国产精品一区二区久激情瑜伽 | 欧美电影免费观看高清完整版在 | 91精品在线一区二区| 91香蕉视频在线| 国产成人精品亚洲日本在线桃色| 日本三级亚洲精品| 天堂va蜜桃一区二区三区| 亚洲人午夜精品天堂一二香蕉| 国产精品三级电影| 久久九九全国免费| 久久亚区不卡日本| 久久久亚洲精品石原莉奈| 日韩精品一区二区三区四区视频| 欧美久久一区二区| 欧美人与性动xxxx| 欧美日韩国产首页| 欧美日韩在线免费视频| 在线观看国产一区二区| 色呦呦日韩精品| 91丨porny丨首页| av网站一区二区三区| 成人午夜碰碰视频| 成人ar影院免费观看视频| 国产成人av福利| 成人午夜免费av| jvid福利写真一区二区三区| 成人影视亚洲图片在线| 不卡一区中文字幕| 91在线观看免费视频| 91麻豆视频网站| 在线日韩av片| 欧美卡1卡2卡| 精品福利av导航| 国产情人综合久久777777| 亚洲国产精品v| 中文字幕五月欧美| 亚洲一区二区视频在线| 日韩精品每日更新| 极品销魂美女一区二区三区| 国产剧情一区在线| 9色porny自拍视频一区二区| 91美女蜜桃在线| 欧美精品九九99久久| 日韩美女视频在线| 国产偷v国产偷v亚洲高清| 国产精品久久久久久久久动漫| 中文字幕制服丝袜成人av| 一区二区三区中文在线| 亚洲国产色一区| 热久久免费视频| 懂色一区二区三区免费观看| 91亚洲男人天堂| 91精品国产综合久久久久久| 久久久www成人免费毛片麻豆| 国产精品色哟哟网站| 亚洲啪啪综合av一区二区三区| 亚洲国产视频一区二区| 国产一区激情在线| 91亚洲精华国产精华精华液| 7878成人国产在线观看| 久久精品综合网| 亚洲成人激情综合网| 经典三级在线一区| 色哟哟精品一区| 日韩午夜在线影院| 亚洲欧洲日韩女同| 日韩av一区二区三区四区| 国产盗摄一区二区| 精品婷婷伊人一区三区三| 精品国产青草久久久久福利| 日韩理论在线观看| 麻豆国产精品官网| 在线一区二区视频| 久久欧美一区二区| 亚洲一区二区三区免费视频| 国产一区二区看久久| 欧美影院精品一区| 国产片一区二区三区| 天天av天天翘天天综合网| 国产91精品露脸国语对白| 欧美顶级少妇做爰| 亚洲特级片在线| 激情欧美一区二区| 欧美日韩国产经典色站一区二区三区| 国产校园另类小说区| 日产欧产美韩系列久久99| av亚洲精华国产精华精| 久久亚洲一级片| 天堂在线一区二区| 欧美在线视频日韩| 国产精品美女一区二区在线观看| 久久国产精品99久久久久久老狼| 91福利视频在线| 国产精品久久久久三级| 国产精品影视在线| 日韩视频在线一区二区| 亚洲一区二区在线视频| 99久久99久久久精品齐齐| 久久久久久久久免费| 麻豆精品一二三| 91精品婷婷国产综合久久竹菊| 亚洲男人的天堂一区二区| 成人妖精视频yjsp地址| 久久网这里都是精品| 久久精品国产99久久6| 4438亚洲最大| 日本午夜精品一区二区三区电影| 欧美日韩国产电影| 亚洲成av人综合在线观看| 欧美色国产精品| 一区二区三区欧美亚洲| 91麻豆精品在线观看| 最好看的中文字幕久久| 91日韩精品一区| 综合在线观看色| 99re视频精品| 最新热久久免费视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 九色综合狠狠综合久久| 91精品久久久久久蜜臀| 五月天精品一区二区三区| 欧美日韩午夜在线| 午夜a成v人精品| 91麻豆精品国产自产在线| 日本一区中文字幕| 在线不卡中文字幕| 日韩和欧美一区二区三区| 欧美精品日韩一本| 喷水一区二区三区| 精品捆绑美女sm三区| 精品一二三四区| 国产欧美日韩激情| 成人av集中营| 亚洲伊人色欲综合网| 7777精品伊人久久久大香线蕉最新版 | 56国语精品自产拍在线观看| 男女性色大片免费观看一区二区| 日韩一区二区三区观看| 极品瑜伽女神91| 欧美激情艳妇裸体舞| 色综合色狠狠综合色| 亚洲国产精品久久久男人的天堂| 欧美一区二区三区视频免费| 国产在线视频一区二区三区| 欧美国产激情一区二区三区蜜月| 91视频在线看| 三级一区在线视频先锋 | 亚洲品质自拍视频| 制服丝袜av成人在线看| 国内不卡的二区三区中文字幕| 国产欧美一区二区三区鸳鸯浴| 99国产精品久久久久久久久久久| 一区二区三区欧美久久| 日韩欧美在线观看一区二区三区| 国产成人免费视频精品含羞草妖精| 亚洲伦理在线免费看| 欧美美女直播网站| 国产乱码精品一品二品| 亚洲一区二区精品久久av| 日韩精品一区国产麻豆| 99国产精品久久久久久久久久久| 婷婷国产v国产偷v亚洲高清| 国产日产欧美一区| 欧美视频一区在线观看| 国产综合久久久久影院| 亚洲色图欧美偷拍| 精品播放一区二区| 91久久精品一区二区三| 九九久久精品视频| 亚洲愉拍自拍另类高清精品| 精品国产凹凸成av人网站| 91网上在线视频| 精品在线播放免费| 亚洲韩国精品一区| 国产精品久久久久一区| 日韩女优av电影| 91激情在线视频| 丰满白嫩尤物一区二区| 日本欧美一区二区三区| 一区二区视频在线| 欧美国产精品中文字幕|