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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 7816.c

?? cpu卡驅(qū)動程序,帶ESAM模塊認(rèn)證,已經(jīng)調(diào)試通過的
?? C
?? 第 1 頁 / 共 2 頁
字號:
//**********************************************************************************
// Copyright (c), 1994 - 2007
// 文件名:7816.c
// 創(chuàng)建人:
// 日期:  2007.4.28
// 描述:  IEC 7816協(xié)議在電能表CPU卡片和SAM上的應(yīng)用
// 接口數(shù)據(jù):
//   bSamCardFlag:  位變量,1--卡片命令         0--ESAM命令
//   bRESPAUTOFlag: 位變量,1--自動取響應(yīng)       0--不自動取響應(yīng)
// 接口函數(shù):
//   停活卡片或ESAM
//   void Deactivation(void);
//     返回:無
//     參數(shù):無
//   復(fù)位應(yīng)答				    
//   unsigned char resetICC(unsigned char *len, unsigned char *resp);
//     返回:0為成功,其它為不成功。
//     參數(shù):len為返回?cái)?shù)據(jù)長度指針,resp為返回?cái)?shù)據(jù)指針
//   發(fā)送命令并接收返回的數(shù)據(jù)
//   unsigned char command(unsigned char len, unsigned char *comm, unsigned char *lenr, unsigned char *resp);	
//     返回:0為成功,其它為不成功。
//     參數(shù):len為命令數(shù)據(jù)長度,comm為為命令數(shù)據(jù)指針
//           lenr為返回?cái)?shù)據(jù)長度指針,resp為返回?cái)?shù)據(jù)指針
// 修改人:
// 日期:070525
// 描述:command中的兩處bug;復(fù)位時(shí)控制時(shí)鐘
// 單片機(jī)型號:PIC18F65J10
// 時(shí)鐘:       Fosc = 4Mz(外部時(shí)鐘)
// 指令周期:   0.25us(4Mz)
// 版本:       V1.0
//**********************************************************************************

// 硬件接口操作函數(shù)

unsigned char GetIO(void);						// 讀I/O狀態(tài)
void SetVCC(unsigned char s);					// 置VCC狀態(tài)
void Activation(void);							// 激活

// 基本函數(shù)

void delayETU(unsigned char i);					// 延時(shí),i為 1/10 ETU
void delay3us(void);                            // 延時(shí)3us
unsigned char sendAByte(unsigned char c);		// 發(fā)送一個(gè)8位數(shù)據(jù),返回0為成功,其它為不成功
unsigned char receiveAByte(unsigned char *c);	// 接收一個(gè)8位數(shù)據(jù),返回0為成功,其它為不成功

// 接口函數(shù)

void Deactivation(void);						// 停活
unsigned char resetICC(unsigned char *len, unsigned char *resp);	           
  // 復(fù)位應(yīng)答,返回0為成功,其它為不成功。resp為返回?cái)?shù)據(jù),len為返回?cái)?shù)據(jù)長度
unsigned char command(unsigned char len, unsigned char *comm, unsigned char *lenr, unsigned char *resp);	
  // 發(fā)送命令并接收返回的數(shù)據(jù)





// 程序體

// 以下注釋部分為測試程序

/*unsigned char Buflen;
unsigned char Buff[0x50];

void main()
{
  unsigned char ReturnFlag;
  unsigned char c;
  
  SetIO_IN;
  OSCCON = 0x60;
  OSCTUNEbits.PLLEN = 1;
  Nop();
  Nop();
  Nop();
  Nop();
  SetRST_OUT;
  SetEsamCommFlag();
  PORTHbits.RH3 = 0;

//  for (;;)
//  {
//    PORTHbits.RH3 = 1;
//    delayETU(10);
//    PORTHbits.RH3 = 0;
//  }
  do
  {
    ReturnFlag = resetICC(&Buflen, Buff);
    Nop();
  }
  while(ReturnFlag);
  Nop();
  do
  {
//    Buff[0] = 0x00;
//    Buff[1] = 0x84;
//    Buff[2] = 0x00;
//    Buff[3] = 0x00;
//    Buff[4] = 0x08;
    Buff[0] = 0x00;
    Buff[1] = 0xD6;
    Buff[2] = 0x83;
    Buff[3] = 0x00;
    Buff[4] = 0x02;
    Buff[5] = 0x00;
    Buff[6] = 0x01;
    ReturnFlag = command(7,Buff,&Buflen,Buff);
    Buff[0] = 0x00;
    Buff[1] = 0xB0;
    Buff[2] = 0x83;
    Buff[3] = 0x00;
    Buff[4] = 0x02;
    ReturnFlag = command(5,Buff,&Buflen,Buff);
    Nop();
  }
  while(ReturnFlag);
  
  while(1);
}*/

