




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7章 AT89S51單片機(jī)的 串行口1內(nèi)容概要內(nèi)容概要介紹介紹AT89S51串行口的基本工作原理、串行口的基本工作原理、4種工作方式以種工作方式以及串行口多機(jī)通信的工作原理,還介紹各種常用的串行通及串行口多機(jī)通信的工作原理,還介紹各種常用的串行通信的接口標(biāo)準(zhǔn),以及串行通信的信的接口標(biāo)準(zhǔn),以及串行通信的C51編程。編程。2 AT89S51的串行口為全雙工的通用異步收發(fā)(的串行口為全雙工的通用異步收發(fā)(UART)的)的串行口。全雙工就是兩個(gè)單片機(jī)之間串行數(shù)據(jù)可同時(shí)雙向傳串行口。全雙工就是兩個(gè)單片機(jī)之間串行數(shù)據(jù)可同時(shí)雙向傳輸。異步通信是指收、發(fā)雙方使用各自的時(shí)鐘控制發(fā)送和接輸。異步通信是指收、發(fā)雙
2、方使用各自的時(shí)鐘控制發(fā)送和接收過程,這樣可省去收、發(fā)雙方的一條同步時(shí)鐘信號(hào)線,使收過程,這樣可省去收、發(fā)雙方的一條同步時(shí)鐘信號(hào)線,使得異步串行通信連接更加簡(jiǎn)單且容易實(shí)現(xiàn)。得異步串行通信連接更加簡(jiǎn)單且容易實(shí)現(xiàn)。7.1 串行口的結(jié)構(gòu)串行口的結(jié)構(gòu)內(nèi)部結(jié)構(gòu)如圖7-1。兩個(gè)物理上獨(dú)立兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器接收、發(fā)送緩沖器SBUF(屬于特殊功能寄存器),可同時(shí)發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器發(fā)送緩沖器只寫不能讀。接收緩沖器接收緩沖器只讀不能寫。兩個(gè)緩沖器共用一個(gè)特殊功能寄存器字節(jié)地址共用一個(gè)特殊功能寄存器字節(jié)地址(99H)??刂萍拇嫫鲀蓚€(gè):特殊功能寄存器SCON和PCON。45圖圖7-1 串行口內(nèi)部結(jié)
3、構(gòu)串行口內(nèi)部結(jié)構(gòu)7.1.1 串行口控制寄存器串行口控制寄存器SCON字節(jié)地址98H,可位尋址,位地址為98H9FH。格式如圖圖7-2。圖圖7-2 串行口控制寄存器串行口控制寄存器SCON的格式的格式SCON中各位功能。(1)SM0、SM1串行口串行口4種工作方式選擇種工作方式選擇位位SM0、SM1兩位編碼所對(duì)應(yīng)的4 4種工作方式種工作方式如表7-1。6(2 2)SM2SM2多機(jī)通信控制位多機(jī)通信控制位多機(jī)通信僅在方式2和方式3下進(jìn)行。當(dāng)串口以方式串口以方式2或方或方式式3接收時(shí)接收時(shí),如果如果SM2SM2 = = 1 1,則只有當(dāng)接收到的第接收到的第9位數(shù)據(jù)位數(shù)據(jù)(RB8)為為“1”時(shí)時(shí),才使
4、RI置“1”,產(chǎn)生中斷請(qǐng)求,并將接收到的前8位數(shù)據(jù)送入SBUF。當(dāng)接收到的第接收到的第9 9位數(shù)據(jù)位數(shù)據(jù)(RB8RB8)為為“0 0”時(shí)時(shí),則將接收到的前8位數(shù)據(jù)丟棄。7當(dāng)SM2 = 0時(shí),則不論第不論第9位數(shù)據(jù)是位數(shù)據(jù)是“1”還是還是“0”,都將前8位數(shù)據(jù)送入SBUF中,并使并使RI置置“1”,產(chǎn)生中斷請(qǐng)求。方式方式1時(shí),如果SM2 = 1,則只有收到有效的停止位時(shí)才會(huì)激活RI。方式方式0時(shí),SM2必須為0。(3)REN允許串行接收位。允許串行接收位。由軟件置“1”或清“0”。REN=1,允許串行口接收數(shù)據(jù)。REN=0,禁止串行口接收數(shù)據(jù)。8(4)TB8發(fā)送的第發(fā)送的第9位數(shù)據(jù)位數(shù)據(jù)方式2和
5、方式3,TB8是要發(fā)送的第9位數(shù)據(jù),由軟件置“1”或清“0”。雙機(jī)串行通信雙機(jī)串行通信時(shí),一般作為奇偶校驗(yàn)位奇偶校驗(yàn)位;在多機(jī)通多機(jī)通信信中用來表示主機(jī)發(fā)送的是地址幀還是數(shù)據(jù)幀,TB8=1為地址地址幀幀,TB8=0為數(shù)據(jù)幀數(shù)據(jù)幀。(5)RB8接收的第接收的第9位數(shù)據(jù)位數(shù)據(jù)方式方式2和方式和方式3,RB8存放接收到的存放接收到的第第9位位數(shù)據(jù)數(shù)據(jù)。在方式方式1,如SM2 = 0,RB8是接收到的停止位。在方式方式0,不使用RB8。(6)TI發(fā)送中斷標(biāo)志位發(fā)送中斷標(biāo)志位方式方式0,串行發(fā)送的第第8位數(shù)據(jù)結(jié)束時(shí)位數(shù)據(jù)結(jié)束時(shí)TI由硬件置由硬件置“1”,在其他方式其他方式中,串行口發(fā)送停止位的開始時(shí)置T
6、I 為“1”。9TI =1,表示一幀數(shù)據(jù)發(fā)送結(jié)束一幀數(shù)據(jù)發(fā)送結(jié)束。TI狀態(tài)可供軟件查詢,也可申請(qǐng)中斷。CPU響應(yīng)中斷后,在中斷服務(wù)程序中向SBUF寫入要發(fā)送的下一幀數(shù)據(jù)。TI必須由軟件清必須由軟件清“0”。(7)RI接收中斷標(biāo)志位接收中斷標(biāo)志位方式0時(shí),接收完第接收完第8位數(shù)據(jù)位數(shù)據(jù)時(shí),RI由硬件置“1”。在其他工作方式中,串行接收到停止位時(shí),該位置“1”。RI=1,表示一幀數(shù)據(jù)接收完畢,并申請(qǐng)中斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位的狀態(tài)也可供軟件查詢。RI必須由軟必須由軟件清件清“0”。 SCON的所有位都可進(jìn)行位操作清的所有位都可進(jìn)行位操作清“0”或置或置“1”。7.1.2 特殊功能
7、寄存器特殊功能寄存器PCON 字節(jié)地址字節(jié)地址為為87H,不能位尋址。格式,不能位尋址。格式圖圖7-3。圖圖7-3 特殊功能寄存器特殊功能寄存器PCON的格式的格式11 介紹PCON中各位功能。僅最高位SMOD與串口有關(guān),其其它各位它各位的功能已在第2章的節(jié)電工作方式一節(jié)中作過介紹。SMOD:波特率選擇位。例如例如,方式1的波特率計(jì)算公式:方式方式1波特率波特率 = 定時(shí)器T1的溢出率 當(dāng)SMOD=1時(shí),要比SMOD=0時(shí)波特率加倍,所以也稱SMOD位為波特率倍增位波特率倍增位。12SMOD232SMOD2327.2 串行口的串行口的4種工作方式種工作方式4種工作方式由SCON中SM0、SM1
8、位位定義,編碼見表7-1。7.2.1 方式方式0同步移位寄存器輸入同步移位寄存器輸入/輸出方式輸出方式。該方式并不用于兩個(gè)AT89S51單片機(jī)之間的異步串行通信,而是用于串行口外接用于串行口外接移位寄存器移位寄存器,擴(kuò)展并行I/O口。8位數(shù)據(jù)為一幀,無無起始位起始位和和停止位停止位,先發(fā)送或接收最低位。波特率為fosc/12。幀格式如圖7-4。圖圖7-4 方式方式0的幀格式的幀格式131方式方式0輸出輸出(1)方式)方式0輸出的工作原理輸出的工作原理當(dāng)執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器寫入發(fā)送緩沖器SBUF指令指令時(shí),產(chǎn)生一產(chǎn)生一個(gè)正脈沖個(gè)正脈沖,串行口開始把SBUF中的8位數(shù)據(jù)以fosc/12的的
9、固定固定波特率波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完發(fā)送完8位數(shù)據(jù),中斷標(biāo)志位位數(shù)據(jù),中斷標(biāo)志位TI置置“1”。 發(fā)送時(shí)序如圖7-5。14圖圖7-5 方式方式0發(fā)送時(shí)序發(fā)送時(shí)序15(2)方式)方式0輸出的應(yīng)用輸出的應(yīng)用 典型應(yīng)用是外擴(kuò)串行輸入典型應(yīng)用是外擴(kuò)串行輸入/并行輸出的同步移位寄存器并行輸出的同步移位寄存器74LS164,實(shí)現(xiàn)并行輸出端口的擴(kuò)展。,實(shí)現(xiàn)并行輸出端口的擴(kuò)展。 圖圖7-6為串行口工作在方式為串行口工作在方式0,通過,通過74LS164的輸出來控制的輸出來控制8個(gè)外接個(gè)外接LED發(fā)光二極管亮滅的接口電路。當(dāng)串行口被設(shè)置發(fā)光二極管亮滅的接口電路。
10、當(dāng)串行口被設(shè)置在方式在方式0輸出時(shí),串行數(shù)據(jù)由輸出時(shí),串行數(shù)據(jù)由RXD端(端(P3.0)送出,移位脈)送出,移位脈沖由沖由TXD端(端(P3.1)送出。在移位脈沖的作用下,串行口發(fā))送出。在移位脈沖的作用下,串行口發(fā)送緩沖器的數(shù)據(jù)逐位地從送緩沖器的數(shù)據(jù)逐位地從RXD端串行地移入端串行地移入74LS164中。中。 1617圖圖7-6 串行口的方式串行口的方式0 外接外接8個(gè)個(gè)LED發(fā)光二極管的接口電路發(fā)光二極管的接口電路 【例例7-1】如如圖圖7-6所示,編寫程序控制所示,編寫程序控制8個(gè)發(fā)光二極管輪個(gè)發(fā)光二極管輪流點(diǎn)亮。流點(diǎn)亮。 圖中圖中74LS164的的CLK端為同步脈沖輸入端,端為同步脈沖
11、輸入端,CLR為控制端為控制端,當(dāng),當(dāng)CLR=0時(shí),允許串行數(shù)據(jù)從時(shí),允許串行數(shù)據(jù)從A和和B端輸入但是端輸入但是8位并行輸位并行輸出端關(guān)閉;當(dāng)出端關(guān)閉;當(dāng)CLR=1時(shí),時(shí),A和和B輸入端關(guān)閉,但是允許輸入端關(guān)閉,但是允許74LS164中的中的8位數(shù)據(jù)并行輸出。當(dāng)位數(shù)據(jù)并行輸出。當(dāng)8位串行數(shù)據(jù)發(fā)送完畢后位串行數(shù)據(jù)發(fā)送完畢后,引起中斷,在中斷服務(wù)程序中,單片機(jī)通過串行口輸出下,引起中斷,在中斷服務(wù)程序中,單片機(jī)通過串行口輸出下一個(gè)一個(gè)8位數(shù)據(jù)。位數(shù)據(jù)。 采用中斷方式的參考程序如下。采用中斷方式的參考程序如下。 #include #include sbit P1_0=0 x90;xdata char
12、 nSendByte;delay( );main( ) SCON=0 x00; /* 設(shè)置串行口為方式設(shè)置串行口為方式0*/EA=1;/* 全局中斷允許全局中斷允許 */ES=1;/* 允許串行口中斷允許串行口中斷 */nIndex=1;SBUF=nSendByte;P1_0=0;for(;) void Serial_Port( ) interrupt 4 using 0if(TI=1)P1_0=1;delay( );P1_0=0;nSendByte=1;if(nSendByte=0) nSendByte =1;SBUF=nSendByte;TI=0;RI=0;delay( )int nCou
13、nter;for(nCounter=0;nCounter128;nCounter+);程序說明:程序說明: (1)定義了全局變量)定義了全局變量nSendByte,以便在中斷服務(wù)程序中,以便在中斷服務(wù)程序中能訪問該變量。能訪問該變量。nSendByte用于存放從串口發(fā)出的字符,在用于存放從串口發(fā)出的字符,在程序中使用操作符對(duì)程序中使用操作符對(duì)nSendByte變量進(jìn)行移位,使得從串口變量進(jìn)行移位,使得從串口發(fā)出的數(shù)據(jù)為發(fā)出的數(shù)據(jù)為0 x01, 0 x02, 0 x04,0 x08,0 x10,0 x20,0 x40,0 x80,從而逐個(gè)點(diǎn)亮不同的發(fā)光二極管。,從而逐個(gè)點(diǎn)亮不同的發(fā)光二極管。 (
14、2)if語句的作用是當(dāng)語句的作用是當(dāng)nSendByte左移一位由左移一位由0 x80變?yōu)樽優(yōu)? x00后,需對(duì)變量后,需對(duì)變量nIndex重新賦值為重新賦值為1。 (3)主程序中的)主程序中的SBUF=nSendByte語句必不可少,如沒語句必不可少,如沒有該語句,主程序并不從串行口發(fā)送數(shù)據(jù),也就不會(huì)有發(fā)送有該語句,主程序并不從串行口發(fā)送數(shù)據(jù),也就不會(huì)有發(fā)送完成中斷。完成中斷。 (4)循環(huán)語句)循環(huán)語句for(;)的循環(huán)條件為空,表示的循環(huán)條件為空,表示for循環(huán)為循環(huán)為一個(gè)無限循環(huán),與一個(gè)無限循環(huán),與while(1)實(shí)現(xiàn)同樣的功能。實(shí)現(xiàn)同樣的功能。2方式方式0輸入輸入(1)方式)方式0輸入工
15、作原理輸入工作原理方式0接收,REN為允許接收控制位允許接收控制位,REN=0,禁止接收;REN = 1,允許接收。當(dāng)向SCON寄存器寫入控制字寫入控制字(設(shè)置為方式0,并使REN位置“1”,同時(shí)RI = 0)時(shí),產(chǎn)生一個(gè)正脈沖,串行口開始產(chǎn)生一個(gè)正脈沖,串行口開始接收數(shù)據(jù)。接收數(shù)據(jù)。引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號(hào)輸出端,接收器以fosc/12的固定波特率的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當(dāng)接接收完收完8位位數(shù)據(jù)時(shí),中斷標(biāo)志RI置置“1”,表示一幀數(shù)據(jù)接收完畢,可進(jìn)行下一幀數(shù)據(jù)的接收,時(shí)序如圖圖7-7。23圖圖7-7 方式方式0接收時(shí)序接收時(shí)序(2)方式)方式0輸入應(yīng)用舉例輸
16、入應(yīng)用舉例 【例例7-2】圖圖7-8為串口外接一片為串口外接一片8位并行輸入、串行輸出的位并行輸入、串行輸出的同步移位寄存器同步移位寄存器74LS165,擴(kuò)展一個(gè),擴(kuò)展一個(gè)8位并行輸入口的電路,位并行輸入口的電路,可將接在可將接在74LS165的的8個(gè)開關(guān)的狀態(tài)通過串口方式個(gè)開關(guān)的狀態(tài)通過串口方式0讀入到單讀入到單片機(jī)內(nèi)。片機(jī)內(nèi)。74LS165的的SH/LD*端為控制端。若端為控制端。若SH/LD*=0,則,則74LS165可并行輸入數(shù)據(jù),且串行輸出端關(guān)閉;可并行輸入數(shù)據(jù),且串行輸出端關(guān)閉;SH/LD*=1,則并行輸入關(guān)斷,可以串行輸出。則并行輸入關(guān)斷,可以串行輸出。 圖中由圖中由P1.0檢測(cè)
17、的開關(guān)檢測(cè)的開關(guān)S合上時(shí)開始數(shù)字量并行讀入,采用合上時(shí)開始數(shù)字量并行讀入,采用中斷方式來完成數(shù)字量的讀取。參考程序如下。中斷方式來完成數(shù)字量的讀取。參考程序如下。2526圖圖7-8 外接并行輸入串行輸出的同步移位寄存器外接并行輸入串行輸出的同步移位寄存器#include #includesbit P1_0=0 x90;sbit P1_1=0 x91;xdata char nRxByte;delay( );main( ) xdata char nRxByte=0;SCON=0 x00; /* 串行口初始化為方式0*/ES=1;/* 允許串行口中斷 */EA=1;/* 允許全局中斷 */for(;
18、) if(P1_0=0)/* P1.0=0為真,表示要并行讀入數(shù)字量 */ P1_1=0;/* P1.1清0,將數(shù)字量并行讀入*/P1_1=1;/* P1.1置1,將并行讀入數(shù)字量串行輸出給單片機(jī)*/void Serial_Port() interrupt 4 using 0if(RI=1)nRxByte=SBUF;/*讀入讀入SBUF 中的數(shù)據(jù)中的數(shù)據(jù)*/TI=0;/*清除清除TI和和RI標(biāo)志位標(biāo)志位*/RI=0; 程序說明:程序說明:當(dāng)當(dāng)P1.0為為0表示要并行讀入數(shù)字量,通過表示要并行讀入數(shù)字量,通過P1.1把把SH/LD*復(fù)位,則并行讀入,再把復(fù)位,則并行讀入,再把SH/LD*置置1,
19、74LS165就將并行讀入的數(shù)字量通過就將并行讀入的數(shù)字量通過QH端串行發(fā)給單片機(jī),在中斷端串行發(fā)給單片機(jī),在中斷服務(wù)程序中讀入服務(wù)程序中讀入SBUF中的數(shù)據(jù)。中的數(shù)據(jù)。7.2.2 方式方式1方式1為雙機(jī)串行通信方式,如圖圖7-9所示。當(dāng)SM0、SM1=01時(shí),串行口設(shè)為方式1的雙機(jī)串行通信。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。圖圖7-9 方式1雙機(jī)串行通信的連接電路29方式1一幀數(shù)據(jù)為一幀數(shù)據(jù)為10位位,1個(gè)起始位(個(gè)起始位(0),),8個(gè)數(shù)據(jù)位,個(gè)數(shù)據(jù)位,1個(gè)停止位(個(gè)停止位(1),),先發(fā)送或接收最低位。幀格式如圖7-10。 圖7-10 方式1的幀格式方式1為波特率可變波特率可變的
20、8位異步通信接口。波特率由下式確定:方式方式1波特率波特率 = 定時(shí)器T1的溢出率SMOD為PCON寄存器的最高位的值(0或1)。30SMOD2321方式方式1發(fā)送發(fā)送方式1輸出時(shí),數(shù)據(jù)位由TXD端端輸出,發(fā)送一幀信息為一幀信息為10位位:1位起始位位起始位0,8位數(shù)據(jù)位(先低位)和位數(shù)據(jù)位(先低位)和1位停止位位停止位1。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫SBUF的指令,就啟動(dòng)發(fā)送啟動(dòng)發(fā)送。發(fā)送時(shí)序見圖圖7-11。圖7-11中TX時(shí)鐘時(shí)鐘的頻率就是發(fā)送的波特率。發(fā)送開始時(shí)發(fā)送開始時(shí),內(nèi)部發(fā)送控制信號(hào) 變?yōu)橛行?,將起始位向TXD腳(P3.0)輸出,此后每經(jīng)過一個(gè)TX時(shí)鐘周期,便產(chǎn)生一個(gè)移位脈沖,并由TXD
21、引腳輸出一個(gè)數(shù)據(jù)位。8位數(shù)據(jù)位位數(shù)據(jù)位全部發(fā)送完畢后全部發(fā)送完畢后,中斷標(biāo)志位TI置置“1。31 圖圖7-11 方式方式1發(fā)送時(shí)序發(fā)送時(shí)序322 2方式方式1 1接收接收方式方式1 1接收時(shí)(接收時(shí)(RENREN = = 1 1),數(shù)據(jù)從),數(shù)據(jù)從RXDRXD(P3.1P3.1)引腳輸入。當(dāng))引腳輸入。當(dāng)檢測(cè)到起始位的檢測(cè)到起始位的負(fù)跳變負(fù)跳變,則,則開始接收開始接收。接收時(shí)序見。接收時(shí)序見圖圖7-127-12。接收時(shí),定時(shí)控制信號(hào)有接收時(shí),定時(shí)控制信號(hào)有兩種兩種,一種一種是是接收移位時(shí)鐘接收移位時(shí)鐘(RXRX時(shí)時(shí)鐘),它的頻率和傳送的波特率相同。鐘),它的頻率和傳送的波特率相同。另一種另一種
22、是是位檢測(cè)器采樣位檢測(cè)器采樣脈沖脈沖,頻率是頻率是RXRX時(shí)鐘的時(shí)鐘的1616倍倍。以波特率的。以波特率的1616倍速率采樣倍速率采樣RXDRXD腳狀腳狀態(tài)。態(tài)。當(dāng)采樣到當(dāng)采樣到RXDRXD端從端從1 1到到0 0的負(fù)跳變時(shí)就啟動(dòng)檢測(cè)器的負(fù)跳變時(shí)就啟動(dòng)檢測(cè)器,接收的值接收的值是是3 3次次連續(xù)采樣(第連續(xù)采樣(第7 7、8 8、9 9個(gè)脈沖時(shí)采樣)取個(gè)脈沖時(shí)采樣)取兩次相同兩次相同的值的值,以確認(rèn)起始位(負(fù)跳變)的開始,較好地消除干擾引起的影響。以確認(rèn)起始位(負(fù)跳變)的開始,較好地消除干擾引起的影響。33 圖圖7-12 方式方式1接收時(shí)序接收時(shí)序34 當(dāng)起始位有效起始位有效時(shí),開始接收一幀信息
23、。每一位數(shù)據(jù)都進(jìn)行3次連續(xù)采樣次連續(xù)采樣(第7、8、9個(gè)脈沖采樣),接收的值是3次采樣中次采樣中至少至少兩次兩次相同的值相同的值。當(dāng)一幀數(shù)據(jù)接收完畢后接收完畢后,同時(shí)滿足以下兩個(gè)條件,接收才有效。 (1)RI=0,即上一幀數(shù)據(jù)接收完成時(shí),RI = 1發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明說明“接收接收SBUF”已空。已空。 (2)SM2=0或收到的停止位或收到的停止位 = 1(方式1時(shí),停止位已進(jìn)入RB8),則將接收到的數(shù)據(jù)裝入SBUF和RB8(裝入的是停止位),且中斷標(biāo)志RI置“1”。 若不同時(shí)滿足兩個(gè)條件,收的數(shù)據(jù)不能裝入SBUF,該幀數(shù)據(jù)將丟棄。357.2.3 方式方式2
24、 方式2和方式3,9位異步通信接口。每幀數(shù)據(jù)為每幀數(shù)據(jù)為11位位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控為1或0的第9位數(shù)據(jù)和1位停止位。方式2、方式3幀格式如圖圖7-13。 圖7-13 方式2、方式3的幀格式方式方式2波特率波特率 = fosc36SMOD2641方式方式2發(fā)送發(fā)送 發(fā)送前,先根據(jù)協(xié)議由軟件設(shè)置先根據(jù)協(xié)議由軟件設(shè)置TB8(如奇偶校驗(yàn)位或多機(jī)通信的地址/數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫入SBUF,即啟動(dòng)發(fā)送。TB8自動(dòng)裝入自動(dòng)裝入第9位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使TI位置“1”。 發(fā)送時(shí)序如圖7-14。 圖圖7-14 方式方式2和方式和方式3發(fā)送時(shí)序發(fā)送時(shí)序372方
25、式方式2接收接收 SM0、SM1=10,且,且REN=1時(shí),方式時(shí),方式2接收。數(shù)據(jù)由接收。數(shù)據(jù)由RXD端端輸入,接收輸入,接收11位信息。當(dāng)位檢測(cè)邏輯采樣到位信息。當(dāng)位檢測(cè)邏輯采樣到RXD的的負(fù)跳變負(fù)跳變,判斷起始位有效,便開始接收一幀信息。在接收完第判斷起始位有效,便開始接收一幀信息。在接收完第9位數(shù)位數(shù)據(jù)后,據(jù)后,需滿足以下兩個(gè)條件,需滿足以下兩個(gè)條件,才能將接收到的數(shù)據(jù)送入才能將接收到的數(shù)據(jù)送入SBUF(接收緩沖器)。(接收緩沖器)。 (1)RI=0,意味著接收緩沖器為空。,意味著接收緩沖器為空。 (2)SM2=0或接收到的第或接收到的第9位數(shù)據(jù)位位數(shù)據(jù)位RB8=1。 當(dāng)滿足上述兩個(gè)條
26、件時(shí),收到的數(shù)據(jù)送SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,且RI置“1”。若不滿足這兩個(gè)若不滿足這兩個(gè)條件條件,接收的信息將被丟棄。38串行口方式2和方式3接收時(shí)序接收時(shí)序如圖7-15。 圖圖7-15 方式方式2和方式和方式3接收時(shí)序接收時(shí)序397.2.4 方式方式3 SM0、SM1=11時(shí),方式3。為波特率可變的9位異步通信方式,除了波特率外,方式3和方式2相同。方式3發(fā)送和接收時(shí)序如圖7-11和圖7-12所示。方式方式3波特率波特率 = 定時(shí)器T1的溢出率40SMOD2327.3 多機(jī)通信多機(jī)通信 多個(gè)單片機(jī)可利用串口進(jìn)行多機(jī)通信,常采用圖圖7-16的主主從式結(jié)構(gòu)從式結(jié)構(gòu)。系統(tǒng)中1個(gè)
27、主機(jī)(單片機(jī)或其他有串行接口的微機(jī))和多個(gè)單片機(jī)組成的從機(jī)系統(tǒng)。主機(jī)的主機(jī)的RXD與所有從機(jī)與所有從機(jī)的的TXD端相連端相連,TXD與所有從機(jī)的RXD端相連。從機(jī)地址從機(jī)地址分別為01H、02H和03H。 圖圖7-16 多機(jī)通信系統(tǒng)示意圖多機(jī)通信系統(tǒng)示意圖41 主從式主從式只有一個(gè)主機(jī),其余全是從機(jī)。主機(jī)主機(jī)發(fā)送的信息可發(fā)送的信息可以以被所有從機(jī)接收被所有從機(jī)接收,任何一個(gè)從機(jī)發(fā)送的信息,只能由任何一個(gè)從機(jī)發(fā)送的信息,只能由主機(jī)主機(jī)接收。從機(jī)和從機(jī)之間接收。從機(jī)和從機(jī)之間不能進(jìn)行直接通信,只能經(jīng)主機(jī)只能經(jīng)主機(jī)才能實(shí)現(xiàn)。 多機(jī)通信的工作原理:多機(jī)通信的工作原理: 要保證主機(jī)與與所選擇的從機(jī)通信,
28、須保證串口有識(shí)別功能串口有識(shí)別功能。SCON中的SM2位位就是為滿足這一條件設(shè)置的多機(jī)通信控制多機(jī)通信控制位位。其工作原理是在串行口以方式2(或方式3)接收時(shí),若若SM2=1,則表示進(jìn)行多機(jī)通信,可能以下兩種情況兩種情況:42 (1)從機(jī)接收到的主機(jī)發(fā)來的第9位數(shù)據(jù)RB8=1時(shí),前前8位數(shù)據(jù)才裝入位數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志置中斷標(biāo)志RI = 1,向CPU發(fā)出中斷請(qǐng)求。 在中斷服務(wù)程序中,從機(jī)把接收到的SBUF中的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)中。 (2)如果從機(jī)接收到的第)如果從機(jī)接收到的第9位數(shù)據(jù)位數(shù)據(jù)RB8=0時(shí),則不產(chǎn)生中斷標(biāo)志RI=1,不引起中斷不引起中斷,從機(jī)不接收主機(jī)發(fā)來的數(shù)據(jù)。 若若
29、SM2 = 0,則接收的第9位數(shù)據(jù)不論是0還是1,從機(jī)都將產(chǎn)生RI = 1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。應(yīng)用這一特性,可實(shí)現(xiàn)多機(jī)通信。多機(jī)通信的工作過程:多機(jī)通信的工作過程:(1)各從機(jī)從機(jī)初始初始化程序允許從機(jī)串口中斷,將串口編程為方式2或方式3接收,即9位異步通信方式,且SM2和和REN位位置置“1”,使從機(jī)處于多機(jī)通信且只接收地址幀只接收地址幀的狀態(tài)。(2)在主機(jī)和某從機(jī)通信之前主機(jī)和某從機(jī)通信之前,先將從機(jī)地址(即準(zhǔn)備先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各個(gè)從機(jī)接收數(shù)據(jù)的從機(jī))發(fā)送給各個(gè)從機(jī),接著才傳送數(shù)據(jù)(或命令),主機(jī)發(fā)出的地址幀信息的第9位為1,數(shù)據(jù)(或命令)幀的第
30、9位為0。當(dāng)主機(jī)向各從機(jī)發(fā)送地址幀時(shí),各從機(jī)的串行口接收到的第9位信息RB8為1,且由于各從機(jī)的SM2=1,44則則RIRI置置“1 1”,各從機(jī)各從機(jī)響應(yīng)中斷響應(yīng)中斷,在中斷服務(wù)子程序中,在中斷服務(wù)子程序中,判判斷主機(jī)送來的地址是否和本機(jī)地址相符合,若為本機(jī)地址,斷主機(jī)送來的地址是否和本機(jī)地址相符合,若為本機(jī)地址,則該從機(jī)則該從機(jī)SM2SM2位清位清“0 0”,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若地地址不相符址不相符,則,則保持保持SM2 = 1SM2 = 1。 (3 3)接著主機(jī)發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第接著主機(jī)發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第9 9位為位為0 0
31、。此時(shí)各從機(jī)接收到的。此時(shí)各從機(jī)接收到的RB8=0RB8=0。 只有與前面只有與前面地址相符合地址相符合的從機(jī)(即的從機(jī)(即SM2SM2位已清位已清“0 0”的從機(jī))的從機(jī))才能才能激活中斷標(biāo)志位激活中斷標(biāo)志位RIRI,從而進(jìn)入中斷服務(wù)程序,接收主機(jī),從而進(jìn)入中斷服務(wù)程序,接收主機(jī)發(fā)來的數(shù)據(jù)(或命令);發(fā)來的數(shù)據(jù)(或命令); 與主機(jī)發(fā)來的與主機(jī)發(fā)來的地址不相符地址不相符的從機(jī),由于的從機(jī),由于SM2SM2保持為保持為1 1,又,又RB8 = 0RB8 = 0,因此,因此不能激活中斷標(biāo)志不能激活中斷標(biāo)志RIRI,就不能接受主機(jī),就不能接受主機(jī)45發(fā)來的數(shù)據(jù)幀。從而保證主機(jī)與從機(jī)間通信的正確性主機(jī)
32、與從機(jī)間通信的正確性。 此時(shí)主機(jī)與建立聯(lián)系的從機(jī)已經(jīng)設(shè)置為單機(jī)通信模式,即在整個(gè)通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第9位(即TB8位)為0,防止其他從機(jī)誤接收數(shù)據(jù)。 (4)結(jié)束數(shù)據(jù)通信并為下一次的多機(jī)通信做好準(zhǔn)備。)結(jié)束數(shù)據(jù)通信并為下一次的多機(jī)通信做好準(zhǔn)備。在多機(jī)系統(tǒng),每個(gè)從機(jī)都被賦予唯一的地址。例如,圖圖7-16三個(gè)從機(jī)的地址可設(shè)為:01H、02H、03H。 還要預(yù)留預(yù)留12個(gè)個(gè)“廣播地址廣播地址”,它是所有從機(jī)共有的地址,例如將“廣播地址”設(shè)為00H。當(dāng)主機(jī)與從機(jī)的數(shù)據(jù)當(dāng)主機(jī)與從機(jī)的數(shù)據(jù)通信結(jié)通信結(jié)束后束后,一定要將從機(jī),一定要將從機(jī)再設(shè)置為多機(jī)通信模式再設(shè)置為多機(jī)通信模式,以便進(jìn)行下一
33、次的多機(jī)通信。這時(shí)要求與主機(jī)正在進(jìn)行數(shù)據(jù)傳輸?shù)膹臋C(jī)須隨時(shí)注意,一一旦接收的數(shù)據(jù)第旦接收的數(shù)據(jù)第9位(位(RB8)為)為“1”,說明主機(jī)傳送的不再是數(shù)據(jù),而是地址,這個(gè)地址就有可能是可能是“廣播地址廣播地址”。當(dāng)收到收到“廣播地址廣播地址”后后,便將從機(jī)的通信模式再設(shè)置成多機(jī)模式,為下一次多機(jī)通信做好準(zhǔn)備。477.4 波特率的制定波特率的制定 串行通信,收、發(fā)雙方發(fā)送或接收的波特率必須一致。波特率必須一致。4種工作方式: 方式式0和方式和方式2的波特率是固定固定的; 方式方式1和方式和方式3的波特率是可變的可變的,由T1溢出率確定。7.4.1 波特率的定義波特率的定義 波特率的定義:波特率的定義
34、:串行口每秒鐘發(fā)送(或接收)的位數(shù)每秒鐘發(fā)送(或接收)的位數(shù)。設(shè)發(fā)送一位所需要的時(shí)間為T,則波特率為1/T。 定時(shí)器的不同工作方式,得到的波特率的范圍不一樣,這是由T1在不同工作方式下不同工作方式下計(jì)數(shù)位數(shù)的不同計(jì)數(shù)位數(shù)的不同所決定。487.4.2 定時(shí)器定時(shí)器T1產(chǎn)生波特率的計(jì)算產(chǎn)生波特率的計(jì)算和串行口的工作方式有關(guān)串行口的工作方式有關(guān)。(1)方式方式0時(shí),波特率固定為時(shí)鐘頻率固定為時(shí)鐘頻率fosc的的1/12,不受SMOD位值的影響。若fosc = 12 MHz,波特率1Mbit/s。(2)方式方式2時(shí),波特率僅與SMOD位的值有關(guān)。方式方式2波特率波特率 = fosc若fosc = 12
35、 MHz: SMOD = 0,波特率 = 187.5 kbit/s;SMOD = 1,波特率 = 375 kbit/s。(3)方式1或方式3定時(shí),常用T1作為波特率發(fā)生器,其關(guān)系式為49SMOD264波特率 = 定時(shí)器T1的溢出率 (7-1)由式(式(7-1)見,T1溢出率溢出率和SMOD的值的值共同決定波特率共同決定波特率。在實(shí)際設(shè)定波特率時(shí)實(shí)際設(shè)定波特率時(shí),T1常設(shè)置為方式2定時(shí)(自動(dòng)裝初值),即TL1作為8位計(jì)數(shù)器,TH1存放備用初值。這種方式操作方便,也避免因軟件重裝初值因軟件重裝初值帶來的定時(shí)誤差定時(shí)誤差。設(shè)定時(shí)器T1方式2的初值為X,則有定時(shí)器定時(shí)器T1的溢出率的溢出率 = (7-
36、2)50SMOD232osc/12256256fXX計(jì)數(shù)速率將式(7-2)代入式(7-1),則 波特率波特率 = (7-3)由式(7-3)可見,波特率波特率隨fosc、SMOD和初值和初值X而變化。實(shí)際使用時(shí),經(jīng)常根據(jù)已知波特率和時(shí)鐘頻率已知波特率和時(shí)鐘頻率fosc來計(jì)算計(jì)算T1的初值的初值X。為避免繁雜的初值計(jì)算,常用的波特率和初值常用的波特率和初值X間的關(guān)系常列成間的關(guān)系常列成表表7-2形式形式,供查用。51SMODosc23212(256)fX表7-2 用定時(shí)器T1產(chǎn)生的常用波特率52波 特 率foscSMOD位方式初值X62.5kbit/s12 MHz12FFH19.2kbit/s11
37、.0592 MHz12FDH9.6kbit/s11.0592 MHz02FDH4.8kbit/s11.0592 MHz02FAH2.4kbit/s11.0592 MHz02F4H1.2kbit/s11.0592 MHz02E8H表表7-2有兩點(diǎn)需要注意:有兩點(diǎn)需要注意:(1)在使用的時(shí)鐘振蕩頻率fosc為12MHz或或6MHz時(shí),將初值X和fosc帶入式(7-3)中計(jì)算出的波特率有一定誤差有一定誤差。消除誤差可采用時(shí)鐘頻率時(shí)鐘頻率11.0592MHz。(2)如果選用很低的波特率很低的波特率,如選為55,可將定時(shí)器T1設(shè)為方式1定時(shí)。但這種情況,T1溢出時(shí),需在中斷服務(wù)程序中重新裝入初值。中斷響
38、應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。53【例例7-3】 若時(shí)鐘頻率為11.0592MHz,選用T1的方式方式2定時(shí)定時(shí)作為波特率發(fā)生器,波特率為波特率為2 400bit/s,求初值。 設(shè)T1為方式2定時(shí),選SMOD = 0。 將已知條件帶入式(7-3)中波特率波特率 = = 2400從中解得:X = 244 = F4H。 只要把F4H裝入TH1和TL1,則T1產(chǎn)生的波特率為2 400bit/s。也可直接從表7-2中查到。 這里時(shí)鐘振蕩頻率選為11.0592MHz,就可使初值為整數(shù)初值為整數(shù),從而產(chǎn)生精確的波特率。54SMODosc23212(256)fX7
39、.5 串行通信的應(yīng)用設(shè)計(jì)串行通信的應(yīng)用設(shè)計(jì) 串行通信接口設(shè)計(jì)時(shí),需考慮如下問題。串行通信接口設(shè)計(jì)時(shí),需考慮如下問題。 (1)首先確定串行通信雙方的數(shù)傳速率和通信距離;)首先確定串行通信雙方的數(shù)傳速率和通信距離; (2)由串行通信的數(shù)傳速率和通信距離確定采用的串行通)由串行通信的數(shù)傳速率和通信距離確定采用的串行通信接口標(biāo)準(zhǔn);信接口標(biāo)準(zhǔn); (3)注意串行通信的通信線選擇,一般選用雙絞線較好,)注意串行通信的通信線選擇,一般選用雙絞線較好,并根據(jù)傳輸?shù)木嚯x選擇纖芯的直徑。如空間干擾較多,還要并根據(jù)傳輸?shù)木嚯x選擇纖芯的直徑。如空間干擾較多,還要選擇帶有屏蔽層的雙絞線。選擇帶有屏蔽層的雙絞線。 下面首先
40、介紹有關(guān)串行通信的接口設(shè)計(jì)問題。下面首先介紹有關(guān)串行通信的接口設(shè)計(jì)問題。 557.5.1 各種串行通信接口標(biāo)準(zhǔn)各種串行通信接口標(biāo)準(zhǔn) AT89S51單串口的輸入、輸出均為單串口的輸入、輸出均為TTL電平。以電平。以TTL電平電平串行傳輸數(shù)據(jù)的方式,抗干擾性差,傳輸距離短,速率低。串行傳輸數(shù)據(jù)的方式,抗干擾性差,傳輸距離短,速率低。為了提高串行通信可靠性,增大串行通信的距離和提高傳輸為了提高串行通信可靠性,增大串行通信的距離和提高傳輸速率,一般都采用標(biāo)準(zhǔn)串行接口,如速率,一般都采用標(biāo)準(zhǔn)串行接口,如RS-232、RS-422A、RS-485等。等。 根據(jù)根據(jù)AT89S51單片機(jī)的雙機(jī)通信距離和抗干擾
41、性的實(shí)際要單片機(jī)的雙機(jī)通信距離和抗干擾性的實(shí)際要求,可選擇求,可選擇TTL電平傳輸,或選擇電平傳輸,或選擇RS-232C、RS-422A、RS-485串行接口進(jìn)行串行數(shù)據(jù)傳輸。串行接口進(jìn)行串行數(shù)據(jù)傳輸。 561TTL電平通信接口電平通信接口 如兩個(gè)如兩個(gè)AT89S51單片機(jī)相距在單片機(jī)相距在1.5m內(nèi)內(nèi),它們的串口可直,它們的串口可直接相連,接口電路如接相連,接口電路如圖圖7-9所示。甲機(jī)的所示。甲機(jī)的RXD與乙機(jī)的與乙機(jī)的TXD端相連,乙機(jī)的端相連,乙機(jī)的RXD與甲機(jī)的與甲機(jī)的TXD端相連,從而直接用端相連,從而直接用TTL電平傳輸方法來實(shí)現(xiàn)雙機(jī)通信。電平傳輸方法來實(shí)現(xiàn)雙機(jī)通信。2RS-23
42、2C雙機(jī)通信接口雙機(jī)通信接口 如果雙機(jī)通信距離在如果雙機(jī)通信距離在1.5m 15m之間之間時(shí),可利用時(shí),可利用RS-232C標(biāo)準(zhǔn)接口實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信,接口電路如標(biāo)準(zhǔn)接口實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的雙機(jī)通信,接口電路如圖圖7-17所示。所示。圖圖7-17 RS-232C雙機(jī)通信接口電路雙機(jī)通信接口電路583RS-422A雙機(jī)通信接口雙機(jī)通信接口 RS-232C缺點(diǎn)缺點(diǎn):傳輸速率低、通訊距離短、接口處信號(hào)容易產(chǎn)生串?dāng)_等。國(guó)際上又推出了RS-422A標(biāo)準(zhǔn)。與RS-232C的主要區(qū)別主要區(qū)別是,收發(fā)雙方的信號(hào)地收發(fā)雙方的信號(hào)地不再共地不再共地,RS-422A采用了平衡驅(qū)動(dòng)平衡驅(qū)動(dòng)和和差分接收差分接收的方法。用于數(shù)
43、據(jù)傳輸是兩條平衡導(dǎo)兩條平衡導(dǎo)線線,這相當(dāng)于兩個(gè)單端驅(qū)動(dòng)器。 兩條線上傳輸?shù)男盘?hào)電平,當(dāng)一個(gè)表示邏輯“1”時(shí),另一條一定為邏輯“0”。若傳輸中,信號(hào)中混入信號(hào)中混入干擾干擾和和噪聲噪聲(共模形式),(共模形式),由于差分接收器的作用,就能識(shí)別有用信號(hào)并正確接收傳輸?shù)男畔?,并使干擾和噪聲相互抵消。59RS-422A能在長(zhǎng)距離、高速率長(zhǎng)距離、高速率下傳輸。最大傳輸率為最大傳輸率為10Mbit/s,電纜允許長(zhǎng)度為長(zhǎng)度為12m,如采用較低傳輸速率時(shí)采用較低傳輸速率時(shí),最大傳輸距離可達(dá)1219m。為了增加通信距離,可采用光電隔離,利用RS-422A標(biāo)準(zhǔn)進(jìn)行雙機(jī)通信的接口電路如圖圖7-18。圖中,每個(gè)通道的
44、接收端都接有接有3個(gè)電阻個(gè)電阻R1、R2和和R3,其中R1為傳輸線的匹配電阻,取值范圍在501k,其他兩個(gè)電阻是為了解決第一個(gè)數(shù)據(jù)的誤碼而設(shè)置的匹配電阻。為了起到隔離、抗干擾的作用,圖圖7-187-18中須使用兩組獨(dú)立的兩組獨(dú)立的電源電源。圖中的SN75174、SN75175是TTL電平到RS-422A電平與RS-422A電平到TTL電平的電平轉(zhuǎn)換芯片。60圖7-18 RS-422A雙機(jī)通信接口電路614RS-485雙機(jī)通信接口雙機(jī)通信接口 RS-422A通信需四芯傳輸線,長(zhǎng)距離通信很不經(jīng)濟(jì),故在工業(yè)現(xiàn)場(chǎng),通常采用雙絞線傳輸?shù)碾p絞線傳輸?shù)腞S-485串行通信接口串行通信接口,很容易實(shí)現(xiàn)多機(jī)通信
45、。 RS-485是RS-422A的變型,它與與RS-422A的區(qū)別的區(qū)別:RS-422A為全雙工為全雙工,采用兩對(duì)平衡差分信號(hào)線;RS-485為半雙為半雙工工,采用一對(duì)平衡差分信號(hào)線一對(duì)平衡差分信號(hào)線。 RS-485對(duì)于多站互連是十分方便的對(duì)于多站互連是十分方便的,容易實(shí)現(xiàn)多機(jī)通信。RS-485允許最多并聯(lián)并聯(lián)32臺(tái)驅(qū)動(dòng)器和臺(tái)驅(qū)動(dòng)器和32臺(tái)接收器臺(tái)接收器。圖圖7-19為RS-485通信接口電路。與RS-422A一樣,最大傳輸距離約1219m,最大傳輸速率為最大傳輸速率為10Mbit/s。6263圖圖7-19 RS-485雙機(jī)通信接口電路雙機(jī)通信接口電路 通信線路要采用通信線路要采用平衡雙絞線平
46、衡雙絞線。平衡雙絞線的。平衡雙絞線的長(zhǎng)度與傳輸長(zhǎng)度與傳輸速率速率成反比,在成反比,在100kbit/s速率以下,才可能使用規(guī)定的最長(zhǎng)速率以下,才可能使用規(guī)定的最長(zhǎng)電纜。電纜。 只有在只有在很短的距離很短的距離下才能下才能獲得最大傳輸速率獲得最大傳輸速率。一般。一般100m長(zhǎng)雙絞線最大傳輸速率僅為長(zhǎng)雙絞線最大傳輸速率僅為1Mbit/s。 圖圖7-19,RS-485以雙向、半雙工方式來實(shí)現(xiàn)雙機(jī)通信。以雙向、半雙工方式來實(shí)現(xiàn)雙機(jī)通信。在在AT89S51單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)發(fā)送或接收數(shù)據(jù)前發(fā)送或接收數(shù)據(jù)前,應(yīng),應(yīng)先將先將SN75176的的發(fā)送門發(fā)送門或或接收門接收門打開打開,當(dāng),當(dāng)P1.0=1時(shí),發(fā)送
47、門打開,接收門時(shí),發(fā)送門打開,接收門關(guān)閉;當(dāng)關(guān)閉;當(dāng)P1.0=0時(shí),接收門打開,發(fā)送門關(guān)閉。時(shí),接收門打開,發(fā)送門關(guān)閉。 圖圖7-197-19中的中的SN75176SN75176芯片芯片內(nèi)集成了一個(gè)差分驅(qū)動(dòng)器和一個(gè)內(nèi)集成了一個(gè)差分驅(qū)動(dòng)器和一個(gè)差分接收器,且兼有差分接收器,且兼有TTLTTL電平到電平到RS-485RS-485電平、電平、RS-485RS-485電平到電平到TTLTTL電平的轉(zhuǎn)換功能。電平的轉(zhuǎn)換功能。 此外常用的此外常用的RS-485RS-485接口芯片還有接口芯片還有MAX485MAX485。7.5.2 7.5.2 方式方式1 1的應(yīng)用的應(yīng)用 【例例7-47-4】如如圖圖7-2
48、07-20所示,甲、乙雙機(jī)串行通信,雙機(jī)的所示,甲、乙雙機(jī)串行通信,雙機(jī)的RXDRXD和和TXDTXD相互交叉相連,甲相互交叉相連,甲機(jī)的機(jī)的P1口接口接8個(gè)開關(guān),乙機(jī)的個(gè)開關(guān),乙機(jī)的P1口接口接8個(gè)發(fā)光二極管。甲機(jī)設(shè)置為只發(fā)不收的單工方式。要個(gè)發(fā)光二極管。甲機(jī)設(shè)置為只發(fā)不收的單工方式。要求甲機(jī)讀入求甲機(jī)讀入P1口的口的8個(gè)開關(guān)的狀態(tài)后,通過串行口發(fā)送到乙個(gè)開關(guān)的狀態(tài)后,通過串行口發(fā)送到乙機(jī),乙機(jī)將接收到的甲機(jī)的機(jī),乙機(jī)將接收到的甲機(jī)的8個(gè)開關(guān)的狀態(tài)數(shù)據(jù)送入個(gè)開關(guān)的狀態(tài)數(shù)據(jù)送入P1口,口,6566圖圖7-20 單片機(jī)方式單片機(jī)方式1雙機(jī)通信的連接雙機(jī)通信的連接由由P1口的口的8個(gè)發(fā)光二極管來顯
49、示個(gè)發(fā)光二極管來顯示8個(gè)開關(guān)的狀態(tài)。雙方晶振個(gè)開關(guān)的狀態(tài)。雙方晶振均采用均采用11.0592MHz。參考程序如下。參考程序如下。 /*甲機(jī)串行發(fā)送甲機(jī)串行發(fā)送*/#include #define uchar unsigned char#define uint unsigned intvoid main()uchar temp=0;TMOD=0 x20;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T1為方式為方式2*/TH1=0 xfd;/*波特率波特率9600*/TL1=0 xfd;SCON=0 x40; /*方式方式1只發(fā)送,不接收只發(fā)送,不接收*/PCON=0 x00; /*串行口初始化為方式串行口初始化為方
50、式0*/67TR1=1;/*啟動(dòng)啟動(dòng)T1*/P1=0 xff;/* P1口為輸入口為輸入*/while(1)temp=P1;/*讀入讀入P1口開關(guān)的狀態(tài)數(shù)據(jù)口開關(guān)的狀態(tài)數(shù)據(jù)*/SBUF=temp; /*數(shù)據(jù)送串行口發(fā)送數(shù)據(jù)送串行口發(fā)送*/while(TI=0);/*如果如果TI=0,未發(fā)送完,循環(huán)等待,未發(fā)送完,循環(huán)等待*/TI=0;/*已發(fā)送完,再把已發(fā)送完,再把TI清清0*/*乙機(jī)串行接收乙機(jī)串行接收*/#include #define uchar unsigned char#define uint unsigned intvoid main( )uchar temp=0;TMOD=0 x
51、20;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T1為方式為方式2*/TH1=0 xfd;/*波特率波特率9600*/TL1=0 xfd;SCON = 0 x50; /*設(shè)置串口為方式設(shè)置串口為方式1接收,接收,REN=1*/PCON = 0 x00; /*SMOD=0*/TR1=1;/*啟動(dòng)啟動(dòng)T1*/while(1)while(RI=0); /* 若若RI為為0,未接收到數(shù)據(jù),未接收到數(shù)據(jù)*/RI=0;/* 接收到數(shù)據(jù),則把接收到數(shù)據(jù),則把RI清清0*/temp=SBUF; /* 讀取數(shù)據(jù)存入讀取數(shù)據(jù)存入temp中中*/P1=temp;/* 接收的數(shù)據(jù)送接收的數(shù)據(jù)送P1口控制口控制8個(gè)個(gè)LED的亮與滅的亮與
52、滅*/【例例7- 5】 如如圖圖7-9所示,甲乙兩機(jī)以方式所示,甲乙兩機(jī)以方式1進(jìn)行串行通信,進(jìn)行串行通信,其中甲機(jī)發(fā)送信息,乙機(jī)接收信息,雙方晶振頻率均為其中甲機(jī)發(fā)送信息,乙機(jī)接收信息,雙方晶振頻率均為11.0592MHz,波特率為,波特率為2400bps。 當(dāng)串行通信開始時(shí),雙方約定,甲機(jī)先發(fā)送信號(hào)當(dāng)串行通信開始時(shí),雙方約定,甲機(jī)先發(fā)送信號(hào)AAH,乙機(jī)收到后應(yīng)答乙機(jī)收到后應(yīng)答B(yǎng)BH,表示同意接收。甲機(jī)收到,表示同意接收。甲機(jī)收到BBH后,后,即可發(fā)送數(shù)據(jù)。如果乙機(jī)發(fā)現(xiàn)數(shù)據(jù)出錯(cuò),就向甲機(jī)發(fā)送即可發(fā)送數(shù)據(jù)。如果乙機(jī)發(fā)現(xiàn)數(shù)據(jù)出錯(cuò),就向甲機(jī)發(fā)送FFH,甲機(jī)收到,甲機(jī)收到FFH后,重新發(fā)送數(shù)據(jù)給乙機(jī)
53、。后,重新發(fā)送數(shù)據(jù)給乙機(jī)。 設(shè)發(fā)送的字節(jié)塊的數(shù)據(jù)長(zhǎng)度為設(shè)發(fā)送的字節(jié)塊的數(shù)據(jù)長(zhǎng)度為10字節(jié),數(shù)據(jù)緩沖區(qū)為字節(jié),數(shù)據(jù)緩沖區(qū)為buf,數(shù)據(jù)發(fā)送完畢要立即發(fā)送校驗(yàn)和,進(jìn)行數(shù)據(jù)發(fā)送準(zhǔn)確性驗(yàn),數(shù)據(jù)發(fā)送完畢要立即發(fā)送校驗(yàn)和,進(jìn)行數(shù)據(jù)發(fā)送準(zhǔn)確性驗(yàn)證。乙機(jī)接收到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)緩沖區(qū)證。乙機(jī)接收到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)緩沖區(qū)buf,收到一個(gè)數(shù),收到一個(gè)數(shù)據(jù)塊后,再接收甲機(jī)發(fā)來的校驗(yàn)和,并將其與乙機(jī)求得的校據(jù)塊后,再接收甲機(jī)發(fā)來的校驗(yàn)和,并將其與乙機(jī)求得的校驗(yàn)和比較:若相等,說明接收正確,乙機(jī)回答驗(yàn)和比較:若相等,說明接收正確,乙機(jī)回答00H;若不等;若不等,說明接收不正確,乙機(jī)回答,說明接收不正確,乙機(jī)回答FFH;請(qǐng)
54、求甲機(jī)重新發(fā)送。;請(qǐng)求甲機(jī)重新發(fā)送。 70選擇定時(shí)器選擇定時(shí)器T1為方式為方式2定時(shí),波特率不倍增,即定時(shí),波特率不倍增,即SMOD=0。查。查表表7-2,則寫入,則寫入T1的初值應(yīng)為的初值應(yīng)為F4H。以下為雙機(jī)通信程序,該程序可以在甲乙兩機(jī)中運(yùn)行,不同以下為雙機(jī)通信程序,該程序可以在甲乙兩機(jī)中運(yùn)行,不同的是在程序運(yùn)行之前,要人為地選擇的是在程序運(yùn)行之前,要人為地選擇TR。若選擇。若選擇TR=0,表示該,表示該機(jī)為發(fā)送方;若選擇機(jī)為發(fā)送方;若選擇TR=1,表示該機(jī)是接收方。程序根據(jù),表示該機(jī)是接收方。程序根據(jù)TR的的設(shè)置,利用發(fā)送函數(shù)設(shè)置,利用發(fā)送函數(shù)send( )和接收函數(shù)和接收函數(shù)rece
55、ive( )分別實(shí)現(xiàn)發(fā)送分別實(shí)現(xiàn)發(fā)送和接收功能。和接收功能。 71#include #define uchar unsigned char#define TR 1/* 接收、發(fā)送的區(qū)別值,接收、發(fā)送的區(qū)別值,TR=0,為發(fā)送,為發(fā)送*/uchar idata buf10uchar sum; /* 校驗(yàn)和校驗(yàn)和*/*串口初始化函數(shù)串口初始化函數(shù)*/void init(void) TMOD=0 x20;/*T1方式方式2定時(shí)定時(shí)*/TH1=0 xf4;/*波特率波特率2400*/TL1=0 xf4;PCON=0 x00;/*SMOD=0*/ TR1=1;/*啟動(dòng)啟動(dòng)T1*/ SCON=0 x50;
56、 /*串行口方式串行口方式1,REN=1允許接收允許接收*/72/*主程序主程序*/void main(void) init ( ); if(TR=0) /* TR=0,為發(fā)送,為發(fā)送*/send( );/*調(diào)用發(fā)送函數(shù)調(diào)用發(fā)送函數(shù)*/elsereceive( );/*調(diào)用接收函數(shù)調(diào)用接收函數(shù)*/*發(fā)送函數(shù)發(fā)送函數(shù)*/void send(void )uchar i;doSBUF=0 xAA;/*發(fā)送聯(lián)絡(luò)信號(hào)發(fā)送聯(lián)絡(luò)信號(hào)*/while(TI=0);/*等待數(shù)據(jù)發(fā)送完畢等待數(shù)據(jù)發(fā)送完畢*/TI=0;while(RI=0);/*等待乙機(jī)應(yīng)答等待乙機(jī)應(yīng)答*/RI=0;73 while(SBUF 0 x
57、BB !=0);/*乙機(jī)未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò)乙機(jī)未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò)*/do sum=0;/*校驗(yàn)和變量清校驗(yàn)和變量清0*/for(i=0; i16; i+) sum+ =bufi;/*求校驗(yàn)和求校驗(yàn)和*/while(TI=0);TI=0;SBUF=sumwhile (TI=0); TI=0;while (RI=0); RI=0;while (SBUF!=0); /*出錯(cuò),重新發(fā)送出錯(cuò),重新發(fā)送*/74/*接收函數(shù)接收函數(shù)*/void receive()() uchar i;dowhile(RI=0); RI=0;while(SBUF0 xAA !=0);/*判甲機(jī)是否發(fā)出請(qǐng)求判甲機(jī)是否發(fā)出請(qǐng)求*
58、/SBUF=0 xBB; /*發(fā)送應(yīng)答信號(hào)發(fā)送應(yīng)答信號(hào)BBH*/while (TI=0); /*等待發(fā)送結(jié)束等待發(fā)送結(jié)束*/TI=0;while (1) sum=0;/*清校驗(yàn)和清校驗(yàn)和*/for(i=0; i16; i+)while(RI=0);RI=0;/*接收校驗(yàn)和接收校驗(yàn)和*/bufi= SBUF; /*接收一個(gè)數(shù)據(jù)接收一個(gè)數(shù)據(jù)*/sum+=bufi; /*求校驗(yàn)和求校驗(yàn)和*/75while(RI=0);RI=0;/*接收甲機(jī)的校驗(yàn)和*/if(SBUFsum)=0);/*比較校驗(yàn)和*/SBUF=0 x00;break; /*校驗(yàn)和相等,則發(fā)00H*/elseSBUF=0 xFF;/*出
59、錯(cuò)發(fā)FFH,重新接收*/while(TI=0);TI=0;7.5.3 方式方式2和方式和方式3的應(yīng)用的應(yīng)用 方式方式2和方式和方式1兩點(diǎn)不同。方式兩點(diǎn)不同。方式2收收/發(fā)發(fā)11位信息,第位信息,第0位為起位為起始位,第始位,第18位為數(shù)據(jù)位,第位為數(shù)據(jù)位,第9位是程控位,可由用戶置位是程控位,可由用戶置TB8決定,第決定,第10位是停止位位是停止位1,這是一個(gè)不同點(diǎn)。另一不同點(diǎn)是方,這是一個(gè)不同點(diǎn)。另一不同點(diǎn)是方式式2波特率變化范圍比方式波特率變化范圍比方式1小,方式小,方式2波特率波特率=振蕩器頻率振蕩器頻率/n。76 當(dāng)當(dāng)SMOD = 0時(shí),時(shí),n = 64。 當(dāng)當(dāng)SMOD = 1時(shí),時(shí),
60、n = 32。 除波特率的差別外,方式除波特率的差別外,方式2的使用和方式的使用和方式3是一樣的,所以是一樣的,所以下面介紹的方式下面介紹的方式3應(yīng)用編程,也適用于方式應(yīng)用編程,也適用于方式2。 【例例7-6】甲乙兩個(gè)單片機(jī)進(jìn)行方式甲乙兩個(gè)單片機(jī)進(jìn)行方式3(或方式(或方式2)串行通)串行通訊。甲機(jī)將訊。甲機(jī)將8個(gè)流水燈控制數(shù)據(jù)發(fā)送給乙機(jī),乙機(jī)再利用該個(gè)流水燈控制數(shù)據(jù)發(fā)送給乙機(jī),乙機(jī)再利用該數(shù)據(jù)點(diǎn)亮其數(shù)據(jù)點(diǎn)亮其P1口的口的8個(gè)個(gè)LED。方式。方式3比方式比方式1多了一個(gè)可編程多了一個(gè)可編程位位TB8,該位一般作奇偶校驗(yàn)位。乙機(jī)接收到的,該位一般作奇偶校驗(yàn)位。乙機(jī)接收到的8位二進(jìn)制位二進(jìn)制數(shù)據(jù)有可
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園員工聘用合同
- 流通經(jīng)銷合同8篇
- 《無機(jī)化學(xué)》課程標(biāo)準(zhǔn)
- 出口賠償合同范本
- 個(gè)人英語學(xué)習(xí)計(jì)劃
- 三年級(jí)語文下冊(cè)工作總結(jié)
- 南車 合同范本
- 雙方合作生產(chǎn)經(jīng)營(yíng)合同范例
- 廚房工作人員勞務(wù)合同范本
- 會(huì)計(jì)記賬報(bào)稅合同范本
- GB/T 17421.2-2023機(jī)床檢驗(yàn)通則第2部分:數(shù)控軸線的定位精度和重復(fù)定位精度的確定
- 重慶市渝北區(qū)大灣鎮(zhèn)招錄村綜合服務(wù)專干模擬預(yù)測(cè)(共500題)筆試參考題庫+答案詳解
- 矢量分析和場(chǎng)論基礎(chǔ)
- 進(jìn)步粘滯流體阻尼器埋件的一次驗(yàn)收合格率
- 小升初面試英語自我介紹范文4篇
- 高職院校創(chuàng)新創(chuàng)業(yè)教育數(shù)字化轉(zhuǎn)型和改革研究
- 酒店住宿水單模板-可修改
- 合作公司變更函范文(必備6篇)
- 全國(guó)2017年10月自考00043經(jīng)濟(jì)法概論(財(cái)經(jīng)類)試題及答案
- 2023年山東力明科技職業(yè)學(xué)院?jiǎn)握忻嬖嚹M試題及答案解析
- 少兒美術(shù)繪本教案課件-3-6歲 《100層巴士》
評(píng)論
0/150
提交評(píng)論