wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4959|回復(fù): 5
收起左側(cè)

我的ModBus主機-協(xié)議篇

  [復(fù)制鏈接]
ID:446156 發(fā)表于 2021-11-15 13:22 | 顯示全部樓層 |閱讀模式
該章節(jié)是整個系列中最簡單的由"Modbus_Master.c"和"Modbus_Master.h"兩個文件組成。
首先來看"Modbus_Master.h"
  1. #ifndef __MODBUSMASTER_H
  2. #define __MODBUSMASTER_H

  3. #include "Header.h"
  4. #include "UartDebug.h"
  5. #include "Delay.h"

  6. struct ModbusMasterDevice
  7. {
  8.         struct UartDebugMember *UDM;
  9.         uint8_t State;
  10.         uint16_t DelayTime;
  11.         uint16_t Input_Reg[8];  
  12.         uint16_t Hold_Reg[8];
  13.         uint8_t RIR_Update;
  14.         uint8_t WHR_Success;
  15. };

  16. extern struct ModbusMasterDevice MMDPort1;

  17. void ModBusMasterInit(void);
  18. uint8_t WriteHoldReg(struct ModbusMasterDevice *MBM,uint8_t DeviceAddr,uint16_t Addr,uint16_t Len,uint16_t *Data);
  19. uint8_t ReadHoldInputReg(struct ModbusMasterDevice *MBM,uint8_t DeviceAddr,uint8_t Com,uint16_t Addr,uint16_t Len);

  20. #endif
復(fù)制代碼
該文件包含了最基本的"Header.h"和UART篇介紹的 "UartDebug.h"以及我個人最常用的"Delay.h"。
為了更方便的講解后續(xù)代碼我們首先介紹一下"Delay.c"中的三個函數(shù)。
  1. void Set_Delay_Time(uint16_t Time,uint16_t *DelayTime_Count)
  2. {
  3.         *DelayTime_Count=Time;
  4. }
  5. void DelayTimeCount_ms(uint16_t *DelayTime_Count)
  6. {
  7.         if(*DelayTime_Count==0)
  8.         {
  9.                 *DelayTime_Count=0;
  10.         }
  11.         else
  12.         {
  13.                 *DelayTime_Count-=1;
  14.         }
  15. }
  16. uint8_t CheckDelay(uint16_t *DelayTime_Count)
  17. {
  18.         if(*DelayTime_Count==0)
  19.         {
  20.                 return 0;
  21.         }
  22.         else
  23.         {
  24.                 return 1;
  25.         }
  26. }
