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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機串行接口1第1頁,共82頁,2022年,5月20日,2點32分,星期二MCU中常用的幾種串行接口標準串行接口:數據一位接一位順序傳送,可只用一根數據線傳送多位信息。UART:通用異步接收器/發(fā)送器I2C:二線,芯片有地址,有總線爭用機制2第2頁,共82頁,2022年,5月20日,2點32分,星期二典型的I2C總線系統(tǒng)3第3頁,共82頁,2022年,5月20日,2點32分,星期二用口線模擬串行總線4第4頁,共82頁,2022年,5月20日,2點32分,星期二#include /要用到sfr#define uchar unsigned charsbit NCS=P10;sbit SCK=P1

2、1;sbit SI =P12;void shiftbyte(uchar byte);main() uchar data *p=0 x30; NCS=0; shiftbyte(0 xa);/由圖中讀出第一字節(jié)為0 xa0 shiftbyte(0 x23);/低8位地址 shiftbyte(*p); NCS=1; while(1);5第5頁,共82頁,2022年,5月20日,2點32分,星期二void shiftbyte(uchar byte)/將1字節(jié)數據由并變串由口線移出 uchar i; for(i=0; i8; i+) NCK=0; SI=(bit)(byte&0 x80);/強制將cha

3、r轉換成bit類型并賦值給口線 NCK=1; byte=1; /左移1位 6第6頁,共82頁,2022年,5月20日,2點32分,星期二UART原理收發(fā)雙方約定通信幀格式、波特率等,根據波特率各自維持位定時,而幀的開始靠一位起始位確定。如波特率1000,每1ms移一位,收發(fā)速率不要求嚴格相等,只要在一幀的范圍內沒有錯開半位即可正確收發(fā)。7第7頁,共82頁,2022年,5月20日,2點32分,星期二8第8頁,共82頁,2022年,5月20日,2點32分,星期二全雙工和半雙工9第9頁,共82頁,2022年,5月20日,2點32分,星期二 回憶8051結構特點:由單一內部總線連接各功能模塊,通過特殊

4、功能寄存器(SFR)集中控制。嵌入式結構,不同型號引腳定義和SFR定義有所不同,因此,從兩個方面來認識和掌握某一個功能模塊。相關引腳功能相關SFR功能10第10頁,共82頁,2022年,5月20日,2點32分,星期二第11頁,共82頁,2022年,5月20日,2點32分,星期二串行口相關引腳12第12頁,共82頁,2022年,5月20日,2點32分,星期二串行口相關SFRSCON: 串口控制寄存器SBUF:數據緩沖器PCON: 電源控制,最高位為波特率倍增器13第13頁,共82頁,2022年,5月20日,2點32分,星期二串行接口內部結構示意圖第14頁,共82頁,2022年,5月20日,2點3

5、2分,星期二 發(fā)送控制器、接收控制器、輸出門、輸入移位寄存器以及2個物理上互相獨立的接收/發(fā)送緩沖器(可同時發(fā)送和接收數據)。 發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入。兩個緩沖器可共用一個地址99H,不可按位尋址。SBUF = 0 x55; /寫發(fā)送緩沖器rbyte = SBUF;/讀接收緩沖器串行口的構成及SBUF15第15頁,共82頁,2022年,5月20日,2點32分,星期二SM0 SM1: 串行口操作模式選擇位。可以確定串行口的四種模式之一(如下表):串行口控制寄存器SCON,地址:98H,可以按位尋址16第16頁,共82頁,2022年,5月20日,2點32分,星期二

