在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)的串口通信協(xié)議分享

Q4MP_gh_c472c21 ? 來(lái)源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-11-16 16:46 ? 次閱讀

現(xiàn)實(shí)生活中, 我們總是要與人打交道,互通有無(wú)。單片機(jī)也一樣,需要跟各種設(shè)備交互。例如汽車(chē)的顯示儀表需要知道汽車(chē)的轉(zhuǎn)速及電動(dòng)機(jī)的運(yùn)行參數(shù),那么顯示儀表就需要從汽車(chē)的底層控制器取得數(shù)據(jù)。而這個(gè)數(shù)據(jù)的獲得過(guò)程就是一個(gè)通信過(guò)程。類(lèi)似的例子還有控制器通常是單片機(jī)或者PLC變頻器的通信。通信的雙方需要遵守一套既定的規(guī)則也稱(chēng)為協(xié)議,這就好比我們?nèi)酥g的對(duì)話,需要在雙方都遵守一套語(yǔ)言語(yǔ)法規(guī)則才有可能達(dá)成對(duì)話。


通信協(xié)議又分為硬件層協(xié)議和軟件層協(xié)議。硬件層協(xié)議主要規(guī)范了物理上的連線,傳輸電平信號(hào)及傳輸?shù)闹刃虻扔布再|(zhì)的內(nèi)容。常用的硬件協(xié)議有串口,IIC, SPI, RS485, CANUSB。軟件層協(xié)議則更側(cè)重上層應(yīng)用的規(guī)范,比如modbus協(xié)議。

好了,那這里我們就著重介紹51單片機(jī)的串口通信協(xié)議,以下簡(jiǎn)稱(chēng)串口。串口的6個(gè)特征如下。

(1)、物理上的連線至少3根,分別是Tx數(shù)據(jù)發(fā)送線,Rx數(shù)據(jù)接收線,GND共用地線。


(2)、0與1的約定。RS232電平,約定﹣5V至﹣25V之間的電壓信號(hào)為1,﹢5V至﹢25V之間的電壓信號(hào)為0 。TTL電平,約定5V的電壓信號(hào)為1,0V電壓信號(hào)為0 。CMOS電平,約定3.3V的電壓信號(hào)為1,0V電壓信號(hào)為0 。其中,CMOS電平一般用于ARM芯片中。

(3)、發(fā)送秩序。低位先發(fā)。


(4)、波特率。收發(fā)雙方共同約定的一個(gè)數(shù)據(jù)位(0或1)在數(shù)據(jù)傳輸線上維持的時(shí)間。也可理解為每秒可以傳輸?shù)奈粩?shù)。常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。


(5)、通信的起始信號(hào)。發(fā)送方在沒(méi)有發(fā)送數(shù)據(jù)時(shí),應(yīng)該將Tx置1 。當(dāng)需發(fā)送時(shí),先將Tx置0,并且保持1位的時(shí)間。接受方不斷地偵測(cè)Rx,如果發(fā)現(xiàn)Rx常時(shí)間變高后,突然被拉低(置為0),則視為發(fā)送方將要發(fā)送數(shù)據(jù),迅速啟動(dòng)自己的定時(shí)器,從而保證了收發(fā)雙方定時(shí)器同步定時(shí)。

(6)、停止信號(hào)。發(fā)送方發(fā)送完最后一個(gè)有效位時(shí),必須再將Tx保持1位的時(shí)間,即為停止位。

好了,理論暫時(shí)到這里,現(xiàn)在我們要做一個(gè)實(shí)驗(yàn),將一個(gè)字節(jié)從51單片機(jī)發(fā)送到電腦串口調(diào)試助手上。這個(gè)實(shí)驗(yàn)的目的是為了掌握串口通信協(xié)議的收發(fā)過(guò)程。

虛擬串口

實(shí)驗(yàn)一、虛擬串口實(shí)驗(yàn)