復(fù)制代碼
第一個函數(shù)“void Set_Delay_Time(uint16_t Time,uint16_t *DelayTime_Count)”就是把Time賦值給*DelayTime_Count,具體使用示例會在下文體現(xiàn);
第二個函數(shù)“void DelayTimeCount_ms(uint16_t *DelayTime_Count)”就是把輸入的變量作累減直到0,該函數(shù)需要每隔1ms或者其他時間來周期執(zhí)行;
第三個函數(shù)“uint8_t CheckDelay(uint16_t *DelayTime_Count)”就是查詢輸入的變量是否為0并返回相應(yīng)的值,具體使用示例會在下文體現(xiàn)。
好了我們接著看"Modbus_Master.h"。
“struct UartDebugMember *UDM;” ModBus主機使用的端口信息;
“uint8_t State;” ModBus主機當(dāng)前的工作狀態(tài);
“uint16_t DelayTime;” 從機未響應(yīng)計時;
“uint16_t Input_Reg[8];” 輸入寄存器;
“uint16_t Hold_Reg[8];” 保持寄存器;
“uint8_t RIR_Update;” 讀取輸入/保持寄存器成功標志;
“uint8_t WHR_Success;” 寫保持寄存器成功標志。
從代碼中可以看出我們的ModBus主機僅實現(xiàn)了讀取輸入/保持寄存器和寫保持寄存器兩個功能,因為這兩個功能最常用,其他的功能我也懶得寫了。現(xiàn)在看看具體代碼。
  1. #include "Modbus_Master.h"

  2. struct ModbusMasterDevice MMDPort1;

  3. void ModBusMasterInit(void)
  4. {
  5.         MMDPort1.UDM = &U_D_Uart7;
  6. }
  7. /*******************************************************************************
  8. *Function Name    : CRC16_CHECK
  9. *Input            :
  10. *Return           :
  11. *Description      :
  12. *******************************************************************************/
  13. static unsigned short int CRC16_CHECK(unsigned char *Buf, unsigned char CRC_CNT)
  14. {
  15.         unsigned short int CRC16_Temp;
  16.         unsigned char i,j;
  17.         CRC16_Temp = 0xffff;

  18.         for (i=0;i<CRC_CNT; i++)
  19.         {      
  20.                 CRC16_Temp ^= Buf[i];
  21.                 for (j=0;j<8;j++)
  22.                 {
  23.                         if (CRC16_Temp & 0x01)
  24.                                 CRC16_Temp = (CRC16_Temp >>1 ) ^ 0xa001;
  25.                         else
  26.                                 CRC16_Temp = CRC16_Temp >> 1;
  27.                 }
  28.         }
  29.         return CRC16_Temp;
  30. }
  31. uint8_t WriteHoldReg(struct ModbusMasterDevice *MBM,uint8_t DeviceAddr,uint16_t Addr,uint16_t Len,uint16_t *Data)
  32. {
  33.         uint16_t CRC16=0;
  34.         uint16_t CRC16_Receive=0;
  35.         uint8_t i=0;
  36.        
  37.         switch(MBM->State)
  38.         {
  39.                 case 0:
  40.                 {
  41.                         MBM->UDM->TransmitBuf[0] = DeviceAddr;
  42.                         MBM->UDM->TransmitBuf[1] = 0x10;
  43.                         MBM->UDM->TransmitBuf[2] = Addr>>8;
  44.                         MBM->UDM->TransmitBuf[3] = Addr;
  45.                         MBM->UDM->TransmitBuf[4] = Len>>8;
  46.                         MBM->UDM->TransmitBuf[5] = Len;
  47.                         MBM->UDM->TransmitBuf[6] = Len*2;
  48.                         for(i=0;i<Len;i++)
  49.                         {
  50.                                 MBM->UDM->TransmitBuf[i*2+7] = *(Data+i)>>8;
  51.                                 MBM->UDM->TransmitBuf[i*2+8] = *(Data+i);
  52.                         }
  53.                         CRC16 = CRC16_CHECK(MBM->UDM->TransmitBuf,7+Len*2);
  54.                         MBM->UDM->TransmitBuf[8+Len*2] = CRC16>>8;
  55.                         MBM->UDM->TransmitBuf[7+Len*2] = CRC16;
  56.                         TransmitData(MBM->UDM,MBM->UDM->TransmitBuf,9+Len*2);
  57.                         Set_Delay_Time(100,&MBM->DelayTime);
  58.                         MBM->State ++;
  59.                 }break;
  60.                 case 1:
  61.                 {
  62.                         if(MBM->UDM->ReceiveFinish)
  63.                         {
  64.                                 CRC16_Receive=(MBM->UDM->ReceiveBuf[MBM->UDM->ReceivePoint-1]<<8)|MBM->UDM->ReceiveBuf[MBM->UDM->ReceivePoint-2];       
  65.                                 CRC16 = CRC16_CHECK(MBM->UDM->ReceiveBuf,MBM->UDM->ReceivePoint-2);
  66.                                 if(CRC16_Receive == CRC16)
  67.                                 {
  68.                                         /*這么寫是有bug的,算了先這么著吧*/
  69.                                         MBM->WHR_Success = 1;
  70.                                 }
  71.                                 MBM->State = 0;
  72.                 ClearRxData(MBM->UDM);
  73.                                 return 1;
  74.                         }
  75.                         else if(CheckDelay(&MBM->DelayTime) == 0)
  76.                         {
  77.                                 MBM->State = 0;
  78.                                 ClearRxData(MBM->UDM);
  79.                                 return 1;
  80.                         }
  81.                 }break;
  82.         }
  83.         return 0;       
  84. }
  85. uint8_t ReadHoldInputReg(struct ModbusMasterDevice *MBM,uint8_t DeviceAddr,uint8_t Com,uint16_t Addr,uint16_t Len)
  86. {
  87.         uint16_t CRC16=0;
  88.         uint16_t CRC16_Receive=0;
  89.         uint8_t i=0;
  90.        
  91.         switch(MBM->State)
  92.         {
  93.                 case 0:
  94.                 {
  95.                         MBM->UDM->TransmitBuf[0] = DeviceAddr;
  96.                         MBM->UDM->TransmitBuf[1] = Com;
  97.                         MBM->UDM->TransmitBuf[2] = Addr>>8;
  98.                         MBM->UDM->TransmitBuf[3] = Addr;
  99.                         MBM->UDM->TransmitBuf[4] = Len>>8;
  100.                         MBM->UDM->TransmitBuf[5] = Len;
  101.                         CRC16 = CRC16_CHECK(MBM->UDM->TransmitBuf,6);
  102.                         MBM->UDM->TransmitBuf[7] = CRC16>>8;
  103.                         MBM->UDM->TransmitBuf[6] = CRC16;
  104.                         TransmitData(MBM->UDM,MBM->UDM->TransmitBuf,8);
  105.                         Set_Delay_Time(100,&MBM->DelayTime);
  106.                         MBM->State ++;
  107.                 }break;
  108.                 case 1:
  109.                 {
  110.                         if(MBM->UDM->ReceiveFinish)
  111.                         {
  112.                                 CRC16_Receive=(MBM->UDM->ReceiveBuf[MBM->UDM->ReceivePoint-1]<<8)|MBM->UDM->ReceiveBuf[MBM->UDM->ReceivePoint-2];       
  113.                                 CRC16 = CRC16_CHECK(MBM->UDM->ReceiveBuf,MBM->UDM->ReceivePoint-2);
  114.                                 if(CRC16_Receive == CRC16)
  115.                                 {
  116.                                         for(i=0;i<MBM->UDM->ReceiveBuf[2]/2;i++)
  117.                                         {
  118.                                                 if(Com == 0x04)
  119.                                                 {
  120.                                                         MBM->Input_Reg[Addr+i] = (MBM->UDM->ReceiveBuf[3+i*2])<<8 | MBM->UDM->ReceiveBuf[4+i*2];
  121.                                                 }
  122.                                                 else
  123.                                                 {
  124.                                                         MBM->Hold_Reg[Addr+i] = (MBM->UDM->ReceiveBuf[3+i*2])<<8 | MBM->UDM->ReceiveBuf[4+i*2];
  125.                                                 }
  126.                                         }
  127.                                         MBM->RIR_Update = 1;
  128.                                 }
  129.                                 MBM->State = 0;
  130.                 ClearRxData(MBM->UDM);
  131.                                 return 1;
  132.                         }
  133.                         else if(CheckDelay(&MBM->DelayTime) == 0)
  134.                         {
  135.                                 MBM->State = 0;
  136.                                 ClearRxData(MBM->UDM);
  137.                                 return 1;
  138.                         }
  139.                 }break;
  140.         }
  141.         return 0;
  142. }