//*********************************************************************************
// 函數(shù)名:  unsigned char GetIO(void)
// 返回:   卡片或ESAM的IO狀態(tài)
// 描述:   根據(jù) bSamCardFlag 值返回IO狀態(tài)
//*********************************************************************************

unsigned char GetIO(void)
{
  if (bSamCardFlag)								// 1--卡片命令  0--ESAM命令
    return ICCData;
  else return EsamData;
}

//*********************************************************************************
// 函數(shù)名: void SetVCC(unsigned char s)
// 輸入:   s 為VCC管腳狀態(tài)
// 描述:   根據(jù) bSamCardFlag 設(shè)置卡片或ESAM的VCC端狀態(tài)
//*********************************************************************************
void SetVCC(unsigned char s)					// 置VCC狀態(tài)
{
//  if (bSamCardFlag)
//    ICCVCC = s;
//  else EsamVCC = s;
}

//*********************************************************************************
// 函數(shù)名: void Activation(void)
// 描述:   激活卡片或ESAM
//*********************************************************************************
void Activation(void)
{
  SetRST_OUT;						
  SetCLKControl_OUT;
  SetCLKControl_L;
  SetRST_L;     								// RST置為狀態(tài)L
  SetVCC(VCC_ACTIVE);							// VCC被加電
  SetIO_IN;     								// IO置為接收模式
  
//  SetIO_Z;								
}

//*********************************************************************************
// 函數(shù)名: void Deactivation(void)
// 描述:   停活卡片或ESAM
//*********************************************************************************
void Deactivation(void)
{
  SetRST_L;								// RST置為L
  SetCLKControl_L;						// CLK置為L
  SetIO_A;      						// IO置為A
  SetVCC(VCC_INACTIVE);					// VCC停活
}

//*********************************************************************************
// 函數(shù)名: void delay3us(void)
// 描述:   延時(shí) 3us
//*********************************************************************************
void delay3us(void)
{
  Nop();
  Nop();
  Nop();
  Nop();
  Nop();
  Nop();
  Nop();
}

//*********************************************************************************
// 函數(shù)名: void delayETU(unsigned char i)
// 輸入:   i 為 1/10個(gè)ETU
// 描述:   延時(shí)i/10個(gè)ETU
// 注釋:   delayETU(10)可以延時(shí)一個(gè)標(biāo)準(zhǔn)ETU,為94us,delayETU(1)比0.1個(gè)ETU稍大
//*********************************************************************************
void delayETU(unsigned char i)
{
  unsigned char j;

  for (j = 1; j > 0; j--)
    Nop();
  Nop();
  Nop();
  Nop();
  i--;
  for (; i > 0; i--)
  {
    for (j = 2; j > 0; j--)
    {
      Nop();
      Nop();
    }
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
  }
}

//*********************************************************************************
// 函數(shù)名: unsigned char sendAByte(unsigned char c)
// 輸入:   c 為要發(fā)送的8位數(shù)據(jù)
// 返回:   0為正確,1為不正確
// 描述:   向卡或ESAM發(fā)送一個(gè)8位字節(jié)
//*********************************************************************************
unsigned char sendAByte(unsigned char c)
{
  unsigned char i, check, even, times;
  
  for (times = 0; times < 5; times++)
  {
    even = 0;
    check = 1;
    SetIO_OUT;
    DisableInt;
    SetIO_A;					    // 啟始位
    delayETU(9);
    delay3us();
    delay3us();
    Nop();
    Nop();
    Nop();
    Nop();
    for (i = 0; i < 8; i++)			// 發(fā)送8個(gè)數(shù)據(jù)位
    {
      if (c & check)
      {
        SetIO_Z;
        even = !even;
     }
      else 
      {
        SetIO_A;
        delay3us();
      }
      Nop();
      Nop();
      Nop();
      Nop();
      check <<= 1;
      delayETU(9);
    }
    if (even)                       // 偶校驗(yàn)位
    {
      SetIO_Z;
    }
    else SetIO_A;
    delayETU(10);
    SetIO_Z;
    delayETU(10);					// 第11個(gè)ETU
    SetIO_IN;
    check = GetIO();
    delayETU(10);					// 第12個(gè)ETU
    EnableInt;
    if (check != STATE_A)			// 發(fā)送正確
      return 0;
    delayETU(10);
  }
  return 1;							// 出錯(cuò)返回
}

