單片機串行接口_第1頁
單片機串行接口_第2頁
單片機串行接口_第3頁
單片機串行接口_第4頁
單片機串行接口_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機串行接口1第一頁,共八十二頁,2022年,8月28日MCU中常用的幾種串行接口標(biāo)準(zhǔn)串行接口:數(shù)據(jù)一位接一位順序傳送,可只用一根數(shù)據(jù)線傳送多位信息。UART:通用異步接收器/發(fā)送器I2C:二線,芯片有地址,有總線爭用機制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);//強制將char轉(zhuǎn)換成bit類型并賦值給口線NCK=1;byte<<=1; //左移1位}}6第六頁,共八十二頁,2022年,8月28日UART原理收發(fā)雙方約定通信幀格式、波特率等,根據(jù)波特率各自維持位定時,而幀的開始靠一位起始位確定。如波特率1000,每1ms移一位,收發(fā)速率不要求嚴(yán)格相等,只要在一幀的范圍內(nèi)沒有錯開半位即可正確收發(fā)。7第七頁,共八十二頁,2022年,8月28日8第八頁,共八十二頁,2022年,8月28日全雙工和半雙工9第九頁,共八十二頁,2022年,8月28日回憶8051結(jié)構(gòu)特點:由單一內(nèi)部總線連接各功能模塊,通過特殊功能寄存器(SFR)集中控制。嵌入式結(jié)構(gòu),不同型號引腳定義和SFR定義有所不同,因此,從兩個方面來認(rèn)識和掌握某一個功能模塊。 相關(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個物理上互相獨立的接收/發(fā)送緩沖器(可同時發(fā)送和接收數(shù)據(jù))。

發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入。兩個緩沖器可共用一個地址99H,不可按位尋址。 SBUF=0x55; //寫發(fā)送緩沖器 rbyte=SBUF; //讀接收緩沖器串行口的構(gòu)成及SBUF15第十五頁,共八十二頁,2022年,8月28日SM0SM1:串行口操作模式選擇位??梢源_定串行口的四種模式之一(如下表):串行口控制寄存器SCON,地址:98H,可以按位尋址16第十六頁,共八十二頁,2022年,8月28日

RI:串行口完成一幀接收時置位(此時可以讀取收到的1個字節(jié)),申請中斷,CPU響應(yīng)中斷后應(yīng)由軟件清零;

TI:串行口完成一幀發(fā)送時置位(此時可以發(fā)下一個字節(jié)),申請中斷,CPU響應(yīng)中斷后應(yīng)由軟件清零;

RB8:在9位數(shù)據(jù)傳送的模式2、3時,是接收到的第9位數(shù)據(jù);

TB8:在9位數(shù)據(jù)傳送的模式2、3時,是將要發(fā)送的第9位數(shù)據(jù);REN:允許接收位,REN=1時允許接收;

SM2:多機通信控制位。串行口控制寄存器SCON,地址:98H,可以按位尋址SM0SM1SM2RENTB8RB8TIRI17第十七頁,共八十二頁,2022年,8月28日

SMOD:波特率倍增器,1:加倍,0:不加倍;