6、RI : 串行口完成一幀接收時置位(此時可以讀取收到的1個字節(jié)),申請中斷,CPU響應中斷后應由軟件清零; TI :串行口完成一幀發(fā)送時置位(此時可以發(fā)下一個字節(jié)),申請中斷,CPU響應中斷后應由軟件清零; RB8: 在9位數據傳送的模式2、3時,是接收到的第9位數據; TB8: 在9位數據傳送的模式2、3時,是將要發(fā)送的第9位數據; REN: 允許接收位,REN=1時允許接收; SM2:多機通信控制位。串行口控制寄存器SCON,地址:98H,可以按位尋址SM0SM1SM2RENTB8RB8TIRI17第17頁,共82頁,2022年,5月20日,2點32分,星期二 SMOD : 波特率倍增器,

7、1: 加倍, 0:不加倍 ; IDL : 置1進入省電的待機狀態(tài)(Idle); PD: 置1進入更省電的掉電狀態(tài)(Power Down); GF0, GF1 : 通用標志,一般配合進出低功耗狀態(tài)使用。電源控制寄存器PCON,地址:87H,不可按位尋址18第18頁,共82頁,2022年,5月20日,2點32分,星期二第一節(jié) 概述 第三節(jié) 模式1及其應用第四節(jié) 模式2、3及其應用第二節(jié) 模式0及其應用19第19頁,共82頁,2022年,5月20日,2點32分,星期二串行口的模式0特點:串行口做同步移位寄存器用,在這種模式下:RXD(P3.0)作為數據線,低位在前;TXD(P3.1)作為移位脈沖輸出

8、端,每個機器周期移位一次,速率為Fosc/12。模式0的主要功能是:可以使用一個串行口來擴展出8位、16位等并行口,且理論上可以擴展n*8位的并行口。相當于串并、并串轉換。20第20頁,共82頁,2022年,5月20日,2點32分,星期二21第21頁,共82頁,2022年,5月20日,2點32分,星期二模式0輸出時序圖22第22頁,共82頁,2022年,5月20日,2點32分,星期二模式0輸入時序圖輸入過程也是有8051主動發(fā)起的,并送出時鐘。這一點與模式1、2、3的情況不同,它們的輸入是被動的,由RXD引腳上的負跳變啟動。23第23頁,共82頁,2022年,5月20日,2點32分,星期二例1

9、 擴展1個16位并行輸出口,并將16進制數1234H由擴展口輸出。24第24頁,共82頁,2022年,5月20日,2點32分,星期二#include sbit STB=P10;void out16 (unsigned int dat16) STB=0; /* 4094進入串行移位狀態(tài) */ SBUF=dat16&0 xff; while( !TI ); TI=0; /*先送低8位, 等移完 */ SBUF=dat168; while( !TI ); TI=0; /*再送高8位, 等移完 */ STB=1;/* 同時并行輸出 */main() SCON=0 x0; /* 串口模式: 移位寄存器方

10、式 */ out16(0 x1234);/* 由擴展口送出0 x1234 */ while(1); /* main循環(huán)結束 */編程實現(xiàn)25第25頁,共82頁,2022年,5月20日,2點32分,星期二例2 擴展1個16位并行輸入口,把由擴展口讀入的16位數存入一個整型變量中。26第26頁,共82頁,2022年,5月20日,2點32分,星期二#include sbit P_S=P10;unsigned int in16 (void) ; /*聲明函數 */main() unsigned int dat16; SCON=0 x0; REN=1; /* 串口模式, 允許接收 */ dat16=in

11、16();/* 由擴展口讀入的數存入變量中*/ while(1); /* main循環(huán)結束 */編程實現(xiàn)27第27頁,共82頁,2022年,5月20日,2點32分,星期二unsigned int in16 (void) unsigned int tmp; P_S=1; P_S=0;/* 4014并行輸入后立即進入串行移位狀態(tài) */ while( !RI ); RI=0; /*查詢等高8位移完*/ tmp=SBUF; tmp=8; /* 讀入后送到臨時變量的高8位*/ while( !RI ); RI=0; /*查詢等低8位移完*/ tmp+=SBUF; /*合成16位數*/ return (t

12、mp); /* 返回得到的16位數 */編程實現(xiàn)(續(xù))28第28頁,共82頁,2022年,5月20日,2點32分,星期二第一節(jié) 概述第二節(jié) 模式0及其應用 第四節(jié) 模式2、3及其應用第三節(jié) 模式1及其應用29第29頁,共82頁,2022年,5月20日,2點32分,星期二 特點: 10位傳輸格式 (1個起始位+8個數據位+1個停止位); 波特率: 可變波特率,由定時器T1的溢出率來確定,所以在此種模式下,首先要對T1進行初始化以確定串行口的波特率。30第30頁,共82頁,2022年,5月20日,2點32分,星期二模式1幀格式31第31頁,共82頁,2022年,5月20日,2點32分,星期二模式1