一般單片機(jī)都有專(zhuān)門(mén)的串口引腳,51里面分別是P3.0和P3.1,這些引腳擁有串口的硬件電路,因此使用它們并不需要設(shè)置信號(hào)的發(fā)送停止。為了掌握協(xié)議,我們使用其他的引腳來(lái)模擬串口,所以也叫虛擬串口。這里我們選用P1.0,然而注意到我們51單片機(jī)要發(fā)送數(shù)據(jù)給電腦,必須經(jīng)過(guò)一個(gè)串口轉(zhuǎn)USB設(shè)備(即TTL電平轉(zhuǎn)換為RS232電平),而限于我們的開(kāi)發(fā)板只有P3.0與P3.1連接到了串口轉(zhuǎn)USB設(shè)備,所以我們可以將P1.0短接到P3.1 。下圖是這個(gè)串口轉(zhuǎn)USB的原理圖。

好了直接上代碼吧。

[cpp]viewplaincopy#include "reg51.h"/* 將P1.0虛擬成串口發(fā)送腳TX 以9600bit/s的比特率向外發(fā)送數(shù)據(jù) 因?yàn)椴ㄌ芈适?9600bit/s 所以me發(fā)送一位的時(shí)間是 t=1000000us/9600=104us */sbit TX=P3^1; //P1^0 output TTL signal, need to transferred to rs232 signal, can be connected to P3^1 #define u16 unsigned int //宏定義 #define u8 unsigned char u8 sbuf; bit ti=0; void delay(u16 x){ while(x--); } void Timer0_Init(){ TMOD |= 0x01; TH0=65440/256; TH0=65440%256; TR0=0; } void Isr_Init(){ EA=1; ET0=1; } void Send_Byte(u8 dat){ sbuf=dat;//通過(guò)引入全局變量sbuf,可以保存形參dat TX=0; //A 起始位 TR0=1; while(ti==0); //等待發(fā)送完成 ti=0; //清除發(fā)送完成標(biāo)志 } void TF0_isr() interrupt 1 //每104us進(jìn)入一次中斷 { static u8 i; //記錄進(jìn)入中斷的次數(shù) TH0=65440/256; TL0=65440%256; i++; if(i>=1 && i<=8) { if((sbuf&(1<<(i-1)))==0) // (sbuf&(1<<(i-1)))表示取出i-1位 { TX=0; } else { TX=1; } } if(i==9) //停止位 { TX=1; } if(i==10) { TR0=0; i=0; ti=1; //發(fā)送完成 } } void main(){ TX=1; //使TX處于空閑狀態(tài) Timer0_Init(); Isr_Init(); while(1) { Send_Byte(65); //0x41 delay(60000); } }

實(shí)驗(yàn)引入了定時(shí)器0來(lái)控制發(fā)送線上的各個(gè)位的保持時(shí)間。首先main函數(shù)進(jìn)入,TX置1則使發(fā)送線處于空閑,這時(shí)候發(fā)送方和接受方都處于空閑。接下來(lái)初始化定時(shí)器0,TR0置0表示還不要啟動(dòng)定時(shí)器0。接著中斷系統(tǒng)初始化,此時(shí)中斷系統(tǒng)已經(jīng)開(kāi)啟。進(jìn)入while循環(huán),先進(jìn)Send_Byte()函數(shù),將65傳給形參dat,dat再將65賦值給sbuf,到這里準(zhǔn)備工作就做好了。接著TX置0,這個(gè)是起始位,要保持這個(gè)起始位104us。于是就啟動(dòng)定時(shí)器TR0置1,計(jì)時(shí)器開(kāi)始計(jì)數(shù)。當(dāng)?shù)谝淮我绯龅臅r(shí)候,也就是過(guò)了104us,進(jìn)入中斷,同時(shí)接收方也偵測(cè)到了這個(gè)突然被拉低的信號(hào),于是迅速啟動(dòng)自己的定時(shí)器。進(jìn)入中斷子函數(shù)后,先是重裝定時(shí)器初值,然后i加1,也就是當(dāng)i=1時(shí),就應(yīng)該發(fā)送數(shù)據(jù)的最低位了,總共有8位數(shù)據(jù),所以使用條件語(yǔ)句if(i>=1 && i<=8)來(lái)判斷是否發(fā)送完數(shù)據(jù)位。然后再通過(guò)if(i==9) 來(lái)發(fā)送停止位,最后當(dāng)i=10時(shí),也就是發(fā)送完了,這時(shí)候要關(guān)閉定時(shí)器(那么程序也就),同時(shí)i置0,ti置1(才能跳出while(ti==0)循環(huán)),最后將ti置0,保證下次要發(fā)送字節(jié)時(shí)讓程序停留在while(ti==0)。