IDL:置1進(jìn)入省電的待機狀態(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特點:串行口做同步移位寄存器用,在這種模式下:RXD(P3.0)作為數(shù)據(jù)線,低位在前;TXD(P3.1)作為移位脈沖輸出端,每個機器周期移位一次,速率為Fosc/12。模式0的主要功能是:可以使用一個串行口來擴展出8位、16位等并行口,且理論上可以擴展n*8位的并行口。相當(dāng)于串并、并串轉(zhuǎn)換。20第二十頁,共八十二頁,2022年,8月28日21第二十一頁,共八十二頁,2022年,8月28日模式0輸出時序圖22第二十二頁,共八十二頁,2022年,8月28日模式0輸入時序圖輸入過程也是有8051主動發(fā)起的,并送出時鐘。這一點與模式1、2、3的情況不同,它們的輸入是被動的,由RXD引腳上的負(fù)跳變啟動。23第二十三頁,共八十二頁,2022年,8月28日例1擴展1個16位并行輸出口,并將16進(jìn)制數(shù)1234H由擴展口輸出。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; /*同時并行輸出*/}main(){SCON=0x0; /*串口模式0:移位寄存器方式*/out16(0x1234); /*由擴展口送出0x1234*/while(1); /*main循環(huán)結(jié)束*/}編程實現(xiàn)25第二十五頁,共八十二頁,2022年,8月28日例2擴展1個16位并行輸入口,把由擴展口讀入的16位數(shù)存入一個整型變量中。26第二十六頁,共八十二頁,2022年,8月28日#include<reg51.h> sbitP_S=P1^0;unsignedintin16(void);/*聲明函數(shù)*/main(){unsignedintdat16;SCON=0x0;REN=1; /*串口模式0,允許接收*/dat16=in16(); /*由擴展口讀入的數(shù)存入變量中*/while(1); /*main循環(huán)結(jié)束*/}編程實現(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;/*讀入后送到臨時變量的高8位*/while(!RI);RI=0; /*查詢等低8位移完*/tmp+=SBUF; /*合成16位數(shù)*/return(tmp); /*返回得到的16位數(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日特點:10位傳輸格式(1個起始位+8個數(shù)據(jù)位+1個停止位);波特率:可變波特率,由定時器T1的溢出率來確定,所以在此種模式下,首先要對T1進(jìn)行初始化以確定串行口的波特率。30第三十頁,共八十二頁,2022年,8月28日模式1幀格式31第三十一頁,共八十二頁,2022年,8月28日模式1原理示意圖(發(fā)送部分)第三十二頁,共八十二頁,2022年,8月28日由寫SBUF啟動,在8位數(shù)據(jù)后加上一個停止位。 開始發(fā)送,但DATA無效,送出一個起始位當(dāng)零檢測器全0,再作最后一次移位,并置TI發(fā)送過程33第三十三頁,共八十二頁,2022年,8月28日發(fā)送時序34第三十四頁,共八十二頁,2022年,8月28日再做最后一次移位同時TI置1,發(fā)送1幀完成。零檢測器變化過程35第三十五頁,共八十二頁,2022年,8月28日模式1原理示意圖(接收部分)第三十六頁,共八十二頁,2022年,8月28日在REN=1的條件下進(jìn)行。串行口的接收控制器對RXD線進(jìn)行采樣,其采樣頻率是接收波特率的16倍。當(dāng)檢測到RXD上有負(fù)跳變后,復(fù)位16分頻計數(shù)器,當(dāng)計數(shù)器計到第7、8、9時,分別對RXD進(jìn)行采樣,若有2個以上的0,則認(rèn)為檢測到起始位并開始接收過程,此后每一位的判決都按照這種“3取2”的原則進(jìn)行。裝載接收移位寄存器的數(shù)據(jù)進(jìn)入SBUF中就完成了一幀的接收過程,但必須滿足兩個條件,否則數(shù)據(jù)丟失:RI=0,表示前面接收的數(shù)據(jù)已經(jīng)被取走。SM2=0或第9位為1。(對于模式1,第9位是停止位)接收過程37第三十七頁,共八十二頁,2022年,8月28日接收時序38第三十八頁,共八十二頁,2022年,8月28日移位寄存器變化過程再作最后一次移位,并裝入SBUF,同時置位RI,接收1幀完成。39第三十九頁,共八十二頁,2022年,8月28日波特率(BaudRate)計算

(適用于模式1、3)在串行口的異步通訊中,發(fā)送方與接收方是兩個互相獨立的系統(tǒng),它們的系統(tǒng)時鐘可以各不相同。在這種條件下使通訊正確的條件是:1,要有相同的幀格式;2,要有相同或相近的波特率(<4%)。模式1、3的波特率是由定時器T1的溢出率來決定的(另外PCON中的SMOD位起著波特率加倍的作用)。在編制串行口通訊(模式1、3)程序時,須對T1進(jìn)行初始化。40第四十頁,共八十二頁,2022年,8月28日波特率(BaudRate)計算