13、原理示意圖(發(fā)送部分)第32頁,共82頁,2022年,5月20日,2點32分,星期二由寫SBUF啟動,在8位數據后加上一個停止位。 開始發(fā)送,但DATA無效,送出一個起始位 當零檢測器全0,再作最后一次移位,并置TI發(fā)送過程33第33頁,共82頁,2022年,5月20日,2點32分,星期二發(fā)送時序34第34頁,共82頁,2022年,5月20日,2點32分,星期二再做最后一次移位同時TI置1,發(fā)送1幀完成。零檢測器變化過程35第35頁,共82頁,2022年,5月20日,2點32分,星期二模式1原理示意圖(接收部分)第36頁,共82頁,2022年,5月20日,2點32分,星期二在REN=1的條件下

14、進行。串行口的接收控制器對RXD線進行采樣,其采樣頻率是接收波特率的16倍。當檢測到RXD上有負跳變后,復位16分頻計數器,當計數器計到第7 、 8 、9時,分別對RXD進行采樣,若有2個以上的0,則認為檢測到起始位并開始接收過程,此后每一位的判決都按照這種 “3取2” 的原則進行。裝載接收移位寄存器的數據進入SBUF中就完成了一幀的接收過程,但必須滿足兩個條件,否則數據丟失:RI=0,表示前面接收的數據已經被取走。 SM2=0或第9位為1。(對于模式1,第9位是停止位)接收過程37第37頁,共82頁,2022年,5月20日,2點32分,星期二接收時序38第38頁,共82頁,2022年,5月2

15、0日,2點32分,星期二移位寄存器變化過程再作最后一次移位,并裝入SBUF, 同時置位RI,接收1幀完成。39第39頁,共82頁,2022年,5月20日,2點32分,星期二波特率(Baud Rate)計算(適用于模式1、3)在串行口的異步通訊中,發(fā)送方與接收方是兩個互相獨立的系統(tǒng),它們的系統(tǒng)時鐘可以各不相同。 在這種條件下使通訊正確的條件是:1,要有相同的幀格式;2,要有相同或相近的波特率(4%)。模式1、3的波特率是由定時器T1的溢出率來決定的(另外PCON中的SMOD位起著波特率加倍的作用)。在編制串行口通訊(模式1、3)程序時,須對T1進行初始化。40第40頁,共82頁,2022年,5月

16、20日,2點32分,星期二波特率(Baud Rate)計算(適用于模式1、3)T1初始化的主要任務就是: 設置T1 工作在模式2,定時。8位自重裝定時器。 根據晶振頻率和需要的波特率,計算重裝載值,分別送給TH1、TL1。波特率計算公式:BR =T1溢出率 =(計數速率)/ 256 -(TH1) = (Fosc/12) / 256 -(TH1)41第41頁,共82頁,2022年,5月20日,2點32分,星期二BR =32 * 12 * 256 (TH1) 2SMOD * Fosc因此得到更多情況下,已知Fosc和BR,要計算TH1的重裝載值(TH1) = 256 - 32 * 12 * BR2