//*********************************************************************************
// 函數(shù)名: unsigned char receiveAByte(unsigned char c)
// 輸入:   c 為要接收的8位數(shù)據(jù)
// 返回:   0為正確,1為不正確
// 描述:   從卡或ESAM接收一個(gè)8位字節(jié)
// 注釋:   接收成功后等待1個(gè)ETU返回,從檢測到啟始位到成功返回時(shí)長大于11個(gè)ETU
//*********************************************************************************
unsigned char receiveAByte(unsigned char *c)
{
  unsigned long int wait;
  unsigned char flag, i, j, rcv, even, times;

  for (times = 0; times < 5; times++)
  {
    flag = 0;
/*
    for (wait = 85000; wait > 0; wait--)		// 最大等待9600ETU
      if (GetIO() == STATE_A)						// 收到啟始位
      {
        flag = 1;
        break;
      }
    if (!flag)									// 超時(shí)
      return 1;
*/
///*
//循環(huán)查詢起始位    	
	for(i = 0; --i>0; )		
	{
		EnableInt;
        ClrWdt();
	    DisableInt;
    	for( j = 0; --j>0; )	
        {
    	    if (GetIO() == STATE_A)						// 收到啟始位
    	        goto getchar;
        }
    }
    EnableInt;
    return 1;	        
getchar:
//*/    
    DisableInt;
    even = 0;									// 偶校驗(yàn)數(shù)
    delayETU(12);								// 延時(shí)1.5ETU開始采樣
//    delayETU(14);								// 延時(shí)1.5ETU開始采樣
//    delay3us();
//    delay3us();
    for (i = 0; i < 8; i++)
    {
      rcv >>= 1;
      if (GetIO() == STATE_Z)
      {
        rcv |= 0x80;
        even = !even;
      }
      else
      {
        rcv &= 0x7f;
        delay3us();
      }
      delayETU(9);
      delay3us();
      Nop();
      Nop();
      Nop();
      Nop();
    }
    if (GetIO() == even)							// 偶校驗(yàn)正確
    {
//      delayETU(24);
      delayETU(15);                             // 校驗(yàn)正確,延時(shí)1.5個(gè)ETU,此時(shí)已進(jìn)行超過11個(gè)ETU
      EnableInt;
      *c = rcv;
      return 0;
    }
    else
    {
      delayETU(9);								// 第10.5ETU
      delay3us();
      SetIO_OUT;
      SetIO_A;
      delayETU(15);								// 拉低1.5ETU,要求重發(fā)
      SetIO_Z;
      SetIO_IN;
      EnableInt;
    }
  }
  return 1;										// 出錯(cuò)返回
}

//*********************************************************************************
// 函數(shù)名: unsigned char resetICC(unsigned char *len, unsigned char *resp)
// 輸入:   len為返回?cái)?shù)據(jù)長度的指針
//          resp為返回?cái)?shù)據(jù)的指針
// 輸出:   *len為返回?cái)?shù)據(jù)長度,范圍0--0xff
//          *resp為返回?cái)?shù)據(jù)
// 返回:   0為正確
//          1為不正確
// 描述:   復(fù)位卡或ESAM
//*********************************************************************************
unsigned char resetICC(unsigned char *len, unsigned char *resp)
{
  unsigned char rcv, Y, K, T, i, check;
  unsigned char *p;

  Activation();									// 激活I(lǐng)CC
  delayETU(40);									// 延時(shí)372*4個(gè)時(shí)鐘周期,比標(biāo)準(zhǔn)寬
  SetRST_H;     								// RST為狀態(tài)H
  delayETU(5);									// 延時(shí)0.5ETU=372/2個(gè)時(shí)鐘周期后開始采是否有應(yīng)答,比標(biāo)準(zhǔn)寬
  if (!receiveAByte(&rcv) && (rcv == 0x3b))		// 收TS,最大等待9600ETU,即9600*372個(gè)時(shí)鐘周期,比標(biāo)準(zhǔn)寬
  {
    p = resp;
    *p++ = rcv;
    *len = 1;
    check = rcv ^ 0x0;
  }
  else
  {
//    Deactivation;								// 停活I(lǐng)CC
    return 1;
  }
  if (!receiveAByte(&rcv))						// T0
  {
    *p++ = rcv;
    *len = 2;
    check ^= rcv;
    Y = rcv & 0xf0;
    K = rcv & 0xf;
    T = 0;										// Default
  }
  else
  {
//    Deactivation;
    return 1;
  }
  while (Y)
  {
    for (i = 0x10; i != 0x80; i <<= 1)			// TAi, TBi, TCi
    {
      if (Y & i)
      {
        if (receiveAByte(&rcv))
        {
//          Deactivation;
          return 1;
        }
        *p++ = rcv;
        (*len)++;
        check ^= rcv;
      }
    }
    if (Y & 0x80)								// TDi
    {
      if (receiveAByte(&rcv))
      {
//        Deactivation;
        return 1;
      }
      *p++ = rcv;
      (*len)++;
      check ^= rcv;
      Y = rcv & 0xf0;
      T = rcv & 0xf;
    }
    else Y = 0;
  }
  for (i = 0; i < K; i++)								// T1 .. TK
  { 
    if (receiveAByte(&rcv))
    {
//      Deactivation;
      return 1;
    }
    *p++ = rcv;
    (*len)++;
    check ^= rcv;
  }
  if (T == 1)
  {
    if (!receiveAByte(&rcv) && (check == rcv))			// TCK
    {
      *p++ = rcv;
      (*len)++;
    }
    else
    {
//      Deactivation;
      return 1;
    }
  }
  return 0;
}