片上串口

以上說(shuō)的是虛擬串口,上文中談到與串口相關(guān)的引腳P3.0與P3.1,事實(shí)上51單片機(jī)自帶片上串口,那這個(gè)串口又該怎么使用呢?

片上串口支持同步模式與異步模式。簡(jiǎn)單來(lái)說(shuō)同步模式就是指有時(shí)鐘線,而異步模式無(wú)時(shí)鐘線。這里的時(shí)鐘線是指在同步通信時(shí),用一根線專(zhuān)門(mén)傳輸時(shí)鐘信號(hào),這個(gè)信號(hào)用來(lái)與要發(fā)送的每一位保持同步,這樣就避免了例如異步通信中因?yàn)椴捎枚〞r(shí)器而引入的時(shí)間誤差。

片上串口還支持8位模式和9位模式。如下圖所示

其中D0-D7是一個(gè)字節(jié)的8個(gè)位。9位模式只是多了一個(gè)位TB8,這個(gè)TB8的作用是奇偶校驗(yàn)或多機(jī)通信。奇偶校驗(yàn)原理這不加分析。多機(jī)通信時(shí)比如主機(jī)只發(fā)送數(shù)據(jù)給網(wǎng)絡(luò)中的一臺(tái)地址為0x02的設(shè)備,這時(shí)候先讓TB8為1,前面的D0-D7則為地址即0x02,之后再讓TB8為0,前面的D0-D7則為數(shù)據(jù)了。

上面設(shè)置了片上串口的模式,另外還要設(shè)置串口的波特率。

片上串口的波特率等于定時(shí)器1工作在方式2時(shí)溢出率的32分頻。如果要定時(shí)器1工作在方式2,那么TMOD=0x20。另外要保證為32分頻,我們還必須設(shè)置計(jì)數(shù)器初值。設(shè)晶振為11.0592Mhz,則定時(shí)器的計(jì)數(shù)脈沖為F=f/12,則定時(shí)器每計(jì)一個(gè)脈沖的時(shí)間為T(mén)=12/f。又令計(jì)數(shù)器的起點(diǎn)為x,則溢出一次要計(jì)的脈沖數(shù)為(256-x)。所以在計(jì)數(shù)起點(diǎn)為x時(shí),溢出一次的時(shí)間為t=12/f*(256-x)。則對(duì)應(yīng)的溢出率為1/t=f/(12*(256-x))。對(duì)應(yīng)的波特率就為b=f/(384*(256-x))。

x=256-f/(384*b)

其中f為晶振頻率,b為希望的波特率,x為定時(shí)器的計(jì)數(shù)起點(diǎn)TH1的值。

例如當(dāng)晶振為11.0592M,希望波特率為9600bit/s,則TH1=253。題外話,我們同樣可以演算出在其他常用波特率情況下,TH1始終為一個(gè)整數(shù)。這里也就解釋了為什么51里面選用了11.0592M的晶振而不是12M,這樣就保證了串口的時(shí)序更加準(zhǔn)確,雖然犧牲了定時(shí)器的準(zhǔn)確度。

實(shí)驗(yàn)二,片外串口發(fā)送一個(gè)字節(jié)。

好了現(xiàn)在開(kāi)始我們的實(shí)驗(yàn)之旅。直接看代碼吧。