17、SMOD * Fosc42第42頁,共82頁,2022年,5月20日,2點32分,星期二【舉例】設系統(tǒng)時鐘為11.0592MHz,要求波特率為1200,求TH1的重裝載值?!窘狻窟xSMOD=0,用上述公式(TH1) = 256 - 32 * 12 *1200 11059200 =232=0E8H因此得到TH1的重裝載值為0E8H。 43第43頁,共82頁,2022年,5月20日,2點32分,星期二注意如果晶體頻率是其它值,得到的裝載值4舍5入,與標準波特率有一定誤差,但一般只要誤差不大仍能夠正常通信?!九e例】設系統(tǒng)時鐘為12MHz,要求波特率為1200,求TH1的重裝載值?!窘狻窟xSMOD=0

18、,用上述公式(TH1) = 256 - 32 * 12 *1200 12000000 =229.95=230=0E6H因此得到TH1的重裝載值為0E6H,實際波特率為:計算波特率的例子BR =32 * 12 * 256 230 12000000=1201.944第44頁,共82頁,2022年,5月20日,2點32分,星期二常用波特率與晶體和T1設置對照表45第45頁,共82頁,2022年,5月20日,2點32分,星期二例1發(fā)送字符串 “Hello World!n” 至串口,要求波特率為1200,采用串口模式1,最高位約定做奇校驗位,已知Fosc=11.0592MHz。46第46頁,共82頁,2

19、022年,5月20日,2點32分,星期二分析:奇偶校驗 由于傳輸的是ASCII字符(0-7FH),只需要7位,對于模式1有8個數據位,將最高位做奇校驗位,保證形成的8位中1的個數始終是奇數個;接收方收到每一個字節(jié)后進行奇偶判斷,若為奇則認為無誤,若為偶則表示出錯,這種方法可以檢測出奇數個誤碼。 例如,若要發(fā)送0 x00,加奇校驗位后變成0 x80;若要發(fā)送0 x01,加奇校驗位后仍為0 x01。接收方判斷無錯后去掉最高位,還原需要的數據。47第47頁,共82頁,2022年,5月20日,2點32分,星期二回憶PSW:程序狀態(tài)字,存放指令執(zhí)行后的有關狀態(tài)P: (PSW.0)奇偶標志位,用來標志累加

20、器ACC中1的個數,可以用在串行通信中作奇偶校驗判斷。當P=1時,表明A中1的個數為奇數個,反之為偶數個。ACC=0 x0;/* P=0 */ACC=0 x80;/* P=1 */48第48頁,共82頁,2022年,5月20日,2點32分,星期二分析:波特率要求波特率為1200,采用串口模式1,已知Fosc=11.0592MHz。由上述條件計算或查表得到T1的重裝載值為0E8H49第49頁,共82頁,2022年,5月20日,2點32分,星期二#include sbit parity=ACC7;/* 定義ACC.7 作奇校驗位 */unsigned char tx_string14=“Hello

21、 World!n” ; /*定義待發(fā)送字符串,也可以加 code存儲類型,如: unsigned char code tx_string14=“Hello World!n” */ 編程實現(xiàn)50第50頁,共82頁,2022年,5月20日,2點32分,星期二main() unsigned char i;/* 定義1個循環(huán)變量 */ /* 首先定義T1模式2 作波特率發(fā)生器,波特率為1200并啟動運行 */ TMOD=0 x20; TH1=0 xE8; TL1=0 xE8; TR1=1; SCON=0 x40; /* 串口模式1, 未允許接收 */ for (i =0; i14; i+) /* 循環(huán)

22、發(fā)送14個字符 */ ACC=tx_stringi ;/* 取一個字符 */ parity=P;/* 獲取當前的奇偶特性 */ parity=!parity;/* 一律改成奇校驗, 此時P=1 */ SBUF=ACC; /* 開始發(fā)送 */ while ( !TI ); TI=0; /* 等這1個字節(jié)發(fā)完才能發(fā)下1字節(jié) */ /end of for while(1);/* 循環(huán)結束 */end of main 編程實現(xiàn)(續(xù))51第51頁,共82頁,2022年,5月20日,2點32分,星期二例2 串口不斷接收發(fā)來的字符串,已知字符串長度為14字節(jié),若14字節(jié)均無錯則使接在P1.0引腳上的綠色LE