(適用于模式1、3)T1初始化的主要任務(wù)就是:設(shè)置T1工作在模式2,定時。8位自重裝定時器。根據(jù)晶振頻率和需要的波特率,計算重裝載值,分別送給TH1、TL1。波特率計算公式:BR=T1溢出率=(計數(shù)速率)/[256-(TH1)]=(Fosc/12)/[256-(TH1)]41第四十一頁,共八十二頁,2022年,8月28日BR=32*12*[256–(TH1)]2SMOD*Fosc因此得到更多情況下,已知Fosc和BR,要計算TH1的重裝載值(TH1)=256-32*12*BR2SMOD*Fosc42第四十二頁,共八十二頁,2022年,8月28日【舉例】設(shè)系統(tǒng)時鐘為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)時鐘為12MHz,要求波特率為1200,求TH1的重裝載值?!窘狻窟xSMOD=0,用上述公式(TH1)=256-32*12*120012000000=229.95=230=0E6H因此得到TH1的重裝載值為0E6H,實際波特率為:計算波特率的例子BR=32*12*[256–230]12000000=1201.944第四十四頁,共八十二頁,2022年,8月28日常用波特率與晶體和T1設(shè)置對照表45第四十五頁,共八十二頁,2022年,8月28日例1發(fā)送字符串“HelloWorld!\n”至串口,要求波特率為1200,采用串口模式1,最高位約定做奇校驗位,已知Fosc=11.0592MHz。46第四十六頁,共八十二頁,2022年,8月28日分析:奇偶校驗由于傳輸?shù)氖茿SCII字符(0-7FH),只需要7位,對于模式1有8個數(shù)據(jù)位,將最高位做奇校驗位,保證形成的8位中1的個數(shù)始終是奇數(shù)個;接收方收到每一個字節(jié)后進(jìn)行奇偶判斷,若為奇則認(rèn)為無誤,若為偶則表示出錯,這種方法可以檢測出奇數(shù)個誤碼。例如,若要發(fā)送0x00,加奇校驗位后變成0x80;若要發(fā)送0x01,加奇校驗位后仍為0x01。接收方判斷無錯后去掉最高位,還原需要的數(shù)據(jù)。47第四十七頁,共八十二頁,2022年,8月28日回憶PSW:程序狀態(tài)字,存放指令執(zhí)行后的有關(guān)狀態(tài)P:(PSW.0)奇偶標(biāo)志位,用來標(biāo)志累加器ACC中1的個數(shù),可以用在串行通信中作奇偶校驗判斷。當(dāng)P=1時,表明A中1的個數(shù)為奇數(shù)個,反之為偶數(shù)個。

ACC=0x0; /*P=0*/ ACC=0x80; /*P=1*/48第四十八頁,共八十二頁,2022年,8月28日分析:波特率要求波特率為1200,采用串口模式1,已知Fosc=11.0592MHz。由上述條件計算或查表得到T1的重裝載值為0E8H49第四十九頁,共八十二頁,2022年,8月28日#include<reg51.h> sbitparity=ACC^7; /*定義ACC.7作奇校驗位*/unsignedchartx_string[14]=“HelloWorld!\n”;/*定義待發(fā)送字符串,也可以加code存儲類型,如:unsignedcharcodetx_string[14]=“HelloWorld!\n”*/編程實現(xiàn)50第五十頁,共八十二頁,2022年,8月28日main(){unsignedchari; /*定義1個循環(huán)變量*//*首先定義T1模式2作波特率發(fā)生器,波特率為1200并啟動運行*/TMOD=0x20;TH1=0xE8;TL1=0xE8;TR1=1;SCON=0x40; /*串口模式1,未允許接收*/for(i=0;i<14;i++) /*循環(huán)發(fā)送14個字符*/{ACC=tx_string[i]; /*取一個字符*/parity=P; /*獲取當(dāng)前的奇偶特性*/parity=!parity; /*一律改成奇校驗,此時P=1*/SBUF=ACC; /*開始發(fā)送*/while(!TI);TI=0; /*等這1個字節(jié)發(fā)完才能發(fā)下1字節(jié)*/}//endofforwhile(1); /*循環(huán)結(jié)束*/}//endofmain

