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

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

?? ch372drv.c

?? 一個采用C8051F020+CH372實現的帶USB功能的流量測控系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
  {
    if (CH375_RD_DAT_PORT() == CMD_RET_SUCCESS)
      break;  
  }

  /* 下面啟用USB中斷,CH372的INT#引腳可以連接到單片機的中斷引腳,中斷為低電平有效或者下降沿有效,
     如果不使用中斷,那么也可以用查詢方式,由單片機程序查詢CH372的INT#引腳為低電平 */
  IT0 = 0;                                                 // 置外部信號為低電平觸發
  IE0 = 0;                                                 // 清中斷標志
  EX0 = 1;                                                 // 允許CH372中斷,假定CH372的INT#引腳連接到單片機的INT0
}

/* CH375中斷服務程序,假定CH375的INT#引腳連接到單片機的INT0,使用寄存器組1 */
void mCH375Interrupt(void) interrupt INT_INT0 using 1
{
  INT8U           id;
  INT8U           cnt;
  INT8U           dat;
  PUINT8C         str;
  USB_DOWN_BUFFER down;
  USB_UP_BUFFER   up;

#define IntStatus   dat                                    // 節約一個變量存儲單元
  CH375_WR_CMD_PORT((INT8U)CMD_GET_STATUS);                // 獲取中斷狀態并取消中斷請求
  IntStatus = CH375_RD_DAT_PORT();                         // 獲取中斷狀態
  USB_INT = 1;
  IE0 = 0;                                                 // 清中斷標志,與單片機硬件有關,對應于INT0中斷
  /* 批量端點下傳成功,接收到命令包 */
  if (IntStatus == USB_INT_EP2_OUT)
  {  
    CH375_WR_CMD_PORT((INT8U)CMD_RD_USB_DATA);             // 從當前USB中斷的端點緩沖區讀取數據塊,并釋放緩沖區
    cnt = CH375_RD_DAT_PORT();                             // 首先讀取后續數據長度
    if (cnt == 0)                                          // 長度為0,沒有數據,在某些應用中也可以將長度0定義為一種特殊命令
    {
      CH375_WR_CMD_PORT((INT8U)CMD_SET_ENDP7);             // 設置USB端點2的IN,也就是批量上傳端點
      CH375_WR_DAT_PORT((INT8U)0x0E);                      // 同步觸發位不變,設置USB端點2的IN正忙,返回NAK,實際是清除上傳緩沖區的已有內容
      return;
    }
    id = 0;
    do
    {
      down[id] = CH375_RD_DAT_PORT();                      // 接收命令包的數據
      id++;
    } while (--cnt);                                       // 接收完所有的下傳數據
    /* 命令包反碼校驗錯誤,放棄該下傳包 */
    if (down[COMMAND_ID] != (INT8U)(~down[COMMAND_NOT_ID]))    
      return;
    /* 根據命令碼實現不同的功能 */
    if (down[COMMAND_ID] < USB_CMD_SET_ALL_PARAMS)         // 讀操作命令,需要返回數據
    {
      up[STATUS_ID] = ERR_SUCCESS;                         // 準備狀態碼
      up[COMMAND_NOT_ID] = down[COMMAND_NOT_ID];           // 準備命令反碼
      switch (down[COMMAND_ID])
      {
        case USB_CMD_GET_FW_INFO:		                   /* 返回固件程序版本,并取消未完成的上傳數據塊 */
          up[DATA_START_ID] = THIS_FIRMWARE_VER;           // 準備固件程序版本
          up[LENGTH_ID] = 1;                               // 發送一個字節(不包含幀頭部分的三個字節)
          CH375_WR_CMD_PORT((INT8U)CMD_SET_ENDP7);         // 設置USB端點2的IN,也就是批量上傳端點
          CH375_WR_DAT_PORT((INT8U)0x0E);                  // 同步觸發位不變,設置USB端點2的IN正忙,返回NAK,實際是清除上傳緩沖區的已有內容
          break;
        case USB_CMD_GET_APP_INFO:                         /* 返回當前應用系統的版本和說明字符串 */
          up[DATA_START_ID] = THIS_APP_SYS_VER;            // 準備應用系統的版本
          cnt = 1;
          str = THIS_APP_SYS_STR;                          // 準備說明字符串
          while (up[DATA_START_ID + cnt] = *str)
          {
            cnt++;
            str++;
          }
          up[LENGTH_ID] = 1 + sizeof(THIS_APP_SYS_STR);    // 設置緩沖區長度(不包含幀頭部分的三個字節)
          break;
        case USB_CMD_GET_TEST_DATA:                        /* 返回當前測試數據 */
          up[DATA_START_ID + 0] = gnPressGet % 256;        // 準備測試壓力值的低8位
          up[DATA_START_ID + 1] = gnPressGet / 256;        // 準備測試壓力值的高8位
          up[DATA_START_ID + 2] = gnLeakGet  % 256;        // 準備氣體流量的低8位
          up[DATA_START_ID + 3] = gnLeakGet  / 256;        // 準備氣體流量的高8位
          up[LENGTH_ID] = 4;                               // 準備緩沖區長度(不包含幀頭部分的三個字節)
          break;
        case USB_CMD_GET_ALL_PARAMS:                       /* 返回所有參數的值(不包含流量修正系數) */
          up[DATA_START_ID + 0] = gnPressGet % 256;        // 準備測試壓力值的低8位
          up[DATA_START_ID + 1] = gnPressGet / 256;        // 準備測試壓力值的高8位
          up[DATA_START_ID + 2] = gnPressMax % 256;        // 準備壓力上限值的低8位
          up[DATA_START_ID + 3] = gnPressMax / 256;        // 準備壓力上限值的高8位
          up[DATA_START_ID + 4] = gnPressMin % 256;        // 準備壓力下限值的低8位
          up[DATA_START_ID + 5] = gnPressMin / 256;        // 準備壓力下限值的高8位
          up[DATA_START_ID + 6] = gnLeakMax % 256;         // 準備流量上限值的低8位
          up[DATA_START_ID + 7] = gnLeakMax / 256;         // 準備流量上限值的高8位
          up[DATA_START_ID + 8] = gnFillTime % 256;        // 準備充氣時間的低8位
          up[DATA_START_ID + 9] = gnFillTime / 256;        // 準備充氣時間的高8位
          up[DATA_START_ID + 10]= gnTestTime % 256;        // 準備測試時間的低8位
          up[DATA_START_ID + 11]= gnTestTime / 256;        // 準備測試時間的高8位
          up[LENGTH_ID] = 12;                              // 準備緩沖區長度(不包含幀頭部分的三個字節)
          break;
        case USB_CMD_GET_PRESS_SET:                        /* 返回參數設定壓力 */
          up[DATA_START_ID + 0] = gnPressGet % 256;        // 準備測試壓力值的低8位
          up[DATA_START_ID + 1] = gnPressGet / 256;        // 準備測試壓力值的高8位
          up[LENGTH_ID] = 2;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_PRESS_MAX:                        /* 返回參數壓力上限 */
          up[DATA_START_ID + 0] = gnPressMax % 256;        // 準備壓力上限值的低8位
          up[DATA_START_ID + 1] = gnPressMax / 256;        // 準備壓力上限值的高8位
          up[LENGTH_ID] = 2;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_PRESS_MIN:                        /* 返回參數壓力下限 */
          up[DATA_START_ID + 0] = gnPressMin % 256;        // 準備壓力下限值的低8位
          up[DATA_START_ID + 1] = gnPressMin / 256;        // 準備壓力下限值的高8位
          up[LENGTH_ID] = 2;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_LEAK_MAX:                         /* 返回參數流量上限 */
          up[DATA_START_ID + 0] = gnLeakMax % 256;         // 準備流量上限值的低8位
          up[DATA_START_ID + 1] = gnLeakMax / 256;         // 準備流量上限值的高8位
          up[LENGTH_ID] = 2;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_FILL_TIME:                        /* 返回參數充氣時間 */
          up[DATA_START_ID + 0] = gnFillTime % 256;        // 準備充氣時間的低8位
          up[DATA_START_ID + 1] = gnFillTime / 256;        // 準備充氣時間的高8位
          up[LENGTH_ID] = 2;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_TEST_TIME:                        /* 返回參數測試時間 */
          up[DATA_START_ID + 0] = gnTestTime % 256;        // 準備測試時間的低8位
          up[DATA_START_ID + 1] = gnTestTime / 256;        // 準備測試時間的高8位
          up[LENGTH_ID] = 2;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_ALL_COEFS:                        /* 返回所有流量修正值及其系數 */
          up[DATA_START_ID + 0] = gnLeakAreaMax[0] % 256;  // 準備第一段流量修正值的低8位
          up[DATA_START_ID + 1] = gnLeakAreaMax[0] / 256;  // 準備第一段流量修正值的高8位
          up[DATA_START_ID + 2] = gnLeakAreaCoef[0] % 256; // 準備第一段流量修正系數的低8位
          up[DATA_START_ID + 3] = gnLeakAreaCoef[0] / 256; // 準備第一段流量修正系數的高8位
          up[DATA_START_ID + 4] = gnLeakAreaMax[1] % 256;  // 準備第二段流量修正值的低8位
          up[DATA_START_ID + 5] = gnLeakAreaMax[1] / 256;  // 準備第二段流量修正值的高8位
          up[DATA_START_ID + 6] = gnLeakAreaCoef[1] % 256; // 準備第二段流量修正系數的低8位
          up[DATA_START_ID + 7] = gnLeakAreaCoef[1] / 256; // 準備第二段流量修正系數的高8位
          up[DATA_START_ID + 8] = gnLeakAreaMax[2] % 256;  // 準備第三段流量修正值的低8位
          up[DATA_START_ID + 9] = gnLeakAreaMax[2] / 256;  // 準備第三段流量修正值的高8位
          up[DATA_START_ID + 10]= gnLeakAreaCoef[2] % 256; // 準備第三段流量修正系數的低8位
          up[DATA_START_ID + 11]= gnLeakAreaCoef[2] / 256; // 準備第三段流量修正系數的高8位
          up[DATA_START_ID + 12]= gnLeakAreaMax[3] % 256;  // 準備第四段流量修正值的低8位
          up[DATA_START_ID + 13]= gnLeakAreaMax[3] / 256;  // 準備第四段流量修正值的高8位
          up[DATA_START_ID + 14]= gnLeakAreaCoef[3] % 256; // 準備第四段流量修正系數的低8位
          up[DATA_START_ID + 15]= gnLeakAreaCoef[3] / 256; // 準備第四段流量修正系數的高8位
          up[LENGTH_ID] = 16;                              // 準備緩沖區長度
          break;
        case USB_CMD_GET_COEF_1:                           /* 返回第一段流量修正值及其系數 */
          up[DATA_START_ID + 0] = gnLeakAreaMax[0] % 256;  // 準備第一段流量修正值的低8位
          up[DATA_START_ID + 1] = gnLeakAreaMax[0] / 256;  // 準備第一段流量修正值的高8位
          up[DATA_START_ID + 2] = gnLeakAreaCoef[0] % 256; // 準備第一段流量修正系數的低8位
          up[DATA_START_ID + 3] = gnLeakAreaCoef[0] / 256; // 準備第一段流量修正系數的高8位
          up[LENGTH_ID] = 4;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_COEF_2:                           /* 返回第二段流量修正值及其系數 */
          up[DATA_START_ID + 0] = gnLeakAreaMax[1] % 256;  // 準備第二段流量修正值的低8位
          up[DATA_START_ID + 1] = gnLeakAreaMax[1] / 256;  // 準備第二段流量修正值的高8位
          up[DATA_START_ID + 2] = gnLeakAreaCoef[1] % 256; // 準備第二段流量修正系數的低8位
          up[DATA_START_ID + 3] = gnLeakAreaCoef[1] / 256; // 準備第二段流量修正系數的高8位
          up[LENGTH_ID] = 4;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_COEF_3:                           /* 返回第三段流量修正值及其系數 */
          up[DATA_START_ID + 0] = gnLeakAreaMax[2] % 256;  // 準備第三段流量修正值的低8位
          up[DATA_START_ID + 1] = gnLeakAreaMax[2] / 256;  // 準備第三段流量修正值的高8位
          up[DATA_START_ID + 2] = gnLeakAreaCoef[2] % 256; // 準備第三段流量修正系數的低8位
          up[DATA_START_ID + 3] = gnLeakAreaCoef[2] / 256; // 準備第三段流量修正系數的高8位
          up[LENGTH_ID] = 4;                               // 準備緩沖區長度
          break;
        case USB_CMD_GET_COEF_4:                           /* 返回第四段流量修正值及其系數 */
          up[DATA_START_ID + 0] = gnLeakAreaMax[3] % 256;  // 準備第四段流量修正值的低8位
          up[DATA_START_ID + 1] = gnLeakAreaMax[3] / 256;  // 準備第四段流量修正值的高8位
          up[DATA_START_ID + 2] = gnLeakAreaCoef[3] % 256; // 準備第四段流量修正系數的低8位
          up[DATA_START_ID + 3] = gnLeakAreaCoef[3] / 256; // 準備第四段流量修正系數的高8位
          up[LENGTH_ID] = 4;                               // 準備緩沖區長度
          break;
        default:                                           /* 命令不支持 */
          up[LENGTH_ID] = 0;
          up[STATUS_ID] = ERR_UNSUPPORT;
          break;
      }
      /* 向USB端點2的發送緩沖區寫入數據塊 */
      CH375_WR_CMD_PORT((INT8U)CMD_WR_USB_DATA7);
      cnt = 3 + up[LENGTH_ID];
      CH375_WR_DAT_PORT(cnt);                              // 首先寫入后續數據長度
      id = 0;
      do
      {
        CH375_WR_DAT_PORT(up[id]);                         // 寫入數據到CH375
        id++;
      } while (--cnt);
    }
    else                                                   /* 寫操作命令,不返回數據 */
    {
      switch (down[COMMAND_ID])
      {   
        case USB_CMD_SET_ALL_PARAMS:                       // 修改所有參數的值(不包含流量修正系數)
          
          break;
        case USB_CMD_SET_PRESS_SET:                        // 修改參數設定壓力
          break;
        case USB_CMD_SET_PRESS_MAX:                        // 修改參數壓力上限
          break;
        case USB_CMD_SET_PRESS_MIN:                        // 修改參數壓力下限
          break;
        case USB_CMD_SET_LEAK_MAX:                         // 修改參數流量上限
          break;
        case USB_CMD_SET_FILL_TIME:                        // 修改參數充氣時間
          break;
        case USB_CMD_SET_TEST_TIME:                        // 修改參數測試時間
          break;
        case USB_CMD_SET_ALL_COEFS:                        // 修改所有流量修正值及其系數
          break;
        case USB_CMD_SET_COEF_1:                           /* 修改第一段流量修正值及其系數 */
          break;
        case USB_CMD_SET_COEF_2:                           /* 修改第二段流量修正值及其系數 */
          break;
        case USB_CMD_SET_COEF_3:                           /* 修改第三段流量修正值及其系數 */
          break;
        case USB_CMD_SET_COEF_4:                           /* 修改第四段流量修正值及其系數 */
          break;
        default:                                           /* 命令不支持 */
          up[LENGTH_ID] = 0;
          up[STATUS_ID] = ERR_UNSUPPORT;
          break;
      }
    }
  }
  else if (IntStatus == USB_INT_EP2_IN)                    /* 批量數據發送成功,狀態包已發送 */
    CH375_WR_CMD_PORT((INT8U)CMD_UNLOCK_USB);              // 釋放當前USB緩沖區,收到上傳成功中斷后,必須解鎖USB緩沖區,以便繼續收發
  else if (IntStatus == USB_INT_EP1_IN)                    /* 中斷數據發送成功,本程序未用到 */
    CH375_WR_CMD_PORT((INT8U)CMD_UNLOCK_USB);              // 釋放當前USB緩沖區
  /* 內置固件的USB方式下不應該出現其它中斷狀態 */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合久久久久久| 精品国产一区二区精华| 亚洲精品免费在线| 色综合中文字幕| 亚洲精品国产一区二区三区四区在线| 97久久精品人人爽人人爽蜜臀| 亚洲少妇屁股交4| 在线观看欧美黄色| 奇米影视一区二区三区小说| 久久这里只有精品6| a美女胸又www黄视频久久| 亚洲免费在线电影| 宅男噜噜噜66一区二区66| 国产一区二区不卡在线| 国产精品久久久久aaaa樱花| 欧美曰成人黄网| 经典三级在线一区| 国产精品久久国产精麻豆99网站 | 777a∨成人精品桃花网| 美女国产一区二区| 亚洲国产精品成人综合色在线婷婷 | 欧美精品高清视频| 精久久久久久久久久久| 亚洲精品视频在线| 欧美一区二区二区| 97久久精品人人做人人爽| 日韩精品亚洲专区| 国产精品电影一区二区| 欧美日韩一区二区在线观看视频 | 樱花草国产18久久久久| 日韩欧美一级片| 99久久久无码国产精品| 蜜桃一区二区三区四区| 综合欧美亚洲日本| 亚洲精品在线免费观看视频| 色综合色综合色综合| 久久精品国产网站| 亚洲一级二级在线| 久久影院午夜论| 欧美日韩国产区一| 91免费观看视频| 韩国av一区二区三区| 亚洲综合丝袜美腿| 亚洲国产精品激情在线观看| 日韩精品中文字幕一区二区三区 | 99国产麻豆精品| 久久 天天综合| 亚洲图片欧美综合| 亚洲特黄一级片| 久久久精品一品道一区| 9191久久久久久久久久久| 色诱亚洲精品久久久久久| 国产高清不卡一区二区| 美女在线视频一区| 五月婷婷色综合| 亚洲激情综合网| 国产精品国产三级国产三级人妇| 精品国产成人在线影院 | 久久老女人爱爱| 欧美不卡视频一区| 日韩一区二区视频| 欧美一区二区三区视频免费播放| 色婷婷av一区二区三区大白胸 | 色拍拍在线精品视频8848| 岛国av在线一区| 国产精品一区免费在线观看| 久久激五月天综合精品| 日本最新不卡在线| 日本怡春院一区二区| 天天综合天天做天天综合| 亚洲午夜久久久久中文字幕久| 亚洲免费在线看| 一区二区三区四区不卡视频| 一区二区在线观看不卡| 亚洲免费色视频| 亚洲综合色自拍一区| 亚洲午夜国产一区99re久久| 亚洲一区二区三区四区在线观看| 一区二区三区在线观看视频| 亚洲精品精品亚洲| 婷婷激情综合网| 免费观看久久久4p| 国产一区二区三区综合| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲尤物视频在线| 日韩精品电影在线| 久久99国产精品尤物| 国产一区二区三区最好精华液| 国产成人免费视频| 91性感美女视频| 欧美亚洲自拍偷拍| 日韩欧美精品三级| 国产午夜精品在线观看| 中文字幕一区二区三区蜜月| 1024成人网| 日本怡春院一区二区| 国产一区二区三区久久悠悠色av | 一区二区日韩av| 日本强好片久久久久久aaa| 国内不卡的二区三区中文字幕| 国产不卡视频在线观看| 99久久伊人精品| 欧美日韩精品三区| 精品国偷自产国产一区| 国产精品视频线看| 亚洲一区二区三区三| 久久国产夜色精品鲁鲁99| 国产传媒一区在线| 欧美日韩亚洲国产综合| 精品国产电影一区二区| 亚洲另类在线视频| 美国十次了思思久久精品导航| 国产成人av影院| 欧美人狂配大交3d怪物一区| 精品国产乱码久久久久久蜜臀| 最新欧美精品一区二区三区| 五月激情丁香一区二区三区| 国产综合色视频| 色八戒一区二区三区| 欧美va亚洲va| 亚洲线精品一区二区三区| 国产激情一区二区三区| 欧美日韩激情一区| 国产精品久久看| 久久97超碰国产精品超碰| 91麻豆国产福利精品| 久久综合久久综合亚洲| 亚洲国产成人精品视频| 成人精品视频一区二区三区| 91精品国产综合久久精品麻豆| 国产精品素人视频| 激情图片小说一区| 欧美日韩亚洲综合一区二区三区| 国产欧美日韩不卡免费| 蜜臀va亚洲va欧美va天堂| 欧美影院一区二区三区| 国产精品久久久久影院| 国内精品久久久久影院色| 欧美日韩国产高清一区| 亚洲欧美综合色| 国产一区二区三区精品视频| 欧美精品一卡两卡| 一区二区三区在线观看视频| 丁香激情综合国产| 久久久天堂av| 美女视频黄频大全不卡视频在线播放 | 在线综合+亚洲+欧美中文字幕| 亚洲精选视频在线| 成人精品一区二区三区四区 | 欧美人体做爰大胆视频| 亚洲免费av高清| 成人h动漫精品一区二区| 久久久午夜精品理论片中文字幕| 日韩中文欧美在线| 欧美日韩高清一区二区三区| 一区二区视频免费在线观看| 99re成人精品视频| 自拍偷拍欧美激情| 色欧美88888久久久久久影院| 国产精品天美传媒| 成人精品一区二区三区四区 | 欧美日韩免费观看一区二区三区| 综合久久久久久| 91麻豆精品视频| 亚洲另类在线视频| 欧美这里有精品| 亚洲高清中文字幕| 精品视频1区2区| 婷婷久久综合九色综合绿巨人| 7777女厕盗摄久久久| 久久精品国产**网站演员| 亚洲精品一区二区三区香蕉| 麻豆91在线观看| 国产女主播一区| jlzzjlzz亚洲女人18| 亚洲乱码国产乱码精品精小说| 色综合中文字幕| 亚洲一区二区av在线| 欧美一区2区视频在线观看| 毛片一区二区三区| 国产午夜亚洲精品理论片色戒| 高清成人在线观看| 伊人婷婷欧美激情| 制服丝袜亚洲播放| 国产呦萝稀缺另类资源| 亚洲欧美怡红院| 欧美日韩精品一区二区三区| 三级成人在线视频| 久久色视频免费观看| 成人av影院在线| 亚洲一区欧美一区| 欧美videos中文字幕| 国产a区久久久| 亚洲免费在线播放| 日韩欧美不卡在线观看视频| 国产福利不卡视频| 亚洲国产精品久久人人爱| 精品国免费一区二区三区| 91小视频免费观看| 蜜桃精品在线观看|