復(fù)制代碼
可以看到首先定義了一個ModbusMasterDevice實體MMDPort1,然后初始化該實體將其要使用的端口與U_D_Uart7對接起來。
其余的代碼就很簡單了,需要注意的有兩個地方,一是我們把給從機發(fā)數(shù)據(jù)和接收從機數(shù)據(jù)分成了兩部分來完成。為什么要這么做呢?這是為了當(dāng)從機響應(yīng)不及時或者從機不在線時MCU可以去做其他的事情而不必在這里死等。二是當(dāng)收到從機應(yīng)答(無論CRC校驗是否成功)或者從機響應(yīng)超時(這里就涉及到前文中提及的“delay”三個函數(shù))都需要執(zhí)行ClearRxData()并返回1,這點非常重要。
在該函數(shù)中沒有做重發(fā)機制,并不是沒有重發(fā)機制而是在更往上的層中來實現(xiàn)的后面會介紹到。





評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
無效樓層,該帖已經(jīng)被刪除
ID:84103 發(fā)表于 2022-10-18 09:40 | 顯示全部樓層
Input_Reg[Addr+i]這里代表啥寄存器?
回復(fù)

使用道具 舉報

ID:1055247 發(fā)表于 2022-12-2 19:10 | 顯示全部樓層
extern struct ModbusMasterDevice MMDPort1;  void ModBusMasterInit(void); uint8_t WriteHoldReg(struct ModbusMasterDevice *MBM,uint8_t DeviceAddr,uint16_t Addr,uint16_t Len,uint16_t *Data); uint8_t ReadHoldInputReg(struct ModbusMasterDevice *MBM,uint8_t DeviceAddr,uint8_t Com,uint16_t Addr,uint16_t Len);  #endif
回復(fù)

