8051單片機(jī)的異步串行通信技術(shù)_第1頁
8051單片機(jī)的異步串行通信技術(shù)_第2頁
8051單片機(jī)的異步串行通信技術(shù)_第3頁
8051單片機(jī)的異步串行通信技術(shù)_第4頁
8051單片機(jī)的異步串行通信技術(shù)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

.PAGE.第八章80第一節(jié)概述計(jì)算機(jī)與外界的信息交換稱為通信。常用通信方式有兩種:并行通信與串行通信,簡稱并行傳送和串行傳送。并行傳送具有傳送速度快,效率高等優(yōu)點(diǎn),但傳送多少數(shù)據(jù)位就需要多少根數(shù)據(jù)線,傳送成本高;串行傳送是按位順序進(jìn)行數(shù)據(jù)傳送,最少僅需要一根傳輸線即可完成,傳送距離遠(yuǎn),但傳送速度慢。串行通信又分同步和異步兩種方式。同步通信中,在數(shù)據(jù)傳送開始時先用同步字符來指示〔常約定1—2個,并由同時傳送的時鐘信號來實(shí)現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,接著就連續(xù)按順序傳送數(shù)據(jù)。這種傳送方式對硬件結(jié)構(gòu)要求較高。在單片機(jī)異步通信中數(shù)據(jù)分為一幀一幀地傳送,即異步串行通信一次傳送一個完整字符,字符格式如圖8—1所示:圖8—1異步串行通信的字符格式一個字符應(yīng)包括以下信息:1.起始位:對應(yīng)邏輯0〔space狀態(tài)。發(fā)送器通過發(fā)送起始位開始一幀字符的傳送。2.數(shù)據(jù)位:起始位之后傳送數(shù)據(jù)位。數(shù)據(jù)位中低位在前,高位在后。數(shù)據(jù)位可以是5、6、7、8位。3.奇偶校驗(yàn)位:奇偶校驗(yàn)位實(shí)際上是傳送的附加位,若該位用于用于奇偶校驗(yàn),可校檢串行傳送的正確性。奇偶校驗(yàn)位的設(shè)置與否及校驗(yàn)方式〔奇校驗(yàn)還是偶校驗(yàn)由用戶需要確定。4.停止位:用邏輯1〔mark表示。停止位標(biāo)志一個字符傳送的結(jié)束。停止位可以是1、1.5或2位。串行通信中用每秒傳送二進(jìn)制數(shù)據(jù)位的數(shù)量表示傳送速率,稱為波特率。1波特=1bps〔位/秒例如數(shù)據(jù)傳送速率是240幀/秒,每幀由一位起始位、八位數(shù)據(jù)位和一位停止位組成,則傳送速率為:10×240=2400位/秒=2400波特單片機(jī)的串行通信主要采用異步通信傳送方式。在串行通信中,按不同的通信方向有單工傳送和雙工傳送之分,如圖8—2所示:甲機(jī)乙機(jī)〔a單工傳送甲機(jī)乙機(jī)〔b雙工傳送甲機(jī)乙機(jī)〔c全雙工傳送圖8—2單片機(jī)串行通信方向示意圖8—2〔a中,甲.乙兩機(jī)只能單方向發(fā)送或接收數(shù)據(jù);圖8—2〔b中,甲機(jī)和乙機(jī)能分時進(jìn)行雙向發(fā)送和接收數(shù)據(jù);圖8—2〔c中,甲,乙兩機(jī)能同時雙向發(fā)送和接收數(shù)據(jù)。第二節(jié)8051串行口的基本結(jié)構(gòu)MCS—51系列單片機(jī)串行口結(jié)構(gòu)框圖如圖8—3所示:圖8—38051串行口結(jié)構(gòu)框圖一、串行口緩沖寄存器SBUF圖8—3中SUBF是串行口緩沖寄存器,發(fā)送SBUF和接收SBUF地址同為99H,但由于發(fā)送SBUF不能接收數(shù)據(jù),接收SBUF也不具有發(fā)送功能,故二者工作互不干擾。當(dāng)CPU向SBUF寫入時,數(shù)據(jù)進(jìn)入發(fā)送SBUF,同時啟動串行發(fā)送;CPU讀SBUF時,實(shí)際上是讀接收SBUF數(shù)據(jù)。二、串行通信控制寄存器與串行通信有關(guān)的控制寄存器主要是串行通信控制寄存器SCON。SCON是8051的一個可以位尋址的專用寄存器,用于串行數(shù)據(jù)通信的控制。SCON的單元地址98H,位地址9FH—98H。寄存器內(nèi)容及位地址表示如下:SCON位地址9F9E9D9C9B9A9998位符號SM0SM1SM2RENTB8RB8TIRI各位功能說明如下:位符號功能說明SM0,SM1SM0,SM1──串行口工作方式選擇位:SM0SM1工作方式功能0008位數(shù)碼傳送,波特率固定,為f晶振/12。01110位數(shù)碼傳送,波特率可變。10211位數(shù)碼傳送,波特率固定,為f晶振/64或f晶振/32。11311位數(shù)碼傳送,波特率可變。SM2SM2──多機(jī)通信控制位:當(dāng)串行口以方式2或方式3接收時,如SM2=1,則只有當(dāng)接收到的第九位數(shù)據(jù)〔RB8為1,才將接收到的前8位數(shù)據(jù)送入接收SBUF,并使RI位置1,產(chǎn)生中斷請求信號;否則將接收到的前8位數(shù)據(jù)丟棄。而當(dāng)SM2=0時,則不論第九位數(shù)據(jù)為0還是為1,都將前8位數(shù)據(jù)裝入接收SBUF中,并產(chǎn)生中斷請求信號。對方式0,SM2必須為0,對方式1,當(dāng)SM2=1,只有接收到有效停止位后才使RI位置1。RENREN──允許接收位,用于對串行數(shù)據(jù)的接收進(jìn)行控制:REN=0,禁止接收;REN=1,允許接收。該位由軟件置1或清零。TB8TB8──發(fā)送數(shù)據(jù)位8:在方式2和方式3時,TB8是要發(fā)送的第9位數(shù)據(jù)。RB8RB8——接收數(shù)據(jù)位8:在方式2和方式3中,RB8位存放接收到的第9位數(shù)據(jù)TITI──發(fā)送中斷標(biāo)志:當(dāng)方式0時,發(fā)送完第8位數(shù)據(jù)后,該位由硬件置位。在其它方式下,于發(fā)送停止位之前由硬件置位。因此TI=1,表示幀發(fā)送結(jié)束。其狀態(tài)既可供軟件查詢使用,也可請求中斷。TI位由軟件清0。RIRI──接收中斷標(biāo)志:當(dāng)方式0時,接收完第8位數(shù)據(jù)后,該位由硬件置1。在其它方式下,當(dāng)接收到停止位時,該位由硬件置位。因此RI=1,表示幀接收結(jié)束。其狀態(tài)既可供軟件查詢使用,也可以請求中斷。RI位由軟件清0。另外,電源控制寄存器PCON中SMOD位可影響串行口的波特率。當(dāng)〔SMOD=1,串行口波特率加倍。還有中斷允許寄存器IE中的ES位可選擇串行口中斷允許或禁止。ES=0,禁止串行口中斷ES=1,允許串行口中斷第三節(jié)8051串行通信工作方式及應(yīng)用8051單片機(jī)的串行通信共有四種工作方式:串行工作方式0串行口為同步移位寄存器方式,波特率固定為f晶振/12。該方式主要用于I/O口擴(kuò)展等,方式0傳送數(shù)據(jù)時,串行數(shù)據(jù)由RXD〔P3.0端輸入或輸出,而TXD〔P3.1此時僅作為同步移位脈沖發(fā)生器發(fā)出移位脈沖。串行數(shù)據(jù)的發(fā)送和接收以8位為一幀,不設(shè)起始位和停止位,其格式如下:D0D1D2D3D4D5D6D7方式0輸出數(shù)據(jù)時,向SBUF寫入數(shù)據(jù)的指令:MOVSBUF,A或:MOVSBUF,XXH即為從RXD端輸出數(shù)據(jù)的發(fā)送啟動指令。當(dāng)8位數(shù)據(jù)全部移出后,SCON中的TI位被自動置1。方式0輸入數(shù)據(jù)時,使SCON中REN位置1指令:SETBREN即為從RXD端輸入數(shù)據(jù)啟動指令。當(dāng)接收到8位數(shù)據(jù)后SCON中的RI位被自動置1。方式0工作時往往需要外部有串入并出寄存器〔輸出和并入串出寄存器〔輸入配合使用,方式0多用于將串行口轉(zhuǎn)變?yōu)椴⑿锌诘氖褂脠龊?如圖8—4所示:圖8—4串行工作方式0與輸入,輸出電路的連接示例圖8—4〔a中CD4094是"串入并出"移位寄存器,TXD端輸出頻率為F晶振/12的固定方波信號〔移位脈沖,在該移位脈沖的作用下,D端串行輸入數(shù)據(jù)可依次存入CD4094內(nèi)部8D鎖存器鎖存。P1.0為選通信號,當(dāng)P1.0=STB為高電平時,將內(nèi)部8D鎖存器數(shù)據(jù)并行輸出。圖8—4〔b中CD4014為"串入/并出—串出"移位寄存器,P1—P8為并行輸入端,Q8為串行輸出端,當(dāng)P1.0=P/S=1,加在并行輸入端P1—P8上的數(shù)據(jù)在時鐘脈沖作用下從Q8端串行輸出。方式0的移位操作的波特率固定為單片機(jī)晶振頻率f晶振的十二分之一。即:波特率=f晶振/12。例如當(dāng)f晶振=12MHZ,波特率=106〔位/秒。例8—1試編寫從CD4094并行輸出數(shù)據(jù)36H的參考程序:解:參考程序如下:MOVSCON,#00H ;串行口工作方式0。CLRES;禁止串行口中斷。MOVA,#36H ;傳送數(shù)據(jù)送A。CLRP1.0 ;關(guān)閉并行輸出。MOVSBUF,A ;啟動串行輸出。HERE:CTI,FS ;等待串行輸出完畢。AJMPHERE FS:SETBP1.0;開啟并行輸出。RET;返回。2.串行工作方式1方式1傳送的數(shù)據(jù)格式方式1傳送一幀為10位的串行數(shù)據(jù),包括1位起始位,8位數(shù)據(jù)位和1位停止位。其幀格式為:起始D0D1D2D3D4D5D6D7停止〔2方式1的波特率的確定方式1的波特率是可變的,計(jì)算公式為:波特率=〔2smod/32×〔T1溢出率其中smod為PCON寄存器最高位的值。所謂定時器T1的溢出就是T1在單位時間內(nèi)溢出的次數(shù)。如設(shè)T1為工作方式2,那么T1定時時間:T1定時=〔28—X×T機(jī)=〔28—X×12/F晶振則T1的溢出率=1/T1定時=F晶振/〔12〔28—X由此可得波特率的計(jì)算公式為:波特率=〔2smod/32×F晶振/〔12〔28—X實(shí)際使用時總是先確定波特率,再計(jì)算定時器T1的記數(shù)初值X,然后進(jìn)行T1的初始化。根據(jù)上述波特率的計(jì)算公式,可得T1記數(shù)初值的計(jì)算公式為:X=256-〔F晶振×2smod/〔384×波特率定時器T1之所以選擇工作方式2,是因?yàn)榉绞?具有自動加載功能,可避免通過程序反復(fù)裝入計(jì)數(shù)初值而影響波特率的準(zhǔn)確性?!?方式1數(shù)據(jù)的發(fā)送和接收方式1的數(shù)據(jù)發(fā)送由一條寫入單片機(jī)發(fā)送寄存器SBUF指令啟動。8位數(shù)據(jù)在串行口由硬件自動加入起始位和停止位組成完整的幀格式。在內(nèi)部移位脈沖作用下,由TXD端串行輸出。發(fā)送完一幀數(shù)據(jù)后,使TXD輸出端維持"1"狀態(tài)并置使TI標(biāo)志位置1以通知CPU發(fā)送下一個字符。接收數(shù)據(jù)由接收單片機(jī)SCON中的REN置1開始,隨后串行口不斷采樣RXD端電平,當(dāng)采樣到RXD端電平從1向0跳變時,就認(rèn)定是接收信號并開始接收從RXD端輸入的數(shù)據(jù),并送入內(nèi)部接收寄存器SBUF中,直到停止位到來之后,并使RI位置1,通知CPU從SBUF中取走接收到的一幀字符。方式1傳送數(shù)據(jù)時發(fā)送前應(yīng)先清TI,接收前應(yīng)先清RI。例8—2甲,乙兩單片機(jī)擬以工作方式1進(jìn)行串行數(shù)據(jù)通信,波特率為1200,甲機(jī)發(fā)送,發(fā)送數(shù)據(jù)在甲機(jī)外部RAM1000H-101FH單元中。乙機(jī)接收,并把接收數(shù)據(jù)依次放入乙機(jī)外部RAM1000H-101FH單元中。甲,乙機(jī)晶振頻率均為6MHZ。連接方式如圖8—5所示:TXDRXD甲機(jī)乙機(jī)圖8—5例8—2示意圖解:設(shè)定:<1>甲、乙機(jī)定時用工作方式2,即初值66×106×1384×1200X=256-=243=F3H<2>SMOD=0,即波特率不倍增。<3>用查詢傳送方式。<4>SCON=01000000B=40H可得甲機(jī)發(fā)送主程序如下:ORG0030HMOVTMOD,#20H ;設(shè)定時器1工作方式2。MOVTL1,#0F3H ;設(shè)置定時器初值。MOVTH1,#0F3H ;設(shè)置重裝值。CLREA ;禁止中斷。MOVPCON,#00H ;<SMOD>=0。MOVSCON,#40H ;設(shè)串行工作方式1,禁止接收。MOVDPTR,#1000H ;建立發(fā)送數(shù)據(jù)地址指針初值。MOVR7,#20H ;建立計(jì)數(shù)指針。SETBTR1;啟動定時器1。SEND:MOVXA,DPTR ;取數(shù)據(jù)。MOVSBUF,A ;啟動數(shù)據(jù)傳送操作。JNBTI,$ ;等待一幀發(fā)送完畢。CLRTI;清TI標(biāo)志。INCDPTR;指向下一單元。DJNZR7,SEND ;數(shù)據(jù)塊傳送結(jié)束?沒結(jié)束繼續(xù)傳送。CLRTR1 ;傳送結(jié)束,停止定時器1工作。RET;返回。乙機(jī)接收參考程序如下:ORG0030HMOVTMOD,#20H;設(shè)定時器1工作方式2。MOVTL1,#0F3H ;設(shè)置定時器初值。MOVTH1,#0F3H ;設(shè)置重裝值。CLREA ;禁止中斷。MOVPCON,#00H;SMOD=0。MOVSCON,#40H;設(shè)串行工作方式1。MOVDPTR,#1000H;建立接收地址指針初值。MOVR7,#20H ;建立計(jì)數(shù)指針。SETBTR1 ;啟動定時器T1。SETBREN ;啟動接收數(shù)據(jù)操作。RECIV:JNBRI,$;等待數(shù)據(jù)接收完畢。CLRRI ;清RI標(biāo)志。MOVA,SBUF ;取數(shù)據(jù)。MOVXDPTR,A;送外部RAM。INCDPTR ;指向下一單元。DJNZR7,RECIV ;數(shù)據(jù)塊接收完畢?沒完繼續(xù)接收。CLRTR1 ;接收完畢,停止定時器1工作。RET ;返回。如改用中斷方式甲機(jī)發(fā)送參考程序如下:ORG0000HAJMPMAINORG0023HLJMPASEND;建立串行中斷口地址。ORG0030HMAIN:MOVSP,#30H ;設(shè)置堆棧。MOVTMOD,#20H ;設(shè)定時器1工作方式2。MOVTL1,#0F3H ;設(shè)置定時器初值。MOVTH1,#0F3H ;設(shè)置重裝值。MOVPCON,#00H ;SMOD=0。MOVSCON,#40H ;設(shè)串行工作方式1。MOVR7,#1FH ;建立計(jì)數(shù)指針。MOVDPTR,#1000H ;建立發(fā)送地址指針初值。SETBEA ;總中斷允許。SETBES ;串行中斷允許。SETBTR0 ;啟動定時器0。MOVXA,DPTR ;第一個數(shù)據(jù)送A。MOVSBUF,A ;啟動傳送數(shù)據(jù)操作。INCDPTR ;指向下一RAM單元。WAIT:AJMP$ ;等待中斷。中斷服務(wù)子程序:ORG0100HCLRTI;清TI。ASEND:MOVXA,DPTR ;取數(shù)據(jù)。MOVSBUF,A;傳送數(shù)據(jù)INCDPTR ;指向下一單元。DJNZR7,GOON ;傳送結(jié)束?沒結(jié)束繼續(xù)傳送。CLREA;傳送結(jié)束,關(guān)閉。CLRTR1GOON:RETI;返回。順便指出,甲機(jī)以中斷方式傳送數(shù)據(jù)時,計(jì)數(shù)指示為1FH而非20H,這是因?yàn)樵趩蛹讬C(jī)發(fā)送時已經(jīng)向SBUF發(fā)送了一個數(shù)據(jù)。至于乙機(jī),既可用上述查詢方式接收,也可用中斷方式接收。中斷方式程序設(shè)計(jì)思路與查詢方式類似,不再細(xì)述。在異步串行通訊中,接收機(jī)以波特率的3倍檢測RXD端信號,檢測到兩次以上相同信號即為有效信號。在實(shí)際應(yīng)用中,可根椐需要加入奇偶校驗(yàn)位一起傳送,以提高傳送的可靠性。例8—3甲,乙兩單片機(jī)同樣以工作方式1進(jìn)行串行數(shù)據(jù)通信,波特率為1200,甲機(jī)發(fā)送,發(fā)送數(shù)據(jù)在甲機(jī)外部RAM1000H-101FH單元中,在發(fā)送之前先將數(shù)據(jù)塊長度發(fā)送給乙機(jī),發(fā)送完后,向乙機(jī)發(fā)送一個累加校驗(yàn)和。乙機(jī)接收,乙機(jī)首先接收數(shù)據(jù)長度,然后接收數(shù)據(jù),并把接收數(shù)據(jù)依次放入乙機(jī)外部RAM1000H-101FH單元中,接收完畢后進(jìn)行一次累加和校驗(yàn),數(shù)據(jù)全部接收完畢時向甲機(jī)送出狀態(tài)字,表示傳送狀態(tài)。甲、乙機(jī)晶振頻率均為6MHZ。連接方式見圖8—6:甲乙TXDRXDRXDTXD圖8—6例8—3示意圖解:設(shè)定如下:〔1波特率約定為1200,以定時器T1為波特率發(fā)生器,T1用工作方式2〔SMOD=0,波特率不倍增。66×106×1384×1200則初值:X=256—=243=F3H〔2設(shè)置R5為累加和寄存器,R6為數(shù)據(jù)塊長度寄存器?!?用查詢傳送方式?!?串行口為工作方式1,允許接收,即;SCON=01010000B=50H可得甲機(jī)發(fā)送主程序如下:ORG0030HMOVTMOD,#20H ;設(shè)定時器1工作方式2。MOVTL1,#0F3H ;設(shè)置定時器初值。MOVTH1,#0F3H ;設(shè)置重裝值。SETBTR1;啟動定時器1。MOVPCON,#00H;〔SMOD=0。MOVSCON,#50H;設(shè)串行工作方式1,允許接收。AGAIN:MOVDPTR,#1000H;建立發(fā)送數(shù)據(jù)地址指針初值。MOVR6,#20H ;數(shù)據(jù)塊長度送R6。MOVR5,#00H;累加和寄存器清"0"。MOVSBUF,R6;先發(fā)送長度值。L1:CTI,L2;等待發(fā)送結(jié)束。AJMPL1L2:MOVXA,DPTR;取數(shù)據(jù)塊中數(shù)據(jù)。MOVSBUF,A;發(fā)送數(shù)據(jù)。ADDA,R5;發(fā)送數(shù)據(jù)累加。MOVR5,A;累加和送R5。INCDPTR;地址加1。L3:CTI,L4;等待一幀數(shù)據(jù)發(fā)送完畢。AJMPL3L4:DJNZR6,L2;判斷數(shù)據(jù)塊是否發(fā)送完,若未完繼續(xù)發(fā)送。MOVSBUF,R5;數(shù)據(jù)塊發(fā)送完畢,發(fā)累加和校驗(yàn)碼。L5:CTI,L6;等待發(fā)送累加和碼結(jié)束。AJMPL5L6:CRI,L7;接收從機(jī)發(fā)來的結(jié)果標(biāo)志碼。AJMPL6L7:MOVA,SBUFJZL8;若標(biāo)志碼為00H,表示接收正確,返回;反之重發(fā)。AJMPAGAIN;發(fā)送有錯,重發(fā)。L8:RET乙機(jī)接收參考程序如下:ORG0030HMOVTMOD,#20H;設(shè)定時器1工作方式2。MOVTL1,#0F3H ;設(shè)置定時器初值。MOVTH0,#0F3H ;設(shè)置重裝值。SETBTR1;啟動T1。MOVPCON,#00H ;SMOD=0。MOVSCON,#50H;設(shè)串行工作方式1,允許接收。AGAIN:MOVDPTR,#1000H ;建立接收地址指針初值L0:CRI,L1;接收發(fā)送長度值。AJMPL0L1:MOVA,SBUFMOVR6,A;取發(fā)送長度值送R6。MOVR5,#00H;累加和寄存器清"0"。WAIT:CRI,L2;接收數(shù)據(jù)。AJMPWAITL2:MOVA,SBUFMOVXDPTR,A;將所接收數(shù)據(jù)送數(shù)據(jù)區(qū)。INCDPTR;指向下一單元。ADDA,R5;累加。MOVR5,ADJNZR6,WAIT;若數(shù)據(jù)接收未完繼續(xù)。L3:CRI,L4;數(shù)據(jù)接收完畢,接收主機(jī)的累加校驗(yàn)碼。AJMPL3L4:MOVA,SBUF;取主機(jī)累加和校驗(yàn)碼。XRLA,R5;與本機(jī)累加和進(jìn)行校驗(yàn)。JZL7;若校驗(yàn)正確轉(zhuǎn)L7。MOVSBUF,#0FFH;校驗(yàn)出錯,回送校驗(yàn)出錯標(biāo)志碼FFH,表示要求主機(jī)重發(fā)。L5:CTI,L6;回送FFH。AJMPL5L6:AJMPAGAIN;重新接收L7:MOVSBUF,#00H;回送校驗(yàn)正確標(biāo)志碼00H。L8:CTI,L9;回送。AJMPL8L9:RET;接收完成,返回。3.串行工作方式2方式2是11位為一幀的串行通信方式,即1位始位,9位數(shù)據(jù)位和1位停止位。其中第9位數(shù)據(jù)既可作奇偶校驗(yàn)位,也可作控制位使用。其幀格式為:起始D0D1D2D3D4D5D6D7D8停止附加第9位〔D8由軟件置1或清零。方式2發(fā)送時單片機(jī)自動將SBUF中8位數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論