23、D閃爍3次后點亮,若有錯則使接在P1.1引腳上的紅色LED閃爍3次后點亮,要求波特率為1200,采用串口模式1,最高位約定做奇校驗位,已知Fosc=11.0592MHz。52第52頁,共82頁,2022年,5月20日,2點32分,星期二用2個LED表示狀態(tài)53第53頁,共82頁,2022年,5月20日,2點32分,星期二#include sbit RED_LED=P11;/* 紅燈 */sbit GREEN_LED=P10;/* 綠燈 */unsigned char rx_string14; /* 接收緩沖區(qū) */bit receive_string(void); /* 聲明接收14字節(jié)字符串

24、函數 */flash_RED_LED_3();/* 聲明紅燈閃爍3次函數 */flash_GREEN_LED_3();/* 聲明綠燈閃爍3次函數 */編程實現(xiàn)54第54頁,共82頁,2022年,5月20日,2點32分,星期二main() /* 首先定義T1模式2 作波特率發(fā)生器,波特率為1200并啟動運行 */ TMOD=0 x21; TH1=0 xE8; TL1=0 xE8; TR1=1; SCON=0 x50; /* 串口模式1, 允許接收 */ for(;) if(receive_string() /函數返回bit GREEN_LED=1; /有錯綠燈滅 flash_RED_LED_3(

25、); /紅燈閃爍3次 RED_LED=0; /以后一直亮 else RED_LED=1; flash_GREEN_LED_3(); GREEN_LED=0; / end of for(;)/end of main編程實現(xiàn)55第55頁,共82頁,2022年,5月20日,2點32分,星期二bit receive_string(void) bit error_bit=0;/ 1: 有錯, 0: 沒錯 unsigned char i; for (i=0; i14; i+) while(RI=0); RI=0;/查詢接收, 等收到1字節(jié) ACC = SBUF;/讀入ACC便于判斷P if (!P) er

26、ror_bit=1;/偶校驗錯,置標志后繼續(xù) else ACC&=0 x7F;/ 未出錯則去掉校驗位 rx_stringi = ACC; /存入緩沖區(qū) return error_bit;/返回出錯標志編程實現(xiàn)(續(xù)1)56第56頁,共82頁,2022年,5月20日,2點32分,星期二flash_RED_LED_3()/* 紅燈閃爍3次函數 */ unsigned char i, j ;/* 定義循環(huán)變量 */ TMOD=0 x21; TR0=1; /* T0模式1, 運行 */ for (i=0; i6; i+)/* 閃爍3次 */ for(j=0; j5; j+)/* 5* 50ms =0.2

27、5s */ TH0=0 x3C; TL0=0 xB0; while (!TF0); TF0=0; RED_LED=! RED_LED; /* 每隔0.25秒亮暗交替變化*/ TR0=0;/* 關掉定時器 */ 編程實現(xiàn)(續(xù)2)57第57頁,共82頁,2022年,5月20日,2點32分,星期二flash_GREEN_LED_3()/* 綠燈閃爍3次函數 */ unsigned char i, j ;/* 定義循環(huán)變量 */ TMOD=0 x21; TR0=1; /* T0模式1, 運行 */ for (i=0; i6; i+)/* 閃爍3次 */ for(j=0; j5; j+)/* 5* 50

28、ms =0.25s */ TH0=0 x3C; TL0=0 xB0; while (!TF0); TF0=0; GREEN_LED=! GREEN_LED; /* 每隔0.25秒亮暗交替變化 */ TR0=0;/* 關掉定時器 */ 編程實現(xiàn)(續(xù)3)58第58頁,共82頁,2022年,5月20日,2點32分,星期二例3 設串口每次收到上位機傳來的命令55H,便將內部RAM中30H至3FH的數據發(fā)送出去,若不是55H便不做任何響應。要求波特率為19200,不用校驗,已知Fosc= 11.0592MHz。59第59頁,共82頁,2022年,5月20日,2點32分,星期二分析 這是典型的受上位機控制

29、的通信過程。下位機平時可以一直查詢等上位機命令;也可以用中斷方式響應,提高效率,采取 “中斷進入,查詢收發(fā)” 的策略,沒有通信命令的時候不予理會,有通信需要的時候集中處理,而不是每個字節(jié)都采用中斷方式。60第60頁,共82頁,2022年,5月20日,2點32分,星期二#include main() unsigned char data *p, i; TMOD=0 x20; TH1=0 xFD; TL1=0 xFD; PCON=0 x80; TR1=1; / T1模式2 作波特率發(fā)生器,SMOD=1, 波特率為19200并啟動運行 SCON=0 x50; /* 串口模式1, 允許接收 */ fo

30、r (; ;) while( !RI ); RI=0; if (SBUF != 0 x55) continue; p=0 x30; for (i=0; i16; i+) /查詢發(fā)送30H開始的16字節(jié) SBUF=*p+; while(!TI); TI=0; 編程實現(xiàn)(查詢方式)61第61頁,共82頁,2022年,5月20日,2點32分,星期二#include main() unsigned char data *p, i; TMOD=0 x20; TH1=0 xFD; TL1=0 xFD; PCON=0 x80; TR1=1; / T1模式2 作波特率發(fā)生器,SMOD=1, 波特率為19200

31、并啟動運行 SCON=0 x50; /* 串口模式1, 允許接收 */ ES=1; EA=1; /* 允許串口中斷 */ for (; ;);/* 循環(huán)結束,等中斷 */編程實現(xiàn)(中斷進入、查詢收發(fā))62第62頁,共82頁,2022年,5月20日,2點32分,星期二void serial(void) interrupt 4 unsigned char data *p, i; if (TI)TI=0; return;/一般要判斷是TI或RI為1,此時多余 RI=0; if (SBUF != 0 x55) return; /不是55H返回 p=0 x30; for (i=0; i16; i+)/查

32、詢發(fā)送30H開始的16字節(jié) SBUF=*p+; while(!TI); TI=0; 編程實現(xiàn)(中斷進入、查詢收發(fā))續(xù)63第63頁,共82頁,2022年,5月20日,2點32分,星期二第一節(jié) 概述第二節(jié) 模式0及其應用第三節(jié) 模式1及其應用 第四節(jié) 模式2、3及其應用64第64頁,共82頁,2022年,5月20日,2點32分,星期二特點: 模式2和3都是11位傳輸格式 (1個起始位+9個數據位+1個停止位),兩種模式唯一不同之處是波特率;模式2:固定為Fosc/64或Fosc/32(由PCON中的SMOD位來決定)。SMOD=1, Fosc/32; SMOD=0, Fosc/64. 模式3:與模

33、式1一樣由定時器T1的溢出率來確定。使用模式2不需要用定時器作為波特率發(fā)生器,節(jié)省一個定時器;但是波特率固定,且比較高,如果滿足通信需求就可以選擇這種模式。當Fosc=12MHz時,波特率分別是375000和187500。第9數據位(TB8/RB8)可以作為奇偶校驗位,也可以用于多機通信控制,若不用校驗,更多時候用模式1。模式2、3特點65第65頁,共82頁,2022年,5月20日,2點32分,星期二模式2、3幀格式66第66頁,共82頁,2022年,5月20日,2點32分,星期二發(fā)送時:將SCON中的TB8作為第9位數據發(fā)送, TB8可編程為0或1;發(fā)送SBUF+TB8構成9位數據,接收時:

34、將接收來的第9位送到SCON中的RB8中:接收SBUF+TB8構成9位數據。TB8和RB867第67頁,共82頁,2022年,5月20日,2點32分,星期二模式2、3的發(fā)送過程與模式1類似,主要的區(qū)別在于幀中數據是9位。這樣,在發(fā)送一幀時,CPU除了要把8位數據送SBUF外,還要把第9位數據送到TB8中,但注意要先設定好TB8,然后再向SBUF送數,因為一寫SBUF就開始發(fā)送。 停止位單獨生成,加在TB8之后。模式2、3的接收過程與模式1完全相同,只不過模式1時,SCON中的RB8是接收到的停止位(“1”);而模式2、3時,RB8是接收到的第9位(發(fā)送方的TB8)。發(fā)送和接收過程68第68頁,

35、共82頁,2022年,5月20日,2點32分,星期二例4設串口每隔1秒鐘便將片內RAM中50H至5FH中的數據串行發(fā)送,串行口設定為模式2,TB8作偶校驗位,已知Fosc=12MHz。69第69頁,共82頁,2022年,5月20日,2點32分,星期二分析 將要發(fā)送的8位數據送入ACC; 由奇偶標志P即可判斷這8位中1的個數: P=1 奇; P=0 偶。 如果讓TB8=P, 則9位數據中1的個數總是偶數個,這樣就實現(xiàn)了偶校驗。 TB8作偶校驗位: TB8作偶校驗位:串行口設定為模式2,無需用T1作波特率發(fā)生器;70第70頁,共82頁,2022年,5月20日,2點32分,星期二分析 1s=50ms

36、*20 T0模式1, 重裝載值 TC=65536 50ms/1us=15536=3CB0H71第71頁,共82頁,2022年,5月20日,2點32分,星期二#include void send16(void) unsigned char data *p, i;/* 定義指針及循環(huán)變量 */ p=0 x50;/* 指向內部RAM 50H單元 */ for (i =0; i16; i+) /* 循環(huán)發(fā)送16個字節(jié) */ ACC=*p+ ;/* 取一個字節(jié) */ TB8=P;/* 加偶校驗 */ SBUF=ACC; /* 開始發(fā)送 */ while ( !TI ); TI=0; /* 等這1個字節(jié)發(fā)

37、完才能發(fā)下1字節(jié) */ 編程實現(xiàn)72第72頁,共82頁,2022年,5月20日,2點32分,星期二main() SCON=0 x80; /* 串口模式2, 未允許接收 */ PCON=0 x80; /* 波特率為Fosc/32 */ TMOD=1; TR1=1;/* T0模式1定時 */ while (1) for (i=0; i20; i+) TH0=0 x3C; TL0=0 xB0; while( ! TF0); TF0=0; /* 等1秒鐘 */ send16();/* 調用發(fā)送16字節(jié)函數 */ /end of main 編程實現(xiàn)(續(xù))73第73頁,共82頁,2022年,5月20日,2

38、點32分,星期二例5接收上例中的數據,存入一個接收緩沖區(qū),并進行出錯判斷。74第74頁,共82頁,2022年,5月20日,2點32分,星期二#include unsigned char rx_string16; /* 接收緩沖區(qū) */bit receive_string(void); /* 聲明接收16字節(jié)字節(jié)函數 */編程實現(xiàn)75第75頁,共82頁,2022年,5月20日,2點32分,星期二#include unsigned char rx_string16; /* 接收緩沖區(qū) */bit receive_string(void); /* 聲明接收16字節(jié)字節(jié)函數 */main() SCON=0 x90; /* 串口模式2, 允許接收 */ PCON=0 x80;/* BR=Fosc/32 */ for(;) if(receive16() error();/返回1,錯,函數省略 else right(); /返回0,對,函數省略 編程實現(xiàn)76第76頁,共82頁,2022年,5月20日,2點32分,星期二bit receive

溫馨提示

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

評論

0/150

提交評論