[cpp]viewplaincopy # include "reg51.h" #define u16 unsigned int # define u8 unsigned char void delay(u16 x){ while (x--); } void Uart_Init() //串口初始化 { SCON = 0x50; //8位異步模式 TMOD |= 0x20; //定時(shí)器1工作方式2 TH1 = 253; //9600bit/s TR1 = 1; } void Send_Byte(u8 dat){ SBUF = dat; //啟動(dòng)發(fā)送,只需要把發(fā)送內(nèi)容給SBUF這個(gè)寄存器 while (TI == 0); //等待發(fā)送完成,因?yàn)門(mén)I為1時(shí)表示在發(fā)送停止位 TI = 0; } void main(){ Uart_Init(); while (1) { Send_Byte('m'); delay(60000); } }

實(shí)驗(yàn)二較之實(shí)驗(yàn)一,代碼減少了很多,而且不用考慮繁瑣的位發(fā)送時(shí)序。只需要明白各個(gè)寄存器SCON,TMOD,TCON,SBUF的用法。TI是SCON中的第一位,為發(fā)送中斷請(qǐng)求標(biāo)志位。在本方式中,在停止位開(kāi)始發(fā)送時(shí)由內(nèi)部硬件置位,響應(yīng)中斷后TI必須又軟件清零。

實(shí)驗(yàn)三、片上串口發(fā)送一個(gè)字符串

上面介紹了如何發(fā)送一個(gè)字節(jié),那如何發(fā)送一個(gè)字符串甚至文本呢?這里我們首先介紹下字符串的概念。

字符串:從存儲(chǔ)器的某個(gè)地址開(kāi)始,連續(xù)存放多個(gè)字符的ASCII碼,并且在最后一個(gè)字符的后面存放一個(gè)0,這段連續(xù)的內(nèi)存空間就叫字符串,最后的0叫字符串的結(jié)束符。注意這里的0和加單引號(hào)的0不是一個(gè)概念,加單引號(hào)的0是指0的ASCII碼。

數(shù)組與字符串的關(guān)系:字符串是數(shù)組的一種特殊情況,數(shù)組在特定條件下可當(dāng)做字符串用。C語(yǔ)言用雙引號(hào)描述一個(gè)字符串,如“abcd”。

下面我們通過(guò)一個(gè)實(shí)驗(yàn)來(lái)展示如何發(fā)送字符串。我們實(shí)驗(yàn)的目標(biāo)是打印字符串“Hello World ! 第一!”到打印機(jī)。直接上代碼。

[cpp]viewplaincopy#include "reg51.h" #define u16 unsigned int #define u8 unsigned char void delay(u16 x){ while(x--); } void Uart_Init() //串口初始化 { SCON=0x50; //8位異步模式 TMOD|=0x20; //定時(shí)器1工作方式2 TH1=253;//9600bit/s TR1=1; } void Send_Byte(u8 dat) //串口發(fā)送一個(gè)字節(jié) { SBUF=dat; //啟動(dòng)發(fā)送,只需要把發(fā)送內(nèi)容給SBUF這個(gè)寄存器 while(TI==0); //等待發(fā)送完成,因?yàn)門(mén)I為1時(shí)表示在發(fā)送停止位 TI=0; }void Send_String(u8 *str) //發(fā)送一個(gè)字符串 *str為字符串第一個(gè)字符的地址 { abc: //標(biāo)號(hào) if(*str != 0) { Send_Byte(*str); str++; goto abc; } } void main(){ Uart_Init(); while(1) { Send_String("Hello World! 第一!"); Send_Byte(10); delay(60000); delay(60000); } }

實(shí)驗(yàn)效果


責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6043

    文章

    44623

    瀏覽量

    638707
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137764
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1627

    瀏覽量

    55738