使用道具 舉報

ID:462629 發(fā)表于 2023-3-2 12:14 | 顯示全部樓層
這個基于什么芯片的啊?
回復(fù)

使用道具 舉報

ID:821429 發(fā)表于 2023-4-16 09:45 | 顯示全部樓層
,標記學(xué)習(xí)一下,感謝分享
回復(fù)

使用道具 舉報

ID:446156 發(fā)表于 2024-8-16 11:47 | 顯示全部樓層
woyaodwn 發(fā)表于 2023-3-2 12:14
這個基于什么芯片的啊?

stm32,可以輕松移植到任何單片機平臺
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
国产精品毛片va一区二区三区| 九九热国产在线| 亚洲一区二区三区久久| 日韩激情av在线播放| 亚洲图片欧美激情| 久久午夜av| 精品网站aaa| yellow在线观看网址| 午夜电影福利网| 无码国产精品高潮久久99| 九九九久久久久| 欧美图片自拍偷拍| 中文字幕日韩精品无码内射| 成人国产精品久久久| 中文字幕9999| 91精选在线观看| 亚洲人成网站影音先锋播放| 日本美女视频一区二区| 中文字幕伦av一区二区邻居| 午夜无码国产理论在线| 激情视频在线观看免费| 黑料不打烊so导航| 私人影视中文字幕| 伊人成年综合网| 777777国产7777777| 亚洲丝袜在线观看| 欧美亚洲一二三区| 亚洲一区免费看| 国产高清精品一区二区三区| 欧美一区二区三区艳史| 尤物精品国产第一福利三区| 69堂成人精品免费视频| 亚洲国产精品久久久男人的天堂| 久久久久久97三级| 国产激情一区二区三区| 国产精品资源| 狠狠入ady亚洲精品经典电影| 欧美乱大交xxxx| 99久久精品无免国产免费| 免费网站看av| 一级性生活免费视频| aaaa黄色片| 污污视频在线免费| 男女视频一区二区三区| 欧美狂野激情性xxxx在线观| 日韩资源av在线| 久久大片网站| 国产精品18毛片一区二区| 国产精品一区电影| 国产精品成人av性教育| 日本精品久久中文字幕佐佐木| 欧美国产第二页| 欧美成人免费大片| 精品激情国产视频| 日韩中文字幕亚洲| 视频在线观看99| 中文字幕亚洲天堂| 色悠悠国产精品| 色偷偷9999www| 在线a欧美视频| 中日韩午夜理伦电影免费 | 国产成人精品久久久| 精品国产一区二区三区久久久| 日韩国产激情在线| 日韩精品在线第一页| 日韩欧美中文字幕制服| 91精品在线观看入口| 欧美日韩国产免费一区二区 | 成人黄色在线播放| 国产精品国产自产拍高清av水多| 26uuu另类亚洲欧美日本一 | 中国免费黄色片| 夜夜爽久久精品91| 午夜精品久久久久久久99热影院| 国产又黄又猛又粗又爽的视频| 北条麻妃69av| www.这里只有精品| 永久免费黄色片| 男生和女生一起差差差视频| 麻豆tv在线观看| 国产大学生视频| 蜜桃无码一区二区三区| 特黄一区二区三区| 欧美日韩免费一区二区| 国产成人愉拍精品久久| 五月婷婷激情五月| www.av网站| 在线亚洲日本| 国产精品一区二三区| 天堂视频免费在线观看| 极品色影院av| 在线国产视频| 欧美一区二区三区在线观看免费| 亚洲区欧洲区| 九色porny丨入口在线| 秋霞伦理一区| 涩涩涩久久久成人精品| 天堂精品久久久久| 偷窥自拍亚洲色图精选| 国产精品成人av| 国产免费成人| 国产成人精品影院| 国产一区精品福利| 日韩成人久久| 国产精品一在线观看| 日韩黄色大片| 中日韩男男gay无套| 国产一区啦啦啦在线观看| 91免费小视频| 性久久久久久久久久久久| 欧美日韩精品一区二区三区蜜桃| 亚洲第一男人天堂| 久久国产精品影视| 成人字幕网zmw| 在线观看成人一级片| 国产91在线免费| 亚洲国产精品第一页| 日日噜噜夜夜狠狠久久波多野| 69国产精品视频免费观看| www.日日夜夜| 成年女人毛片| 99re在线视频| 在线观看欧美| 91不卡在线观看| 国产精品99久久久久久久女警| 国产精品色婷婷| 5566中文字幕一区二区电影| 久久精品成人动漫| 91网站在线免费观看| 国产又黄又爽免费视频| 在线免费看v片| 欧美日韩激情在线观看| 亚洲精品97久久中文字幕| 免费尤物视频| 成人欧美一区| 97久久综合区小说区图片区| 亚洲精品字幕| 亚洲国产精品黑人久久久| 欧美日韩国产首页| 国模极品一区二区三区| 欧美激情视频一区二区三区| 三级a在线观看| 色老板免费视频| 亚洲免费网站观看视频| 超碰在线中文| 粉嫩av一区二区三区四区五区 | 国产艳妇疯狂做爰视频| 日韩成年人视频| 中文字幕麻豆| 神马久久高清| 高清一区二区| 日本亚洲免费观看| 亚洲va天堂va国产va久| 一区二区三区动漫| 国产一级特黄a大片99| www.com操| av大片免费观看| 小视频福利在线| 免费在线观看的电影网站| 欧洲杯足球赛直播| 99精品国产99久久久久久白柏| 欧美日韩亚洲另类| 国产suv精品一区二区三区88区| 玖玖精品在线视频| 色www亚洲国产阿娇yao| 中文字幕2区| 国产中文字幕在线| 亚洲自拍电影| 99精品久久免费看蜜臀剧情介绍| 欧美成人性战久久| 亚洲aa中文字幕| 中文字幕天天干| 懂色av中文字幕| av电影免费| 四虎精品一区二区免费| 久久久久一区| 九九在线高清精品视频| 成人av在线资源网| 亚洲国产高清高潮精品美女| 岛国视频一区| 美女久久久久久久久| 蜜桃在线一区二区| 欧洲视频在线免费观看| 美女精品一区最新中文字幕一区二区三区| 国产91精品一区二区麻豆网站| 欧美一级高清片| 国产精品视频一区二区三区经| 香蕉视频污视频| 中文资源在线官网| 3344国产永久在线观看视频| 夜夜爽av福利精品导航| 欧美性生活大片免费观看网址| 欧洲成人在线视频| 五月花丁香婷婷| 午夜美女福利视频| 午夜激情在线观看| 伊人久久综合| 欧美性三三影院| 91av一区二区三区| 国产亚洲精品熟女国产成人| 国产一级片子| 韩国理伦片久久电影网| 国产精品99久久久久久久vr| 亚洲国产精品免费| 一卡二卡3卡四卡高清精品视频| 又嫩又硬又黄又爽的视频| 污视频网站入口| 欧美黄视频在线观看| 久久久久国产免费免费| 欧美第一页在线| 国产又猛又黄的视频| 韩国av免费在线| av福利在线导航| 国产一区二区在线视频| 亚洲午夜激情免费视频| 国产 日韩 欧美在线| 国产精品区在线观看| 午夜免费福利在线观看| 久久激情婷婷| 国产视频精品自拍| www.爱色av.com| 天天综合在线视频| 手机看片久久| 久久综合色鬼综合色| 久久琪琪电影院| 荫蒂被男人添免费视频| 又黄又湿又爽又免费又色| 8x国产一区二区三区精品推荐| ...中文天堂在线一区| 国产精品久久久久久av下载红粉| 亚洲第一黄色网址| fc2ppv素人在线| 北条麻妃国产九九九精品小说| 欧美日韩一二三四五区| 国内精品二区| 国产又大又黄又粗| 欧美13一16娇小xxxx| 久久国产精品露脸对白| 久久精品久久久久久国产 免费| wwww.国产| 91日本韩国| 精品国产网站| 欧美一区二区三区四区五区| 色哟哟免费网站| 性生活黄色大片| 成人不卡视频| 亚洲激情六月丁香| 精品高清视频| 免费黄色一级大片| 忘忧草在线日韩www影院| 久久久国产精品午夜一区ai换脸| 日本久久久a级免费| 东方伊人免费在线观看| 最近中文字幕在线| 久久精品天堂| 欧美精品在线免费| 中国极品少妇videossexhd| 99.玖玖.com| 在线国产欧美| 在线观看视频亚洲| 少妇欧美激情一区二区三区| 你懂的免费视频| 中文字幕一区二区三区乱码图片| 亚洲精品一线二线三线| 久久黄色免费看| 日本三级电影在线播放| 99久久精品费精品国产| 亚洲国产欧美精品| 久久人人爽av| av第一福利大全导航| 激情综合久久| 久久这里有精品| xxxx日本免费| 邻居大乳一区二区三区| 成人性生交大片免费| 国产日韩欧美在线| 婷婷激情五月综合| 国产毛片精品久久| 日韩欧美极品在线观看| 免费在线看黄色片| 国产aⅴ2021| 欧美精品三区| 超在线视频97| 亚洲人与黑人屁股眼交| 成a人片在线观看| 国产精品亲子乱子伦xxxx裸| 久久66热这里只有精品| 欧美在线 | 亚洲| 一本久久青青| 日韩精品免费电影| 久久久午夜精品福利内容| 在线视频三级| 北岛玲一区二区三区四区| 成人黄色在线免费观看| 亚洲av无码乱码国产精品久久 | 亚洲精品久久久蜜桃| 亚洲视频欧美在线| 欧美午夜性囗交xxxx| 97精品在线| 欧美乱大交xxxxx| 欧美丰满艳妇bbwbbw| 97成人资源| 欧美日韩黄色影视| 亚洲精品无码久久久久久久| 三级视频在线| 国产精品丝袜久久久久久app| 亚洲看片网站| 无人日本免费视频| 日本va欧美va欧美va精品| 国产精品免费在线免费| 亚洲一区二区色| 日韩中文av| 久久福利网址导航| 日本在线视频中文字幕| 成人在线免费av| 日韩免费观看高清完整版 | 日韩成人在线资源| 国产99在线|亚洲| 麻豆成人久久精品二区三区红| 亚洲一区二区在线播放| 亚洲精品一区二区三区区别| 国产精品伦理久久久久久| 韩国国内大量揄拍精品视频| 99re热视频| 精品国产一区二区三区久久久蜜臀| 久久综合久久美利坚合众国| 国产成人在线观看网站| 成人看片黄a免费看视频| 亚洲区在线播放| 久久精品欧美一区二区| 麻豆国产一区| 日韩资源在线观看| 天天爱天天做天天爽| 欧美一二区在线观看| 91国产高清在线| 丰满人妻一区二区| av成人激情| 国产精品一区二区三区观看| 国产短剧电视剧免费观看| 国产一区二区三区日韩| 亚洲综合第一| 亚洲一本大道| 樱桃视频在线观看一区| 国产美女18xxxx免费视频| jizz性欧美| 欧美疯狂性受xxxxx喷水图片| 一区二区伦理片| 亚洲狼人在线| 综合国产在线观看| 波多野结衣电车| 亚洲综合婷婷| 亚洲www视频| 日日操夜夜爽| 国产亚洲成年网址在线观看| 黄色高清无遮挡| 国产网站在线免费观看| 欧美日韩高清一区二区| 国产午夜精品福利视频| 岛国精品一区| 性色av一区二区三区红粉影视| 黄色一级大片在线免费看国产一| 先锋影音久久久| 亚洲日本理论电影| 最新av中文字幕| 一本色道a无线码一区v| 黑人巨大精品| 国产5g影院天天爽天天看| 色在线中文字幕| 成人免费观看av| 中文字幕精品www乱入免费视频| 在线观看黄网站| 精品国产中文字幕第一页| 国产精品成人免费电影| 欧美激情性xxxxx| 97se亚洲国产综合自在线不卡| 欧美啪啪免费视频| 岛国成人毛片| 亚洲国产欧美精品| 一本一道人人妻人人妻αv| 99在线精品免费视频九九视| 欧美综合77777色婷婷| 色播在线视频| 欧美日韩一级黄| 精品美女久久久久| 亚洲精品日韩久久| 宅男噜噜99国产精品观看免费| 毛片在线播放网址| 亚洲丁香久久久| 国产孕妇孕交大片孕| 蜜臀av性久久久久蜜臀aⅴ流畅 | 中文字幕视频网站| 亚洲精品1区2区| 小泽玛利亚av在线| 色呦呦在线看| 精品久久久91| 激情欧美成人久久综合小说| 日本一区二区免费在线观看视频| 国产一线在线观看| 天堂在线精品| 国产视频一区二区不卡|