![單片機(jī)串行接口_第1頁](http://file4.renrendoc.com/view/8889c6a97e6eb9fb75b2bb329ae5c069/8889c6a97e6eb9fb75b2bb329ae5c0691.gif)
![單片機(jī)串行接口_第2頁](http://file4.renrendoc.com/view/8889c6a97e6eb9fb75b2bb329ae5c069/8889c6a97e6eb9fb75b2bb329ae5c0692.gif)
![單片機(jī)串行接口_第3頁](http://file4.renrendoc.com/view/8889c6a97e6eb9fb75b2bb329ae5c069/8889c6a97e6eb9fb75b2bb329ae5c0693.gif)
![單片機(jī)串行接口_第4頁](http://file4.renrendoc.com/view/8889c6a97e6eb9fb75b2bb329ae5c069/8889c6a97e6eb9fb75b2bb329ae5c0694.gif)
![單片機(jī)串行接口_第5頁](http://file4.renrendoc.com/view/8889c6a97e6eb9fb75b2bb329ae5c069/8889c6a97e6eb9fb75b2bb329ae5c0695.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)串行接口1第一頁,共八十二頁,2022年,8月28日MCU中常用的幾種串行接口標(biāo)準(zhǔn)串行接口:數(shù)據(jù)一位接一位順序傳送,可只用一根數(shù)據(jù)線傳送多位信息。UART:通用異步接收器/發(fā)送器I2C:二線,芯片有地址,有總線爭(zhēng)用機(jī)制2第二頁,共八十二頁,2022年,8月28日典型的I2C總線系統(tǒng)3第三頁,共八十二頁,2022年,8月28日用口線模擬串行總線4第四頁,共八十二頁,2022年,8月28日#include<reg51.h> //要用到sfr#defineucharunsignedcharsbitNCS=P1^0;sbitSCK=P1^1;sbitSI=P1^2;voidshiftbyte(ucharbyte);main(){uchardata*p=0x30;NCS=0;shiftbyte(0xa); //由圖中讀出第一字節(jié)為0xa0shiftbyte(0x23); //低8位地址shiftbyte(*p);NCS=1;while(1);}5第五頁,共八十二頁,2022年,8月28日voidshiftbyte(ucharbyte)//將1字節(jié)數(shù)據(jù)由并變串由口線移出{uchari;for(i=0;i<8;i++){NCK=0;SI=(bit)(byte&0x80);//強(qiáng)制將char轉(zhuǎn)換成bit類型并賦值給口線NCK=1;byte<<=1; //左移1位}}6第六頁,共八十二頁,2022年,8月28日UART原理收發(fā)雙方約定通信幀格式、波特率等,根據(jù)波特率各自維持位定時(shí),而幀的開始靠一位起始位確定。如波特率1000,每1ms移一位,收發(fā)速率不要求嚴(yán)格相等,只要在一幀的范圍內(nèi)沒有錯(cuò)開半位即可正確收發(fā)。7第七頁,共八十二頁,2022年,8月28日8第八頁,共八十二頁,2022年,8月28日全雙工和半雙工9第九頁,共八十二頁,2022年,8月28日回憶8051結(jié)構(gòu)特點(diǎn):由單一內(nèi)部總線連接各功能模塊,通過特殊功能寄存器(SFR)集中控制。嵌入式結(jié)構(gòu),不同型號(hào)引腳定義和SFR定義有所不同,因此,從兩個(gè)方面來認(rèn)識(shí)和掌握某一個(gè)功能模塊。 相關(guān)引腳功能 相關(guān)SFR功能10第十頁,共八十二頁,2022年,8月28日第十一頁,共八十二頁,2022年,8月28日串行口相關(guān)引腳12第十二頁,共八十二頁,2022年,8月28日串行口相關(guān)SFRSCON:串口控制寄存器SBUF:數(shù)據(jù)緩沖器PCON:電源控制,最高位為波特率倍增器13第十三頁,共八十二頁,2022年,8月28日串行接口內(nèi)部結(jié)構(gòu)示意圖第十四頁,共八十二頁,2022年,8月28日發(fā)送控制器、接收控制器、輸出門、輸入移位寄存器以及2個(gè)物理上互相獨(dú)立的接收/發(fā)送緩沖器(可同時(shí)發(fā)送和接收數(shù)據(jù))。
發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入。兩個(gè)緩沖器可共用一個(gè)地址99H,不可按位尋址。 SBUF=0x55; //寫發(fā)送緩沖器 rbyte=SBUF; //讀接收緩沖器串行口的構(gòu)成及SBUF15第十五頁,共八十二頁,2022年,8月28日SM0SM1:串行口操作模式選擇位。可以確定串行口的四種模式之一(如下表):串行口控制寄存器SCON,地址:98H,可以按位尋址16第十六頁,共八十二頁,2022年,8月28日
RI:串行口完成一幀接收時(shí)置位(此時(shí)可以讀取收到的1個(gè)字節(jié)),申請(qǐng)中斷,CPU響應(yīng)中斷后應(yīng)由軟件清零;
TI:串行口完成一幀發(fā)送時(shí)置位(此時(shí)可以發(fā)下一個(gè)字節(jié)),申請(qǐng)中斷,CPU響應(yīng)中斷后應(yīng)由軟件清零;
RB8:在9位數(shù)據(jù)傳送的模式2、3時(shí),是接收到的第9位數(shù)據(jù);
TB8:在9位數(shù)據(jù)傳送的模式2、3時(shí),是將要發(fā)送的第9位數(shù)據(jù);REN:允許接收位,REN=1時(shí)允許接收;
SM2:多機(jī)通信控制位。串行口控制寄存器SCON,地址:98H,可以按位尋址SM0SM1SM2RENTB8RB8TIRI17第十七頁,共八十二頁,2022年,8月28日
SMOD:波特率倍增器,1:加倍,0:不加倍;
IDL:置1進(jìn)入省電的待機(jī)狀態(tài)(Idle);
PD:置1進(jìn)入更省電的掉電狀態(tài)(PowerDown);GF0,GF1:通用標(biāo)志,一般配合進(jìn)出低功耗狀態(tài)使用。電源控制寄存器PCON,地址:87H,不可按位尋址18第十八頁,共八十二頁,2022年,8月28日第一節(jié)概述
第三節(jié)模式1及其應(yīng)用第四節(jié)模式2、3及其應(yīng)用第二節(jié)模式0及其應(yīng)用19第十九頁,共八十二頁,2022年,8月28日串行口的模式0特點(diǎn):串行口做同步移位寄存器用,在這種模式下:RXD(P3.0)作為數(shù)據(jù)線,低位在前;TXD(P3.1)作為移位脈沖輸出端,每個(gè)機(jī)器周期移位一次,速率為Fosc/12。模式0的主要功能是:可以使用一個(gè)串行口來擴(kuò)展出8位、16位等并行口,且理論上可以擴(kuò)展n*8位的并行口。相當(dāng)于串并、并串轉(zhuǎn)換。20第二十頁,共八十二頁,2022年,8月28日21第二十一頁,共八十二頁,2022年,8月28日模式0輸出時(shí)序圖22第二十二頁,共八十二頁,2022年,8月28日模式0輸入時(shí)序圖輸入過程也是有8051主動(dòng)發(fā)起的,并送出時(shí)鐘。這一點(diǎn)與模式1、2、3的情況不同,它們的輸入是被動(dòng)的,由RXD引腳上的負(fù)跳變啟動(dòng)。23第二十三頁,共八十二頁,2022年,8月28日例1擴(kuò)展1個(gè)16位并行輸出口,并將16進(jìn)制數(shù)1234H由擴(kuò)展口輸出。24第二十四頁,共八十二頁,2022年,8月28日#include<reg51.h> sbitSTB=P1^0;voidout16(unsignedintdat16){STB=0; /*4094進(jìn)入串行移位狀態(tài)*/SBUF=dat16&0xff;while(!TI);TI=0;/*先送低8位,等移完*/SBUF=dat16>>8;while(!TI);TI=0;/*再送高8位,等移完*/STB=1; /*同時(shí)并行輸出*/}main(){SCON=0x0; /*串口模式0:移位寄存器方式*/out16(0x1234); /*由擴(kuò)展口送出0x1234*/while(1); /*main循環(huán)結(jié)束*/}編程實(shí)現(xiàn)25第二十五頁,共八十二頁,2022年,8月28日例2擴(kuò)展1個(gè)16位并行輸入口,把由擴(kuò)展口讀入的16位數(shù)存入一個(gè)整型變量中。26第二十六頁,共八十二頁,2022年,8月28日#include<reg51.h> sbitP_S=P1^0;unsignedintin16(void);/*聲明函數(shù)*/main(){unsignedintdat16;SCON=0x0;REN=1; /*串口模式0,允許接收*/dat16=in16(); /*由擴(kuò)展口讀入的數(shù)存入變量中*/while(1); /*main循環(huán)結(jié)束*/}編程實(shí)現(xiàn)27第二十七頁,共八十二頁,2022年,8月28日unsignedintin16(void){unsignedinttmp;P_S=1;P_S=0; /*4014并行輸入后立即進(jìn)入串行移位狀態(tài)*/while(!RI);RI=0; /*查詢等高8位移完*/tmp=SBUF;tmp<<=8;/*讀入后送到臨時(shí)變量的高8位*/while(!RI);RI=0; /*查詢等低8位移完*/tmp+=SBUF; /*合成16位數(shù)*/return(tmp); /*返回得到的16位數(shù)*/}編程實(shí)現(xiàn)(續(xù))28第二十八頁,共八十二頁,2022年,8月28日第一節(jié)概述第二節(jié)模式0及其應(yīng)用
第四節(jié)模式2、3及其應(yīng)用第三節(jié)模式1及其應(yīng)用29第二十九頁,共八十二頁,2022年,8月28日特點(diǎn):10位傳輸格式(1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)停止位);波特率:可變波特率,由定時(shí)器T1的溢出率來確定,所以在此種模式下,首先要對(duì)T1進(jìn)行初始化以確定串行口的波特率。30第三十頁,共八十二頁,2022年,8月28日模式1幀格式31第三十一頁,共八十二頁,2022年,8月28日模式1原理示意圖(發(fā)送部分)第三十二頁,共八十二頁,2022年,8月28日由寫SBUF啟動(dòng),在8位數(shù)據(jù)后加上一個(gè)停止位。 開始發(fā)送,但DATA無效,送出一個(gè)起始位當(dāng)零檢測(cè)器全0,再作最后一次移位,并置TI發(fā)送過程33第三十三頁,共八十二頁,2022年,8月28日發(fā)送時(shí)序34第三十四頁,共八十二頁,2022年,8月28日再做最后一次移位同時(shí)TI置1,發(fā)送1幀完成。零檢測(cè)器變化過程35第三十五頁,共八十二頁,2022年,8月28日模式1原理示意圖(接收部分)第三十六頁,共八十二頁,2022年,8月28日在REN=1的條件下進(jìn)行。串行口的接收控制器對(duì)RXD線進(jìn)行采樣,其采樣頻率是接收波特率的16倍。當(dāng)檢測(cè)到RXD上有負(fù)跳變后,復(fù)位16分頻計(jì)數(shù)器,當(dāng)計(jì)數(shù)器計(jì)到第7、8、9時(shí),分別對(duì)RXD進(jìn)行采樣,若有2個(gè)以上的0,則認(rèn)為檢測(cè)到起始位并開始接收過程,此后每一位的判決都按照這種“3取2”的原則進(jìn)行。裝載接收移位寄存器的數(shù)據(jù)進(jìn)入SBUF中就完成了一幀的接收過程,但必須滿足兩個(gè)條件,否則數(shù)據(jù)丟失:RI=0,表示前面接收的數(shù)據(jù)已經(jīng)被取走。SM2=0或第9位為1。(對(duì)于模式1,第9位是停止位)接收過程37第三十七頁,共八十二頁,2022年,8月28日接收時(shí)序38第三十八頁,共八十二頁,2022年,8月28日移位寄存器變化過程再作最后一次移位,并裝入SBUF,同時(shí)置位RI,接收1幀完成。39第三十九頁,共八十二頁,2022年,8月28日波特率(BaudRate)計(jì)算
(適用于模式1、3)在串行口的異步通訊中,發(fā)送方與接收方是兩個(gè)互相獨(dú)立的系統(tǒng),它們的系統(tǒng)時(shí)鐘可以各不相同。在這種條件下使通訊正確的條件是:1,要有相同的幀格式;2,要有相同或相近的波特率(<4%)。模式1、3的波特率是由定時(shí)器T1的溢出率來決定的(另外PCON中的SMOD位起著波特率加倍的作用)。在編制串行口通訊(模式1、3)程序時(shí),須對(duì)T1進(jìn)行初始化。40第四十頁,共八十二頁,2022年,8月28日波特率(BaudRate)計(jì)算
(適用于模式1、3)T1初始化的主要任務(wù)就是:設(shè)置T1工作在模式2,定時(shí)。8位自重裝定時(shí)器。根據(jù)晶振頻率和需要的波特率,計(jì)算重裝載值,分別送給TH1、TL1。波特率計(jì)算公式:BR=T1溢出率=(計(jì)數(shù)速率)/[256-(TH1)]=(Fosc/12)/[256-(TH1)]41第四十一頁,共八十二頁,2022年,8月28日BR=32*12*[256–(TH1)]2SMOD*Fosc因此得到更多情況下,已知Fosc和BR,要計(jì)算TH1的重裝載值(TH1)=256-32*12*BR2SMOD*Fosc42第四十二頁,共八十二頁,2022年,8月28日【舉例】設(shè)系統(tǒng)時(shí)鐘為11.0592MHz,要求波特率為1200,求TH1的重裝載值?!窘狻窟xSMOD=0,用上述公式(TH1)=256-32*12*120011059200=232=0E8H因此得到TH1的重裝載值為0E8H。
43第四十三頁,共八十二頁,2022年,8月28日注意如果晶體頻率是其它值,得到的裝載值4舍5入,與標(biāo)準(zhǔn)波特率有一定誤差,但一般只要誤差不大仍能夠正常通信?!九e例】設(shè)系統(tǒng)時(shí)鐘為12MHz,要求波特率為1200,求TH1的重裝載值?!窘狻窟xSMOD=0,用上述公式(TH1)=256-32*12*120012000000=229.95=230=0E6H因此得到TH1的重裝載值為0E6H,實(shí)際波特率為:計(jì)算波特率的例子BR=32*12*[256–230]12000000=1201.944第四十四頁,共八十二頁,2022年,8月28日常用波特率與晶體和T1設(shè)置對(duì)照表45第四十五頁,共八十二頁,2022年,8月28日例1發(fā)送字符串“HelloWorld!\n”至串口,要求波特率為1200,采用串口模式1,最高位約定做奇校驗(yàn)位,已知Fosc=11.0592MHz。46第四十六頁,共八十二頁,2022年,8月28日分析:奇偶校驗(yàn)由于傳輸?shù)氖茿SCII字符(0-7FH),只需要7位,對(duì)于模式1有8個(gè)數(shù)據(jù)位,將最高位做奇校驗(yàn)位,保證形成的8位中1的個(gè)數(shù)始終是奇數(shù)個(gè);接收方收到每一個(gè)字節(jié)后進(jìn)行奇偶判斷,若為奇則認(rèn)為無誤,若為偶則表示出錯(cuò),這種方法可以檢測(cè)出奇數(shù)個(gè)誤碼。例如,若要發(fā)送0x00,加奇校驗(yàn)位后變成0x80;若要發(fā)送0x01,加奇校驗(yàn)位后仍為0x01。接收方判斷無錯(cuò)后去掉最高位,還原需要的數(shù)據(jù)。47第四十七頁,共八十二頁,2022年,8月28日回憶PSW:程序狀態(tài)字,存放指令執(zhí)行后的有關(guān)狀態(tài)P:(PSW.0)奇偶標(biāo)志位,用來標(biāo)志累加器ACC中1的個(gè)數(shù),可以用在串行通信中作奇偶校驗(yàn)判斷。當(dāng)P=1時(shí),表明A中1的個(gè)數(shù)為奇數(shù)個(gè),反之為偶數(shù)個(gè)。
ACC=0x0; /*P=0*/ ACC=0x80; /*P=1*/48第四十八頁,共八十二頁,2022年,8月28日分析:波特率要求波特率為1200,采用串口模式1,已知Fosc=11.0592MHz。由上述條件計(jì)算或查表得到T1的重裝載值為0E8H49第四十九頁,共八十二頁,2022年,8月28日#include<reg51.h> sbitparity=ACC^7; /*定義ACC.7作奇校驗(yàn)位*/unsignedchartx_string[14]=“HelloWorld!\n”;/*定義待發(fā)送字符串,也可以加code存儲(chǔ)類型,如:unsignedcharcodetx_string[14]=“HelloWorld!\n”*/編程實(shí)現(xiàn)50第五十頁,共八十二頁,2022年,8月28日main(){unsignedchari; /*定義1個(gè)循環(huán)變量*//*首先定義T1模式2作波特率發(fā)生器,波特率為1200并啟動(dòng)運(yùn)行*/TMOD=0x20;TH1=0xE8;TL1=0xE8;TR1=1;SCON=0x40; /*串口模式1,未允許接收*/for(i=0;i<14;i++) /*循環(huán)發(fā)送14個(gè)字符*/{ACC=tx_string[i]; /*取一個(gè)字符*/parity=P; /*獲取當(dāng)前的奇偶特性*/parity=!parity; /*一律改成奇校驗(yàn),此時(shí)P=1*/SBUF=ACC; /*開始發(fā)送*/while(!TI);TI=0; /*等這1個(gè)字節(jié)發(fā)完才能發(fā)下1字節(jié)*/}//endofforwhile(1); /*循環(huán)結(jié)束*/}//endofmain
編程實(shí)現(xiàn)(續(xù))51第五十一頁,共八十二頁,2022年,8月28日例2串口不斷接收發(fā)來的字符串,已知字符串長度為14字節(jié),若14字節(jié)均無錯(cuò)則使接在P1.0引腳上的綠色LED閃爍3次后點(diǎn)亮,若有錯(cuò)則使接在P1.1引腳上的紅色LED閃爍3次后點(diǎn)亮,要求波特率為1200,采用串口模式1,最高位約定做奇校驗(yàn)位,已知Fosc=11.0592MHz。52第五十二頁,共八十二頁,2022年,8月28日用2個(gè)LED表示狀態(tài)53第五十三頁,共八十二頁,2022年,8月28日#include<reg51.h> sbitRED_LED=P1^1; /*紅燈*/sbitGREEN_LED=P1^0; /*綠燈*/unsignedcharrx_string[14];/*接收緩沖區(qū)*/bitreceive_string(void); /*聲明接收14字節(jié)字符串函數(shù)*/flash_RED_LED_3(); /*聲明紅燈閃爍3次函數(shù)*/flash_GREEN_LED_3(); /*聲明綠燈閃爍3次函數(shù)*/編程實(shí)現(xiàn)54第五十四頁,共八十二頁,2022年,8月28日main(){/*首先定義T1模式2作波特率發(fā)生器,波特率為1200并啟動(dòng)運(yùn)行*/TMOD=0x21;TH1=0xE8;TL1=0xE8;TR1=1;SCON=0x50; /*串口模式1,允許接收*/for(;;){if(receive_string()) //函數(shù)返回bit{GREEN_LED=1; //有錯(cuò)綠燈滅flash_RED_LED_3(); //紅燈閃爍3次RED_LED=0;} //以后一直亮else{RED_LED=1;flash_GREEN_LED_3();GREEN_LED=0;}}//endoffor(;;)}//endofmain編程實(shí)現(xiàn)55第五十五頁,共八十二頁,2022年,8月28日bitreceive_string(void){biterror_bit=0; //1:有錯(cuò),0:沒錯(cuò)unsignedchari;for(i=0;i<14;i++) {while(RI==0);RI=0; //查詢接收,等收到1字節(jié)ACC=SBUF; //讀入ACC便于判斷Pif(!P)error_bit=1; //偶校驗(yàn)錯(cuò),置標(biāo)志后繼續(xù)else{ACC&=0x7F; //未出錯(cuò)則去掉校驗(yàn)位 rx_string[i]=ACC;}//存入緩沖區(qū)} returnerror_bit; //返回出錯(cuò)標(biāo)志}編程實(shí)現(xiàn)(續(xù)1)56第五十六頁,共八十二頁,2022年,8月28日flash_RED_LED_3() /*紅燈閃爍3次函數(shù)*/{unsignedchari,j; /*定義循環(huán)變量*/
TMOD=0x21;TR0=1; /*T0模式1,運(yùn)行*/for(i=0;i<6;i++) /*閃爍3次*/{for(j=0;j<5;j++) /*5*50ms=0.25s*/{TH0=0x3C;TL0=0xB0;while(!TF0);TF0=0;}RED_LED=!RED_LED; /*每隔0.25秒亮暗交替變化*/}TR0=0; /*關(guān)掉定時(shí)器*/}
編程實(shí)現(xiàn)(續(xù)2)57第五十七頁,共八十二頁,2022年,8月28日flash_GREEN_LED_3() /*綠燈閃爍3次函數(shù)*/{unsignedchari,j; /*定義循環(huán)變量*/
TMOD=0x21;TR0=1; /*T0模式1,運(yùn)行*/for(i=0;i<6;i++) /*閃爍3次*/{for(j=0;j<5;j++) /*5*50ms=0.25s*/{TH0=0x3C;TL0=0xB0;while(!TF0);TF0=0;}GREEN_LED=!GREEN_LED;/*每隔0.25秒亮暗交替變化*/}TR0=0; /*關(guān)掉定時(shí)器*/}
編程實(shí)現(xiàn)(續(xù)3)58第五十八頁,共八十二頁,2022年,8月28日例3設(shè)串口每次收到上位機(jī)傳來的命令55H,便將內(nèi)部RAM中30H至3FH的數(shù)據(jù)發(fā)送出去,若不是55H便不做任何響應(yīng)。要求波特率為19200,不用校驗(yàn),已知Fosc=11.0592MHz。59第五十九頁,共八十二頁,2022年,8月28日分析這是典型的受上位機(jī)控制的通信過程。下位機(jī)平時(shí)可以一直查詢等上位機(jī)命令;也可以用中斷方式響應(yīng),提高效率,采取“中斷進(jìn)入,查詢收發(fā)”的策略,沒有通信命令的時(shí)候不予理會(huì),有通信需要的時(shí)候集中處理,而不是每個(gè)字節(jié)都采用中斷方式。60第六十頁,共八十二頁,2022年,8月28日#include<reg51.h> main(){unsignedchardata*p,i;TMOD=0x20;TH1=0xFD;TL1=0xFD;PCON=0x80;TR1=1;//T1模式2作波特率發(fā)生器,SMOD=1,波特率為19200并啟動(dòng)運(yùn)行SCON=0x50; /*串口模式1,允許接收*/for(;;){while(!RI);RI=0;
if(SBUF!=0x55)continue;p=0x30;for(i=0;i<16;i++) //查詢發(fā)送30H開始的16字節(jié)
{SBUF=*p++;while(!TI);TI=0;}}}編程實(shí)現(xiàn)(查詢方式)61第六十一頁,共八十二頁,2022年,8月28日#include<reg51.h> main(){unsignedchardata*p,i;TMOD=0x20;TH1=0xFD;TL1=0xFD;PCON=0x80;TR1=1;//T1模式2作波特率發(fā)生器,SMOD=1,波特率為19200并啟動(dòng)運(yùn)行SCON=0x50; /*串口模式1,允許接收*/ES=1;EA=1; /*允許串口中斷*/for(;;); /*循環(huán)結(jié)束,等中斷*/}編程實(shí)現(xiàn)(中斷進(jìn)入、查詢收發(fā))62第六十二頁,共八十二頁,2022年,8月28日voidserial(void)interrupt4{unsignedchardata*p,i;if(TI){TI=0;return;} //一般要判斷是TI或RI為1,此時(shí)多余RI=0;if(SBUF!=0x55)return;//不是55H返回p=0x30;for(i=0;i<16;i++) //查詢發(fā)送30H開始的16字節(jié){SBUF=*p++;while(!TI);TI=0;}}}編程實(shí)現(xiàn)(中斷進(jìn)入、查詢收發(fā))續(xù)63第六十三頁,共八十二頁,2022年,8月28日第一節(jié)概述第二節(jié)模式0及其應(yīng)用第三節(jié)模式1及其應(yīng)用
第四節(jié)模式2、3及其應(yīng)用64第六十四頁,共八十二頁,2022年,8月28日特點(diǎn):模式2和3都是11位傳輸格式(1個(gè)起始位+9個(gè)數(shù)據(jù)位+1個(gè)停止位),兩種模式唯一不同之處是波特率;模式2:固定為Fosc/64或Fosc/32(由PCON中的 SMOD位來決定)。SMOD=1,Fosc/32; SMOD=0,Fosc/64.模式3:與模式1一樣由定時(shí)器T1的溢出率來確定。使用模式2不需要用定時(shí)器作為波特率發(fā)生器,節(jié)省一個(gè)定時(shí)器;但是波特率固定,且比較高,如果滿足通信需求就可以選擇這種模式。當(dāng)Fosc=12MHz時(shí),波特率分別是375000和187500。第9數(shù)據(jù)位(TB8/RB8)可以作為奇偶校驗(yàn)位,也可以用于多機(jī)通信控制,若不用校驗(yàn),更多時(shí)候用模式1。模式2、3特點(diǎn)65第六十五頁,共八十二頁,2022年,8月28日模式2、3幀格式66第六十六頁,共八十二頁,2022年,8月28日發(fā)送時(shí):將SCON中的TB8作為第9位數(shù)據(jù)發(fā)送,TB8可編程為0或1;發(fā)送SBUF+TB8構(gòu)成9位數(shù)據(jù),接收時(shí):將接收來的第9位送到SCON中的RB8中:接收SBUF+TB8構(gòu)成9位數(shù)據(jù)。TB8和RB867第六十七頁,共八十二頁,2022年,8月28日模式2、3的發(fā)送過程與模式1類似,主要的區(qū)別在于幀中數(shù)據(jù)是9位。這樣,在發(fā)送一幀時(shí),CPU除了要把8位數(shù)據(jù)送SBUF外,還要把第9位數(shù)據(jù)送到TB8中,但注意要先設(shè)定好TB8,然后再向SBUF送數(shù),因?yàn)橐粚慡BUF就開始發(fā)送。停止位單獨(dú)生成,加在TB8之后。模式2、3的接收過程與模式1完全相同,只不過模式1時(shí),SCON中的RB8是接收到的停止位(“1”);而模式2、3時(shí),RB8是接收到的第9位(發(fā)送方的TB8)。發(fā)送和接收過程68第六十八頁,共八十二頁,2022年,8月28日例4設(shè)串口每隔1秒鐘便將片內(nèi)RAM中50H至5FH中的數(shù)據(jù)串行發(fā)送,串行口設(shè)定為模式2,TB8作偶校驗(yàn)位,已知Fosc=12MHz。69第六十九頁,共八十二頁,2022年,8月28日分析將要發(fā)送的8位數(shù)據(jù)送入ACC;由奇偶標(biāo)志P即可判斷這8位中1的個(gè)數(shù):P=1奇;P=0偶。如果讓TB8=P,則9位數(shù)據(jù)中1的個(gè)數(shù)總是偶數(shù)個(gè),這樣就實(shí)現(xiàn)了偶校驗(yàn)。TB8作偶校驗(yàn)位:
TB8作偶校驗(yàn)位:串行口設(shè)定為模式2,無需用T1作波特率發(fā)生器;70第七十頁,共八十二頁,2022年,8月28日分析1s=50ms*20T0模式1,重裝載值TC=65536–50ms/1us=15536=3CB0H71第七十一頁,共八十二頁,2022年,8月28日#include<reg51.h> voidsend16(void){unsignedchardata*p,i; /*定義指針及循環(huán)變量*/p=0x50; /*指向內(nèi)部RAM50H單元*/for(i=0;i<16;i++) /*循環(huán)發(fā)送16個(gè)字節(jié)*/{ACC=*p++; /*取一個(gè)字節(jié)*/TB8=P; /*加偶校驗(yàn)*/SBUF=ACC; /*開始發(fā)送*/while(!TI);TI=0; /*等這1個(gè)字節(jié)發(fā)完才能發(fā)下1字節(jié)*/}}編程實(shí)現(xiàn)72第七十二頁,共八十二頁,2022年,8月28日main(){SCON=0x80; /*串口模式2,未允許接收*/PCON=0x80; /*波特率為Fosc/32*/TMOD=1;TR1=1; /*T0模式1定時(shí)*/while(1){for(i=0;i<20;i++) {TH0=0x3C;TL0=0xB0;while(!TF0);TF0=0;}/*等1秒鐘*/send16(); /*調(diào)用發(fā)送16字節(jié)函數(shù)*/} }//endofmain
編程實(shí)現(xiàn)(續(xù))73第七十三頁,共八十二頁,2022年,8月28日例5接收上例中的數(shù)據(jù),存入一個(gè)接收緩沖區(qū),并進(jìn)行出錯(cuò)判斷。74第七十四頁,共八十二頁,2022年,8月28日#include<reg51.h> unsignedcharrx_string[16];/*接收緩沖區(qū)*/bitreceive_string(void); /*聲明接收16字節(jié)字節(jié)函數(shù)*/編程實(shí)現(xiàn)75第七十五頁,共八十二頁,2022年,8月28日#include<reg51.h> unsignedcharrx_string[16];/*接收緩沖區(qū)*/bitreceive_string(void); /*聲明接收16字節(jié)字節(jié)函數(shù)*/main(){SCON=0x90; /*串口模式2,允許接收*/PCON=0x80; /*BR=Fosc/32*/for(;;){if(receive16())error(); //返回1,錯(cuò),函數(shù)省略else right(); //返回0,對(duì),函數(shù)省略}}編程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年水泥行業(yè)節(jié)能減排技術(shù)服務(wù)合同
- 2025年度車輛租賃與押金管理協(xié)議
- 2025年度全國連鎖健身房品牌合作合同
- 2025年水稻剝殼大米行業(yè)深度研究分析報(bào)告
- 2025年度企業(yè)內(nèi)部審計(jì)簡(jiǎn)單勞務(wù)合同書范本
- 2025年度建筑工程施工臨時(shí)用電合同-@-4
- 2020-2025年中國宮腔鏡行業(yè)市場(chǎng)前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年度回遷安置房代建工程合同保密與知識(shí)產(chǎn)權(quán)保護(hù)協(xié)議
- 2025年度大型會(huì)展活動(dòng)物資采購合同范本
- 2025年度智能倉儲(chǔ)機(jī)電設(shè)施建設(shè)合同
- 詩詞寫作入門課件
- 2023年上海青浦區(qū)區(qū)管企業(yè)統(tǒng)一招考聘用筆試題庫含答案解析
- 2023版押品考試題庫必考點(diǎn)含答案
- 植物之歌觀后感
- 空氣能熱泵安裝示意圖
- 建筑工程施工質(zhì)量驗(yàn)收規(guī)范檢驗(yàn)批填寫全套表格示范填寫與說明
- 2020年中秋國慶假日文化旅游市場(chǎng)安全生產(chǎn)檢查表
- 昆明天大礦業(yè)有限公司尋甸縣金源磷礦老廠箐-小凹子礦段(擬設(shè))采礦權(quán)出讓收益評(píng)估報(bào)告
- 心有榜樣行有力量 -從冬奧冠軍徐夢(mèng)桃身上感受青春奮斗初中主題班會(huì)
- 七年級(jí)英語下冊(cè)閱讀理解10篇
- 設(shè)計(jì)質(zhì)量、進(jìn)度保證措施
評(píng)論
0/150
提交評(píng)論