原文標(biāo)題:?jiǎn)纹瑱C(jī)C語(yǔ)言之串口通信協(xié)議(代碼分享)

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview串口通信丟數(shù)問(wèn)題(非終止符問(wèn)題)

    通信協(xié)議是參考32960的,和串口助手測(cè)試過(guò)程正常,和labview通信過(guò)程會(huì)出現(xiàn)丟數(shù)的問(wèn)題,體現(xiàn)在Bytes at port屬性節(jié)點(diǎn)返回的字節(jié)數(shù)上,單片機(jī)目前測(cè)試的功能是固定每組數(shù)
    發(fā)表于 01-20 09:13

    51單片機(jī)pwm和spwm

    51單片機(jī)pwm
    發(fā)表于 01-08 15:54 ?2次下載

    總線通信協(xié)議解析及應(yīng)用

    在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,總線通信協(xié)議扮演著至關(guān)重要的角色。它們定義了數(shù)據(jù)如何在處理器、內(nèi)存、輸入/輸出設(shè)備等組件之間傳輸。 總線通信協(xié)議的基本概念 總線通信協(xié)議是一組規(guī)則,它規(guī)定了數(shù)據(jù)在系統(tǒng)總線上的傳輸
    的頭像 發(fā)表于 12-31 10:07 ?223次閱讀

    常見(jiàn)串口通信協(xié)議 如何設(shè)置串口參數(shù)

    串口通信是一種常見(jiàn)的通信方式,廣泛應(yīng)用于計(jì)算機(jī)、嵌入式系統(tǒng)和各種電子設(shè)備之間。串口通信協(xié)議主要是指在串行
    的頭像 發(fā)表于 12-27 09:51 ?756次閱讀

    上位機(jī)通信協(xié)議詳解 嵌入式上位機(jī)設(shè)計(jì)流程

    通信協(xié)議的介紹: Modbus 概述 :Modbus是一種串行通信協(xié)議,廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域。它定義了上位機(jī)和下位機(jī)之間的通信方式,包括
    的頭像 發(fā)表于 12-04 10:21 ?1149次閱讀

    51單片機(jī)中為什么很少出現(xiàn)printf的身影

    流,他能跟外部交互的,只有串口51單片機(jī)用的開(kāi)發(fā)語(yǔ)言是C語(yǔ)言,雖然跟標(biāo)準(zhǔn)C有點(diǎn)區(qū)別,但是 printf 函數(shù)還是可以用的,只要修改 printf 的輸
    的頭像 發(fā)表于 12-03 10:46 ?555次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>中為什么很少出現(xiàn)printf的身影

    串口通信協(xié)議解析 串口通信應(yīng)用實(shí)例

    串口通信協(xié)議解析 串口通信協(xié)議是指規(guī)定了數(shù)據(jù)包的內(nèi)容,內(nèi)容包含了起始位、主體數(shù)據(jù)、校驗(yàn)位及停止位,雙方需要約定一致的數(shù)據(jù)包格式才能正常收發(fā)數(shù)據(jù)的有關(guān)規(guī)范。以下是
    的頭像 發(fā)表于 11-21 17:03 ?719次閱讀

    基于51單片機(jī)的多路溫度檢測(cè)調(diào)節(jié)及串口顯示

    ,利用虛擬串口模塊實(shí)時(shí)將平均溫度值實(shí)現(xiàn)串口顯示。仿真演示視頻:基于51單片機(jī)的多路溫度檢測(cè)調(diào)節(jié)及串口顯示-仿真視頻設(shè)計(jì)介紹 
    的頭像 發(fā)表于 10-22 14:13 ?364次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的多路溫度檢測(cè)調(diào)節(jié)及<b class='flag-5'>串口</b>顯示

    基于51單片機(jī)的遙控開(kāi)關(guān)仿真(雙機(jī)通信)

    單片機(jī)最小系統(tǒng)、繼電器及LED燈構(gòu)成;(4)由于仿真無(wú)法模擬無(wú)線模塊通信,故利用單片機(jī)RXD、TXD端口模擬,通過(guò)遙控器的開(kāi)關(guān)實(shí)現(xiàn)對(duì)主機(jī)LED燈的控制,實(shí)現(xiàn)LED燈的點(diǎn)亮及熄滅。仿真演示視頻:基于
    的頭像 發(fā)表于 10-22 14:12 ?395次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的遙控開(kāi)關(guān)仿真(雙機(jī)<b class='flag-5'>通信</b>)

    如何實(shí)現(xiàn)51單片機(jī)與PC機(jī)的串行通信

    51單片機(jī)與PC機(jī)的串行通信是一種常見(jiàn)的通信方式,它允許單片機(jī)通過(guò)串行接口與PC
    的頭像 發(fā)表于 10-21 11:35 ?1297次閱讀

    PROFINET通信協(xié)議是什么

    PROFINET通信協(xié)議是一種專(zhuān)為工業(yè)自動(dòng)化領(lǐng)域設(shè)計(jì)的基于以太網(wǎng)的實(shí)時(shí)通信協(xié)議。以下是對(duì)PROFINET通信協(xié)議的詳細(xì)解析,包括其定義、特點(diǎn)、體系結(jié)構(gòu)、工作原理、通信方式、應(yīng)用領(lǐng)域以及
    的頭像 發(fā)表于 09-25 18:13 ?2610次閱讀

    #單片機(jī) #人工智能 #pcb設(shè)計(jì) #通信協(xié)議

    通信協(xié)議
    深圳市北天通訊有限公司
    發(fā)布于 :2024年09月03日 09:27:07

    上位機(jī)與下位機(jī)通信協(xié)議的優(yōu)化策略

    在現(xiàn)代工業(yè)自動(dòng)化系統(tǒng)中,上位機(jī)與下位機(jī)之間的通信是不可或缺的環(huán)節(jié)。上位機(jī)通常指負(fù)責(zé)監(jiān)控、管理和控制功能的計(jì)算機(jī)或設(shè)備,而下位機(jī)則負(fù)責(zé)執(zhí)行具體
    的頭像 發(fā)表于 06-28 16:36 ?1076次閱讀

    ?51單片機(jī)串口通信詳細(xì)介紹-小白必看

    51單片機(jī)串口通信單片機(jī)與外部設(shè)備通信的重要方式,它基于串行
    的頭像 發(fā)表于 04-17 09:33 ?2165次閱讀
    ?<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>詳細(xì)介紹-小白必看

    UART串口通信協(xié)議是什么?

    UART (Universal Asynchronous Receiver/Transmitter) 是一種通信接口協(xié)議,用于實(shí)現(xiàn)串口通信。它是一種簡(jiǎn)單的、可靠的、廣泛應(yīng)用的
    的頭像 發(fā)表于 03-19 17:26 ?1555次閱讀
    主站蜘蛛池模板: 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片男 | 天天操夜夜夜 | 又粗又长又大真舒服好爽漫画 | 经典三级一区在线播放 | 日韩精品一区二区三区免费视频 | 色cccwww在线播放 | 干中文字幕 | 91极品反差婊在线观看 | 国产真实乱xxxav | 美女视频永久黄网站免费观看国产 | 天堂8中文在线最新版在线 天堂8资源8在线 | 人人爱干 | 欧美18同性gay视频 | 国产精品嫩草影院一二三区入口 | 四虎在线免费视频 | 丁香花免费观看视频 | 成人精品视频在线观看播放 | 性瘾高h姚蕊全文免费阅读 性做久久久久 | 美女视频黄免费 | 久久性生活 | 男女一级大黄 | 台湾av | 国产区一区二区三区 | 久久水蜜桃网 | 7m视频精品凹凸在线播放 | 看真人一级毛片 | 欧美色穴| 日本三级日本三级人妇三级四 | 亚欧毛片基地国产毛片基地 | 日韩免费观看一级毛片看看 | 三级黄色免费 | 黄色片免费看视频 | 毛片免费高清免费 | 毛茸茸成熟妇女亚洲人 | 男女爱爱视频免费看 | 77788色淫视频免费观看 | 天天爽夜夜爽8888视频精品 | 天天舔天天射天天操 | 国产在线永久视频 | 国产精品伦子一区二区三区 | 国产日韩精品一区二区在线观看 |