編程實現(xiàn)(續(xù))51第五十一頁,共八十二頁,2022年,8月28日例2串口不斷接收發(fā)來的字符串,已知字符串長度為14字節(jié),若14字節(jié)均無錯則使接在P1.0引腳上的綠色LED閃爍3次后點亮,若有錯則使接在P1.1引腳上的紅色LED閃爍3次后點亮,要求波特率為1200,采用串口模式1,最高位約定做奇校驗位,已知Fosc=11.0592MHz。52第五十二頁,共八十二頁,2022年,8月28日用2個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ù)*/編程實現(xiàn)54第五十四頁,共八十二頁,2022年,8月28日main(){/*首先定義T1模式2作波特率發(fā)生器,波特率為1200并啟動運行*/TMOD=0x21;TH1=0xE8;TL1=0xE8;TR1=1;SCON=0x50; /*串口模式1,允許接收*/for(;;){if(receive_string()) //函數(shù)返回bit{GREEN_LED=1; //有錯綠燈滅flash_RED_LED_3(); //紅燈閃爍3次RED_LED=0;} //以后一直亮else{RED_LED=1;flash_GREEN_LED_3();GREEN_LED=0;}}//endoffor(;;)}//endofmain編程實現(xiàn)55第五十五頁,共八十二頁,2022年,8月28日bitreceive_string(void){biterror_bit=0; //1:有錯,0:沒錯unsignedchari;for(i=0;i<14;i++) {while(RI==0);RI=0; //查詢接收,等收到1字節(jié)ACC=SBUF; //讀入ACC便于判斷Pif(!P)error_bit=1; //偶校驗錯,置標(biāo)志后繼續(xù)else{ACC&=0x7F; //未出錯則去掉校驗位 rx_string[i]=ACC;}//存入緩沖區(qū)} returnerror_bit; //返回出錯標(biāo)志}編程實現(xiàn)(續(xù)1)56第五十六頁,共八十二頁,2022年,8月28日flash_RED_LED_3() /*紅燈閃爍3次函數(shù)*/{unsignedchari,j; /*定義循環(huán)變量*/

TMOD=0x21;TR0=1; /*T0模式1,運行*/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)掉定時器*/}

編程實現(xiàn)(續(xù)2)57第五十七頁,共八十二頁,2022年,8月28日flash_GREEN_LED_3() /*綠燈閃爍3次函數(shù)*/{unsignedchari,j; /*定義循環(huán)變量*/

TMOD=0x21;TR0=1; /*T0模式1,運行*/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)掉定時器*/}