//*********************************************************************************
// 函數(shù)名: unsigned char command(unsigned char len, unsigned char *comm, unsigned char *lenr, unsigned char *resp)
// 輸入:   len為命令長度
//          comm為命令數(shù)據(jù)指針
//          lenr為返回?cái)?shù)據(jù)長度指針
//          resp為返回?cái)?shù)據(jù)指針
// 輸出:   *lenr為返回?cái)?shù)據(jù)長度,范圍0--255
//          *resp為返回?cái)?shù)據(jù)
// 返回:   0為正確
//          1為不正確
// 描述:   向卡或ESAM發(fā)送命令并接收返回信息
//*********************************************************************************
unsigned char command(unsigned char len, unsigned char *comm, unsigned char *lenr, unsigned char *resp)
{
  unsigned char INS, buflen, rcv, Lc, Le, i, Buf[5];
  unsigned char *p;
  
  if (len < 5)
    return 1;
  buflen = len;
  for (i = 0; i < 5; i++)
    Buf[i] = *(comm + i);
  *lenr = 0;
command_begin:
  INS = Buf[1];
  if (buflen > 5)
  {
    Lc = Buf[4];
    if (len > 5 + Lc)
      Le = Buf[5 + Lc];
    else Le = 0;
  }
  else
  {
    Le = Buf[4];
    Lc = 0;
  }
  p = resp;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利视频久久久久| 欧美一区三区二区| 麻豆一区二区99久久久久| 中文字幕一区二区三区不卡| 精品视频999| 99re成人在线| 国内精品久久久久影院色 | 欧美日韩成人在线一区| 国产超碰在线一区| 日本亚洲一区二区| 亚洲一区二区三区免费视频| 国产偷国产偷精品高清尤物| 4hu四虎永久在线影院成人| 91视频精品在这里| 国产成人一区在线| 狠狠色狠狠色综合系列| 五月天一区二区三区| 日韩毛片一二三区| 中文字幕欧美区| 国产亚洲欧美日韩在线一区| 欧美一区二区在线视频| 欧美亚洲一区二区在线观看| 北条麻妃一区二区三区| 国产高清不卡二三区| 经典三级在线一区| 美女一区二区久久| 美女视频一区二区| 日韩电影在线观看一区| 视频一区中文字幕| 亚洲成av人片在线观看| 亚洲国产你懂的| 亚洲二区在线视频| 五月天中文字幕一区二区| 亚洲国产精品影院| 亚洲一区二区三区三| 亚洲一区视频在线观看视频| 一区二区在线看| 一区二区三区在线视频免费观看| 国产精品久久久久久久久久免费看| 久久精品男人天堂av| 久久亚洲精华国产精华液| 亚洲精品一区二区三区99| 日韩欧美亚洲国产另类 | 久久这里只有精品首页| www久久精品| 欧美韩日一区二区三区四区| 久久精品一区二区| 亚洲国产精品高清| 亚洲欧洲成人av每日更新| 中文字幕在线观看一区二区| 亚洲精品日日夜夜| 亚洲电影第三页| 免费av成人在线| 国内精品久久久久影院色| 国产mv日韩mv欧美| 在线亚洲一区观看| 欧美一卡2卡三卡4卡5免费| 日韩视频免费观看高清完整版在线观看| 中文字幕二三区不卡| 久久久久久免费网| 国产精品成人免费精品自在线观看| 国产精品久久久久久久久久免费看| 亚洲精品五月天| 日本欧美大码aⅴ在线播放| 国产精品一二三四| 91色婷婷久久久久合中文| 欧美精品丝袜久久久中文字幕| 91精品国产色综合久久久蜜香臀| 精品国产一区二区三区久久久蜜月| 久久精品免视看| 亚洲自拍偷拍图区| 国产一区二区三区四区五区美女 | 91色porny| 91精品国产手机| 亚洲国产精品99久久久久久久久 | 亚洲精品成人精品456| 亚洲va韩国va欧美va精品| 国产一区欧美一区| 91香蕉视频在线| 欧美一区2区视频在线观看| 国产精品区一区二区三| 亚洲图片自拍偷拍| 国产精品一区2区| 色噜噜狠狠成人网p站| 欧美不卡一区二区三区四区| 亚洲少妇最新在线视频| 看电视剧不卡顿的网站| aa级大片欧美| 日韩区在线观看| 亚洲综合小说图片| 国产精品123| 69久久99精品久久久久婷婷| 久久九九久精品国产免费直播| 亚洲最色的网站| 国产精品一区二区你懂的| 欧美日韩中字一区| 中文字幕欧美国产| 麻豆精品在线观看| 欧美视频一区二区三区在线观看| 国产偷国产偷精品高清尤物| 午夜精品一区二区三区三上悠亚| 波多野结衣91| 久久久久久影视| 天堂一区二区在线| 色吊一区二区三区 | 日本不卡视频在线观看| 99精品久久久久久| 国产日产欧美一区二区视频| 蜜桃视频免费观看一区| 欧美在线视频你懂得| 亚洲国产精品传媒在线观看| 麻豆精品久久久| 欧美精品视频www在线观看| 日韩美女视频一区二区| 国产成人免费在线| 精品人伦一区二区色婷婷| 五月激情综合色| 精品国产免费人成在线观看| 99久久精品国产网站| 色狠狠色狠狠综合| 日韩美女啊v在线免费观看| 丁香天五香天堂综合| 欧美成人性战久久| 久久激五月天综合精品| 欧美一区二区三区小说| 视频在线观看91| 欧美一卡在线观看| 日韩高清在线电影| 欧美一区二区三区的| 三级欧美在线一区| 欧美电影一区二区| 日韩成人伦理电影在线观看| 欧美日韩mp4| 丝袜脚交一区二区| 国产成a人亚洲精品| 欧美高清在线精品一区| 国产成人午夜视频| 欧美极品少妇xxxxⅹ高跟鞋| 国产成人免费视频| 欧美国产精品一区二区三区| 成人教育av在线| 亚洲三级在线免费观看| 91福利在线看| 日韩成人精品在线| 日韩精品一区二区三区蜜臀| 国产一区在线视频| 国产日韩精品一区| 99国产一区二区三精品乱码| 亚洲日本在线观看| 欧美日韩精品一区二区三区四区 | 中文字幕中文在线不卡住| 不卡视频一二三四| 亚洲一区二区在线免费观看视频| 欧美在线观看你懂的| 肉丝袜脚交视频一区二区| 日韩视频永久免费| 成人丝袜18视频在线观看| 一区二区三区中文字幕电影 | 免费看日韩a级影片| 欧美一区二区三区视频免费| 国产一区二区主播在线| 日本一区二区成人| 欧美在线观看18| 九一九一国产精品| 国产精品伦理一区二区| 91久久精品午夜一区二区| 视频一区欧美精品| 国产蜜臀97一区二区三区| 一本大道综合伊人精品热热| 亚洲超丰满肉感bbw| 精品国产污污免费网站入口| 成人免费看黄yyy456| 亚洲自拍偷拍麻豆| 精品国产免费一区二区三区四区| 成人免费看黄yyy456| 日韩精品欧美精品| 中文一区二区完整视频在线观看| 91久久一区二区| 国产一区二区三区综合| 亚洲欧美日韩一区| 精品国产亚洲在线| 欧美伊人久久久久久久久影院 | 色94色欧美sute亚洲线路一ni| 日韩在线a电影| 最新高清无码专区| 欧美电影免费观看高清完整版在线| 高清在线成人网| 麻豆一区二区在线| 亚洲一区二区三区国产| 久久精品网站免费观看| 欧美裸体一区二区三区| aaa欧美色吧激情视频| 免费看欧美美女黄的网站| 亚洲精品菠萝久久久久久久| 欧美xxxx老人做受| 欧美日韩你懂的| 91蝌蚪国产九色| 国产精品一区免费在线观看| 五月天激情小说综合| 亚洲色欲色欲www|