編程實現(xiàn)(續(xù)3)58第五十八頁,共八十二頁,2022年,8月28日例3設(shè)串口每次收到上位機傳來的命令55H,便將內(nèi)部RAM中30H至3FH的數(shù)據(jù)發(fā)送出去,若不是55H便不做任何響應(yīng)。要求波特率為19200,不用校驗,已知Fosc=11.0592MHz。59第五十九頁,共八十二頁,2022年,8月28日分析這是典型的受上位機控制的通信過程。下位機平時可以一直查詢等上位機命令;也可以用中斷方式響應(yīng),提高效率,采取“中斷進(jìn)入,查詢收發(fā)”的策略,沒有通信命令的時候不予理會,有通信需要的時候集中處理,而不是每個字節(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并啟動運行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;}}}編程實現(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并啟動運行SCON=0x50; /*串口模式1,允許接收*/ES=1;EA=1; /*允許串口中斷*/for(;;); /*循環(huán)結(jié)束,等中斷*/}編程實現(xiàn)(中斷進(jìn)入、查詢收發(fā))62第六十二頁,共八十二頁,2022年,8月28日voidserial(void)interrupt4{unsignedchardata*p,i;if(TI){TI=0;return;} //一般要判斷是TI或RI為1,此時多余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;}}}編程實現(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日特點:模式2和3都是11位傳輸格式(1個起始位+9個數(shù)據(jù)位+1個停止位),兩種模式唯一不同之處是波特率;模式2:固定為Fosc/64或Fosc/32(由PCON中的 SMOD位來決定)。SMOD=1,Fosc/32; SMOD=0,Fosc/64.模式3:與模式1一樣由定時器T1的溢出率來確定。使用模式2不需要用定時器作為波特率發(fā)生器,節(jié)省一個定時器;但是波特率固定,且比較高,如果滿足通信需求就可以選擇這種模式。當(dāng)Fosc=12MHz時,波特率分別是375000和187500。第9數(shù)據(jù)位(TB8/RB8)可以作為奇偶校驗位,也可以用于多機通信控制,若不用校驗,更多時候用模式1。模式2、3特點65第六十五頁,共八十二頁,2022年,8月28日模式2、3幀格式66第六十六頁,共八十二頁,2022年,8月28日發(fā)送時:將SCON中的TB8作為第9位數(shù)據(jù)發(fā)送,TB8可編程為0或1;發(fā)送SBUF+TB8構(gòu)成9位數(shù)據(jù),接收時:將接收來的第9位送到SCON中的RB8中:接收SBUF+TB8構(gòu)成9位數(shù)據(jù)。TB8和RB867第六十七頁,共八十二頁,2022年,8月28日模式2、3的發(fā)送過程與模式1類似,主要的區(qū)別在于幀中數(shù)據(jù)是9位。這樣,在發(fā)送一幀時,CPU除了要把8位數(shù)據(jù)送SBUF外,還要把第9位數(shù)據(jù)送到TB8中,但注意要先設(shè)定好TB8,然后再向SBUF送數(shù),因為一寫SBUF就開始發(fā)送。停止位單獨生成,加在TB8之后。模式2、3的接收過程與模式1完全相同,只不過模式1時,SCON中的RB8是接收到的停止位(“1”);而模式2、3時,RB8是接收到的第9位(發(fā)送方的TB8)。發(fā)送和接收過程68第六十八頁,共八十二頁,2022年,8月28日例4設(shè)串口每隔1秒鐘便將片內(nèi)RAM中50H至5FH中的數(shù)據(jù)串行發(fā)送,串行口設(shè)定為模式2,TB8作偶校驗位,已知Fosc=12MHz。69第六十九頁,共八十二頁,2022年,8月28日分析將要發(fā)送的8位數(shù)據(jù)送入ACC;由奇偶標(biāo)志P即可判斷這8位中1的個數(shù):P=1奇;P=0偶。如果讓TB8=P,則9位數(shù)據(jù)中1的個數(shù)總是偶數(shù)個,這樣就實現(xiàn)了偶校驗。TB8作偶校驗位:

TB8作偶校驗位:串行口設(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個字節(jié)*/{ACC=*p++; /*取一個字節(jié)*/TB8=P; /*加偶校驗*/SBUF=ACC; /*開始發(fā)送*/while(!TI);TI=0; /*等這1個字節(jié)發(fā)完才能發(fā)下1字節(jié)*/}}編程實現(xiàn)72第七十二頁,共八十二頁,2022年,8月28日main(){SCON=0x80; /*串口模式2,未允許接收*/PCON=0x80; /*波特率為Fosc/32*/TMOD=1;TR1=1; /*T0模式1定時*/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

編程實現(xiàn)(續(xù))73第七十三頁,共八十二頁,2022年,8月28日例5接收上例中的數(shù)據(jù),存入一個接收緩沖區(qū),并進(jìn)行出錯判斷。74第七十四頁,共八十二頁,2022年,8月28日#include<reg51.h> unsignedcharrx_string[16];/*接收緩沖區(qū)*/bitreceive_string(void); /*聲明接收16字節(jié)字節(jié)函數(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,錯,函數(shù)省略else right(); //返回0,對,函數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論