




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章 AT89S51單片機(jī)的 串行口12全雙工異步串行口全雙工異步串行口并行通信并行通信U 并行通信和串行通信并行通信和串行通信串行通信串行通信數(shù)據(jù)的各位數(shù)據(jù)的各位同同時(shí)時(shí)傳送(接收)傳送(接收)數(shù)據(jù)的逐位數(shù)據(jù)的逐位分時(shí)分時(shí)傳送(接收)傳送(接收)U 異步通信和同步通信異步通信和同步通信異步通信(異步通信(Asynchronous Communication):):同步通信同步通信(Synchronous Communication):):同步通信是指通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)同步通信是指通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使收發(fā)雙方達(dá)到完全同步的一種通鐘的直接控制,使收發(fā)雙
2、方達(dá)到完全同步的一種通信方式。信方式。異步通信是指發(fā)送端和接收端使用各自的時(shí)鐘來(lái)控制異步通信是指發(fā)送端和接收端使用各自的時(shí)鐘來(lái)控制數(shù)據(jù)的發(fā)送和接收的一種通信方式。這兩個(gè)時(shí)鐘源彼數(shù)據(jù)的發(fā)送和接收的一種通信方式。這兩個(gè)時(shí)鐘源彼此獨(dú)立,無(wú)需嚴(yán)格同步。此獨(dú)立,無(wú)需嚴(yán)格同步。4 串行通信的串行通信的3 3種制式種制式: :單工(單工(simplexsimplex) 半雙工(半雙工(half duplexhalf duplex) 全雙工全雙工 (duplexduplex)概述:概述:可編程的全雙工異步串行口可編程的全雙工異步串行口 管腳:管腳:TXD(P3.1)、RXD(P3.0) 可同時(shí)發(fā)送、接收數(shù)據(jù)可
3、同時(shí)發(fā)送、接收數(shù)據(jù) 四種工作方式,幀格式有四種工作方式,幀格式有8位、位、10位、位、11位位 波特率(波特率(Baud rate)可設(shè)置)可設(shè)置 波特率波特率(比特率比特率):每秒鐘傳送二進(jìn)制數(shù)的位每秒鐘傳送二進(jìn)制數(shù)的位 數(shù),單位數(shù),單位b/s。8.1 8.1 串行口的結(jié)構(gòu)串行口的結(jié)構(gòu)6圖圖8-1 8-1 內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)PCONSCON7SBUFSBUF_ _串行口數(shù)據(jù)串行口數(shù)據(jù)緩沖器緩沖器兩個(gè)物理上獨(dú)立兩個(gè)物理上獨(dú)立的的接收、發(fā)送緩沖器接收、發(fā)送緩沖器發(fā)送緩沖器發(fā)送緩沖器只寫(xiě)不能讀。只寫(xiě)不能讀。接收緩沖器接收緩沖器只讀不能寫(xiě)。只讀不能寫(xiě)。兩個(gè)緩沖器兩個(gè)緩沖器共用一個(gè)字節(jié)地址共用一個(gè)字節(jié)地
4、址(99H99H)。)。 SCON SCON _串行口控制串行口控制寄存器(寄存器(98H98H), ,可位尋址可位尋址 PCON _PCON _電源電源控制控制寄存器(寄存器(87H87H), ,不可位尋址不可位尋址8.1.1 串行口控制寄存器串行口控制寄存器SCON接收中斷標(biāo)志接收中斷標(biāo)志發(fā)送中斷標(biāo)志發(fā)送中斷標(biāo)志發(fā)送中斷標(biāo)志發(fā)送中斷標(biāo)志接收的第接收的第9 9位數(shù)據(jù)位數(shù)據(jù)發(fā)送的第發(fā)送的第9 9位數(shù)據(jù)位數(shù)據(jù)允許串行接收位允許串行接收位多機(jī)通信控制位多機(jī)通信控制位允許串行接收位允許串行接收位工作方式選擇位工作方式選擇位9SM0SM1工作工作方式方式功功 能能波波 特特 率率0008位同步移位寄存
5、器(擴(kuò)展位同步移位寄存器(擴(kuò)展IO口)口)fosc/1201110位異步收發(fā)(位異步收發(fā)(8位數(shù)據(jù))位數(shù)據(jù))可變,由定時(shí)器可變,由定時(shí)器1溢溢出率控制出率控制10211位異步收發(fā)(位異步收發(fā)(9位數(shù)據(jù))位數(shù)據(jù))fosc/64或或fosc/3211311位異步收發(fā)(位異步收發(fā)(9位數(shù)據(jù))位數(shù)據(jù))可變,由定時(shí)器可變,由定時(shí)器1溢溢出率控制出率控制表表8-18-1串行口的工作方式串行口的工作方式8.1.2 8.1.2 電源控制及波特率選擇寄存器電源控制及波特率選擇寄存器PCONPCON10當(dāng)SMOD=1SMOD=1時(shí),要比SMOD=0SMOD=0時(shí)波特率加倍,所以也稱SMOD位為波特率倍增位波特率倍
6、增位。例如例如,方式,方式1 1的波特率計(jì)算公式:的波特率計(jì)算公式: 方式方式1 1波特率波特率 = = 定時(shí)器定時(shí)器T1T1的溢出率的溢出率SMOD2328.2 8.2 串行口的串行口的4 4種工作方式種工作方式8.2.1 8.2.1 方式方式0 0同步移位寄存器輸入同步移位寄存器輸入/ /輸出方式輸出方式。該方式并。該方式并不用于兩個(gè)不用于兩個(gè)AT89S51AT89S51單片機(jī)之間的異步串行通信單片機(jī)之間的異步串行通信,而是,而是用于串行口外接用于串行口外接移位寄存器移位寄存器,擴(kuò)展并行,擴(kuò)展并行I/OI/O口???。8 8位數(shù)據(jù)為一幀,位數(shù)據(jù)為一幀,無(wú)無(wú)起始位起始位和和停止位停止位,先發(fā)送
7、或接收最低,先發(fā)送或接收最低位。波特率為位。波特率為f foscosc/12/12。幀格式如。幀格式如圖圖8-48-4。圖圖8-4 8-4 方式方式0 0的幀格式的幀格式111 1方式方式0 0輸出輸出(1 1)方式)方式0 0輸出的工作原理輸出的工作原理當(dāng)執(zhí)行一條將數(shù)據(jù)當(dāng)執(zhí)行一條將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器寫(xiě)入發(fā)送緩沖器SBUFSBUF指令指令時(shí),時(shí),產(chǎn)生一個(gè)產(chǎn)生一個(gè)正脈沖正脈沖,串行口開(kāi)始把,串行口開(kāi)始把SBUFSBUF中的中的8 8位數(shù)據(jù)以位數(shù)據(jù)以f foscosc/12/12的的固定波固定波特率特率從從RXDRXD引腳串行輸出,低位在先,引腳串行輸出,低位在先,TXDTXD引腳輸出同步移位引腳
8、輸出同步移位脈沖,脈沖,發(fā)送完發(fā)送完8 8位數(shù)據(jù),中斷標(biāo)志位位數(shù)據(jù),中斷標(biāo)志位TITI置置“1 1”。 發(fā)送時(shí)序發(fā)送時(shí)序如如圖圖8-58-5。12圖圖7-5 方式方式0發(fā)送時(shí)序發(fā)送時(shí)序13(2 2)方式)方式0 0輸出的應(yīng)用輸出的應(yīng)用 典型應(yīng)用是外擴(kuò)串行輸入典型應(yīng)用是外擴(kuò)串行輸入/ /并行輸出的同步移位寄存器并行輸出的同步移位寄存器74LS16474LS164,實(shí)現(xiàn)并行輸出端口的擴(kuò)展。,實(shí)現(xiàn)并行輸出端口的擴(kuò)展。 圖圖8-68-6為串行口工作在方式為串行口工作在方式0 0,通過(guò),通過(guò)74LS16474LS164的輸出來(lái)控的輸出來(lái)控制制8 8個(gè)外接個(gè)外接LEDLED發(fā)光二極管亮滅的接口電路。當(dāng)串行
9、口被設(shè)置發(fā)光二極管亮滅的接口電路。當(dāng)串行口被設(shè)置在方式在方式0 0輸出時(shí),串行數(shù)據(jù)由輸出時(shí),串行數(shù)據(jù)由RXDRXD端(端(P3.0P3.0)送出,移位脈沖)送出,移位脈沖由由TXDTXD端(端(P3.1P3.1)送出。在移位脈沖的作用下,串行口發(fā)送)送出。在移位脈沖的作用下,串行口發(fā)送緩沖器的數(shù)據(jù)逐位地從緩沖器的數(shù)據(jù)逐位地從RXDRXD端串行地移入端串行地移入74LS16474LS164中。中。 1415圖圖8-6 8-6 串行口的方式串行口的方式0 0 外接外接8 8個(gè)個(gè)LEDLED發(fā)光二極管的接口電路發(fā)光二極管的接口電路 【例例8-18-1】如如圖圖8-68-6所示,編寫(xiě)程序控制所示,編寫(xiě)
10、程序控制8 8個(gè)發(fā)個(gè)發(fā)光二極管輪流點(diǎn)亮。光二極管輪流點(diǎn)亮。 圖中圖中74LS16474LS164的的CLKCLK端為同步脈沖輸入端,端為同步脈沖輸入端,CLRCLR為控制端,當(dāng)為控制端,當(dāng)CLR=0CLR=0時(shí),允許串行數(shù)據(jù)從時(shí),允許串行數(shù)據(jù)從A A和和B B端輸端輸入但是入但是8 8位并行輸出端關(guān)閉;當(dāng)位并行輸出端關(guān)閉;當(dāng)CLR=1CLR=1時(shí),時(shí),A A和和B B輸入輸入端關(guān)閉,但是允許端關(guān)閉,但是允許74LS16474LS164中的中的8 8位數(shù)據(jù)并行輸出。位數(shù)據(jù)并行輸出。當(dāng)當(dāng)8 8位串行數(shù)據(jù)發(fā)送完畢后,引起中斷,在中斷服務(wù)位串行數(shù)據(jù)發(fā)送完畢后,引起中斷,在中斷服務(wù)程序中,單片機(jī)通過(guò)串行
11、口輸出下一個(gè)程序中,單片機(jī)通過(guò)串行口輸出下一個(gè)8 8位數(shù)據(jù)。位數(shù)據(jù)。 采用中斷方式的參考程序如下。采用中斷方式的參考程序如下。 16n#include n#include nsbit P1_0=0 x90;nunsigned char nSendByte;nvoid delay(unsigned int i)nn int j;n for(;i0;i-)n for(j=0;j125;j+);nnmain( )n nSCON=0 x00; /* 設(shè)置串行口為方式設(shè)置串行口為方式0*/nEA=1;/* 全局中斷允許全局中斷允許 */nES=1;/* 允許串行口中斷允許串行口中斷 */nnSendBy
12、te=1;nSBUF=nSendByte; /啟動(dòng)串口發(fā)送啟動(dòng)串口發(fā)送nP1_0=0; / 允許串口向允許串口向164串行發(fā)送數(shù)據(jù)串行發(fā)送數(shù)據(jù)nwhile(1);n 17nvoid Serial_Port( ) interrupt 4 using 0nn TI=0;n P1_0=1;n nSendByte=1;n if(nSendByte=0) nSendByte =1;n SBUF=nSendByte;n delay(500);n P1_0=0;n 182 2方式方式0 0輸入輸入(1 1)方式)方式0 0輸入工作原理輸入工作原理方式方式0 0接收,接收,RENREN為為允許接收控制位允許接
13、收控制位,REN=0REN=0,禁止接收;,禁止接收;RENREN = = 1 1,允許接收。,允許接收。當(dāng)向當(dāng)向SCONSCON寄存器寄存器寫(xiě)入控制字寫(xiě)入控制字(設(shè)置為方式(設(shè)置為方式0 0,并使,并使RENREN位置位置“1 1”,同時(shí),同時(shí)RIRI = = 0 0)時(shí),)時(shí),產(chǎn)生一個(gè)正脈沖,串行口開(kāi)始接收產(chǎn)生一個(gè)正脈沖,串行口開(kāi)始接收數(shù)據(jù)。數(shù)據(jù)。引腳引腳RXDRXD為數(shù)據(jù)輸入端,為數(shù)據(jù)輸入端,TXDTXD為移位脈沖信號(hào)輸出端,接收為移位脈沖信號(hào)輸出端,接收器以器以f foscosc/12/12的固定波特率的固定波特率采樣采樣RXDRXD引腳的數(shù)據(jù)信息,當(dāng)引腳的數(shù)據(jù)信息,當(dāng)接收完接收完8
14、8位位數(shù)據(jù)時(shí),中斷標(biāo)志數(shù)據(jù)時(shí),中斷標(biāo)志RIRI置置“1 1”,表示一幀數(shù)據(jù)接收完畢,表示一幀數(shù)據(jù)接收完畢,通知通知CPUCPU讀取該數(shù)據(jù),并執(zhí)行讀取該數(shù)據(jù),并執(zhí)行RI=0RI=0指令,準(zhǔn)備接收下一幀數(shù)據(jù),指令,準(zhǔn)備接收下一幀數(shù)據(jù),時(shí)序如時(shí)序如圖圖8-78-7。19圖圖7-7 方式方式0接收時(shí)序接收時(shí)序2021(2 2)方式)方式0 0輸入應(yīng)用舉例輸入應(yīng)用舉例 【例例8-28-2】圖圖8-88-8為串口外接一片為串口外接一片8 8位并行輸入、串行輸出位并行輸入、串行輸出的同步移位寄存器的同步移位寄存器74LS16574LS165,擴(kuò)展一個(gè),擴(kuò)展一個(gè)8 8位并行輸入口的電路,位并行輸入口的電路,可
15、將接在可將接在74LS16574LS165的的8 8個(gè)開(kāi)關(guān)的狀態(tài)通過(guò)串口方式個(gè)開(kāi)關(guān)的狀態(tài)通過(guò)串口方式0 0讀入到單片讀入到單片機(jī)內(nèi)。機(jī)內(nèi)。74LS16574LS165的的SH/LDSH/LD端為控制端。若端為控制端。若SH/LD=0SH/LD=0,則,則74LS16574LS165可可并行輸入數(shù)據(jù),且串行輸出端關(guān)閉;并行輸入數(shù)據(jù),且串行輸出端關(guān)閉;SH/LD=1SH/LD=1,則并行輸入關(guān),則并行輸入關(guān)斷,可以串行輸出。斷,可以串行輸出。22圖圖8-8 外接并行輸入串行輸出的同步移位寄存器外接并行輸入串行輸出的同步移位寄存器n#include nsbit P1_1=0 x91;nvoid de
16、lay(unsigned int i)nn int j;n for(;i0;i-) for(j=0;j125;j+);nnvoid main( )n nSCON=0 x10; /* 串行口初始化為方式串行口初始化為方式0*/nwhile(1)nnP1_1=0;nP1_1=1; nwhile(RI=0);n RI=0;n P2=SBUF;/*讀入讀入SBUF 中的數(shù)據(jù)中的數(shù)據(jù)*/ n delay(10);n n23參考程序如下:參考程序如下:查詢方式讀入開(kāi)關(guān)狀態(tài)查詢方式讀入開(kāi)關(guān)狀態(tài)作業(yè):中斷方式讀入開(kāi)關(guān)狀態(tài)作業(yè):中斷方式讀入開(kāi)關(guān)狀態(tài)8.2.2 8.2.2 方式方式1 1方式方式1 1為雙機(jī)串行通
17、信方式,如為雙機(jī)串行通信方式,如圖圖8-98-9所示。所示。當(dāng)當(dāng)SM0SM0、SM1=01SM1=01時(shí),串行口設(shè)為方式時(shí),串行口設(shè)為方式1 1的雙機(jī)串行通信。的雙機(jī)串行通信。TXDTXD腳和腳和RXDRXD腳分別用于發(fā)送和接收數(shù)據(jù)。腳分別用于發(fā)送和接收數(shù)據(jù)。圖圖8-98-9 方式方式1 1雙機(jī)串行通信的連接電路雙機(jī)串行通信的連接電路24方式方式1 1一幀數(shù)據(jù)為一幀數(shù)據(jù)為1010位位,1 1個(gè)起始位(個(gè)起始位(0 0),),8 8個(gè)數(shù)據(jù)位,個(gè)數(shù)據(jù)位,1 1個(gè)個(gè)停止位(停止位(1 1),),先發(fā)送或接收最低位。幀格式如先發(fā)送或接收最低位。幀格式如圖圖8-108-10。 圖圖8-108-10 方式
18、方式1 1的幀格式的幀格式方式方式1 1為為波特率可變波特率可變的的8 8位異步通信接口。波特率由下式確位異步通信接口。波特率由下式確定:定:方式方式1 1波特率波特率 = = 定時(shí)器定時(shí)器T1T1的溢出率的溢出率SMODSMOD為為PCONPCON寄存器的最高位的值(寄存器的最高位的值(0 0或或1 1)。)。25SMOD2321 1方式方式1 1發(fā)送發(fā)送方式方式1 1輸出時(shí),數(shù)據(jù)位由輸出時(shí),數(shù)據(jù)位由TXDTXD端端輸出,當(dāng)輸出,當(dāng)CPUCPU執(zhí)行一條數(shù)據(jù)執(zhí)行一條數(shù)據(jù)寫(xiě)寫(xiě)SBUFSBUF的指令,就的指令,就啟動(dòng)發(fā)送啟動(dòng)發(fā)送。發(fā)送時(shí)序見(jiàn)。發(fā)送時(shí)序見(jiàn)圖圖8-118-11。圖圖8-118-11中中
19、TXTX時(shí)鐘時(shí)鐘的頻率就是發(fā)送的波特率。的頻率就是發(fā)送的波特率。26內(nèi)部發(fā)送內(nèi)部發(fā)送控制信號(hào)控制信號(hào)圖圖8 -11 8 -11 方式方式1 1發(fā)送時(shí)序發(fā)送時(shí)序中斷標(biāo)志位中斷標(biāo)志位TI置置“1發(fā)送移位發(fā)送移位時(shí)鐘信號(hào)時(shí)鐘信號(hào)空閑為空閑為12 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ù)跳變,則,則開(kāi)始接收開(kāi)始接收。接收時(shí)序見(jiàn)。接收時(shí)序見(jiàn)圖圖8-128-12。27 圖圖8-128-12 方式方式1 1接收時(shí)序接收時(shí)序接收移位接收移位時(shí)鐘信號(hào)時(shí)鐘信號(hào)
20、空閑為空閑為1D7接收數(shù)據(jù)有效(能裝入接收數(shù)據(jù)有效(能裝入SBUFSBUF且能被且能被CPUCPU讀出的)的讀出的)的條件:條件:(1 1) RI=0RI=0 ;SM2=0SM2=0(方式(方式1 1時(shí),時(shí),SM2SM2設(shè)為設(shè)為0 0)。)。(2 2) RI=0RI=0 ; RB8RB8 = = 1 1( (控制激活控制激活RIRI的功能的功能) ), SM2=1SM2=1(只有接收到有效的停止位,(只有接收到有效的停止位,RIRI才被才被置置“1”1”。若不滿足任何一個(gè)條件,收的數(shù)據(jù)不能被若不滿足任何一個(gè)條件,收的數(shù)據(jù)不能被CPUCPU讀,讀,該幀數(shù)據(jù)將丟棄。該幀數(shù)據(jù)將丟棄。288.2.3
21、8.2.3 方式方式2 2 方式方式2 2和方式和方式3 3,9 9位異步通信接口。位異步通信接口。每幀數(shù)據(jù)為每幀數(shù)據(jù)為1111位位,1 1位起始位位起始位0 0,8 8位數(shù)據(jù)位(先低位),位數(shù)據(jù)位(先低位),1 1位可程控為位可程控為1 1或或0 0的第的第9 9位數(shù)據(jù)和位數(shù)據(jù)和1 1位停止位位停止位。方式。方式2 2、方式、方式3 3幀格式如幀格式如圖圖8-138-13。 圖圖8-138-13 方式方式2 2、方式、方式3 3的幀格式的幀格式方式方式2 2波特率波特率 = = f foscosc29SMOD2641 1方式方式2 2發(fā)送發(fā)送 發(fā)送前,發(fā)送前,先根據(jù)協(xié)議由軟件設(shè)置先根據(jù)協(xié)議由
22、軟件設(shè)置TB8TB8(如奇偶校驗(yàn)位或(如奇偶校驗(yàn)位或多機(jī)通信的地址多機(jī)通信的地址/ /數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫(xiě)入數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫(xiě)入SBUFSBUF,即啟動(dòng)發(fā)送。,即啟動(dòng)發(fā)送。TB8TB8自動(dòng)裝入自動(dòng)裝入第第9 9位數(shù)據(jù)位,逐一發(fā)送。位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使發(fā)送完畢,使TITI位置位置“1 1”。 圖圖8-148-14 方式方式2 2和方式和方式3 3發(fā)送時(shí)序發(fā)送時(shí)序302 2方式方式2 2接收接收 SM0 SM0、SM1=10SM1=10,且,且REN=1REN=1時(shí)。數(shù)據(jù)由時(shí)。數(shù)據(jù)由RXDRXD端端輸入,當(dāng)位檢輸入,當(dāng)位檢測(cè)邏輯采樣到測(cè)邏輯采樣到RXDRX
23、D的的負(fù)跳變負(fù)跳變,判斷起始位有效,便開(kāi)始接收,判斷起始位有效,便開(kāi)始接收一幀信息。在接收完第一幀信息。在接收完第9 9位數(shù)據(jù)后,位數(shù)據(jù)后,需滿足以下兩個(gè)條件,需滿足以下兩個(gè)條件,才能將接收到的數(shù)據(jù)送入接收緩沖器才能將接收到的數(shù)據(jù)送入接收緩沖器SBUFSBUF。 (1 1)RI=0RI=0,意味著接收緩沖器為空。,意味著接收緩沖器為空。 (2 2)SM2=0SM2=0或接收到的第或接收到的第9 9位數(shù)據(jù)位位數(shù)據(jù)位RB8=1RB8=1。 當(dāng)當(dāng)滿足上述兩個(gè)條件滿足上述兩個(gè)條件時(shí),時(shí),收到的數(shù)據(jù)送收到的數(shù)據(jù)送SBUFSBUF(接收緩沖(接收緩沖器),第器),第9 9位數(shù)據(jù)送入位數(shù)據(jù)送入RB8RB8,
24、且,且RIRI置置“1 1”。若不滿足這兩個(gè)若不滿足這兩個(gè)條件條件,接收的信息將被丟棄。,接收的信息將被丟棄。31串行口方式串行口方式2 2和方式和方式3 3接收時(shí)序接收時(shí)序如如圖圖8-158-15。 圖圖8-158-15 方式方式2 2和方式和方式3 3接收時(shí)序接收時(shí)序328.2.4 8.2.4 方式方式3 3 SM0 SM0、SM1=11SM1=11時(shí),方式時(shí),方式3 3。為波。為波特率可變的特率可變的9 9位異步通信位異步通信方式,方式,除了波特率外,方式除了波特率外,方式3 3和方式和方式2 2相同相同。方式。方式3 3發(fā)送和接發(fā)送和接收時(shí)序收時(shí)序如如圖圖8-148-14和和圖圖8-1
25、58-15所示。所示。方式方式3 3波特率波特率 = = 定時(shí)器定時(shí)器T1T1的溢出率的溢出率33SMOD2328.4 8.4 波特率的制定波特率的制定 串行通信,收、發(fā)雙方發(fā)送或接收的串行通信,收、發(fā)雙方發(fā)送或接收的波特率必須一致。波特率必須一致。8.4.1 8.4.1 波特率的定義波特率的定義 波特率的定義:波特率的定義:串行口串行口每秒鐘發(fā)送(或接收)的位數(shù)每秒鐘發(fā)送(或接收)的位數(shù)。348.4.2 8.4.2 定時(shí)器定時(shí)器T1T1產(chǎn)生波特率的計(jì)算產(chǎn)生波特率的計(jì)算(1 1)方式方式0 0時(shí),波特率時(shí),波特率固定為時(shí)鐘頻率固定為時(shí)鐘頻率f foscosc的的1/121/12,不受,不受SM
26、ODSMOD位位值的影響。若值的影響。若f foscosc = = 12 MHz12 MHz,波特率,波特率1Mbit/s1Mbit/s。(2 2)方式方式2 2時(shí),波特率僅與時(shí),波特率僅與SMODSMOD位的值有關(guān)。位的值有關(guān)。方式方式2 2波特率波特率 = = f foscosc 若若f foscosc = = 12 MHz12 MHz: SMODSMOD = = 0 0,波特率,波特率 = = 187.5 kbit/s187.5 kbit/s;SMODSMOD = = 1 1,波特率,波特率 = = 375 kbit/s375 kbit/s。SMOD264波特率波特率 = = 定時(shí)器定時(shí)
27、器T1T1的溢出率的溢出率 (8-18-1)波特率由波特率由T1T1溢出率溢出率和和SMODSMOD的值的值共同決定共同決定。實(shí)際設(shè)定波特率時(shí)實(shí)際設(shè)定波特率時(shí),T1T1常設(shè)置為方式常設(shè)置為方式2 2定時(shí)(自動(dòng)裝初值),定時(shí)(自動(dòng)裝初值),即即TL1TL1作為作為8 8位計(jì)數(shù)器,位計(jì)數(shù)器,TH1TH1存放備用初值。存放備用初值。定時(shí)器定時(shí)器T1T1的溢出率的溢出率 = = (8-28-2)35SM OD232osc/12256256計(jì)計(jì)數(shù)數(shù)速速率率fXX(3 3)方式)方式1 1或方式或方式3 3時(shí),用時(shí),用T1T1作為波特率發(fā)生器作為波特率發(fā)生器SMODosc23212(256)fX波特率波特
28、率 = = (8-38-3)結(jié)論:波特率結(jié)論:波特率隨隨f foscosc、SMODSMOD和定時(shí)器和定時(shí)器 TL0TL0初值初值X X而變化。而變化。定時(shí)器定時(shí)器TL1在方在方式式2的初值為的初值為X 實(shí)際使用時(shí),經(jīng)常根據(jù)實(shí)際使用時(shí),經(jīng)常根據(jù)已知波特率和時(shí)鐘頻率已知波特率和時(shí)鐘頻率f foscosc來(lái)來(lái)計(jì)算計(jì)算TL1TL1的初值的初值X X。為避免繁雜的初值計(jì)算,。為避免繁雜的初值計(jì)算,常用的波特率和初值常用的波特率和初值X X間的關(guān)系常列成間的關(guān)系常列成表表8-28-2形式形式,供查用。供查用。36表8-2 用定時(shí)器T1產(chǎn)生的常用波特率37波 特 率foscSMOD位方式初值X62.5kb
29、it/s12 MHz11、3FFH19.2kbit/s11.0592 MHz11、3FDH9.6kbit/s11.0592 MHz01、3FDH4.8kbit/s11.0592 MHz01、3FAH2.4kbit/s11.0592 MHz01、3F4H1.2kbit/s11.0592 MHz01、3E8H表表8-28-2有兩點(diǎn)需要注意:有兩點(diǎn)需要注意:(1 1)在使用的時(shí)鐘振蕩頻率)在使用的時(shí)鐘振蕩頻率f foscosc為為12MHz12MHz或或6MHz6MHz時(shí),將初時(shí),將初值值X X和和f foscosc帶入式(帶入式(8-38-3)中計(jì)算出的波特率)中計(jì)算出的波特率有一定誤差有一定誤差
30、。消。消除誤差可采用除誤差可采用時(shí)鐘頻率時(shí)鐘頻率11.0592MHz11.0592MHz。(2 2)如果選用)如果選用很低的波特率很低的波特率,如選為,如選為5555,可將定時(shí)器,可將定時(shí)器T1T1設(shè)為方式設(shè)為方式1 1定時(shí)。但這種情況,定時(shí)。但這種情況,T1T1溢出時(shí),需在中斷服務(wù)程溢出時(shí),需在中斷服務(wù)程序中重新裝入初值。中斷響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特序中重新裝入初值。中斷響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。38【例例8-38-3】 若時(shí)鐘頻率為若時(shí)鐘頻率為11.0592MHz11.0592MHz,選用
31、選用T1T1的的方式方式2 2定時(shí)定時(shí)作為波特率發(fā)生器,作為波特率發(fā)生器,波特率為波特率為2 2 .4kbit/s.4kbit/s,求初值。,求初值。 設(shè)設(shè)T1T1為方式為方式2 2定時(shí),選定時(shí),選SMODSMOD = = 0 0。 將已知條件帶入式(將已知條件帶入式(7-37-3)中)中波特率波特率 = = = = 2400b/s2400b/s從中解得:從中解得:X X = = 244244 = = F4HF4H。 只要把只要把F4HF4H裝入裝入TH1TH1和和TL1TL1,即得波特率,即得波特率2 400bit/s2 400bit/s。也。也可直接從表可直接從表7-27-2中查到。中查到
32、。 這里時(shí)鐘振蕩頻率選為這里時(shí)鐘振蕩頻率選為11.0592MHz11.0592MHz,就可使就可使初值為整數(shù)初值為整數(shù),從而產(chǎn)生精確的波特率。從而產(chǎn)生精確的波特率。39SMODosc23212(256)fX8.5 8.5 串行通信的應(yīng)用設(shè)計(jì)串行通信的應(yīng)用設(shè)計(jì) 串行通信接口設(shè)計(jì)時(shí),需考慮如下問(wèn)題。串行通信接口設(shè)計(jì)時(shí),需考慮如下問(wèn)題。 (1 1)首先確定串行通信雙方的數(shù)傳速率和通信距離;)首先確定串行通信雙方的數(shù)傳速率和通信距離; (2 2)由串行通信的數(shù)傳速率和通信距離確定采用的串)由串行通信的數(shù)傳速率和通信距離確定采用的串行通信接口標(biāo)準(zhǔn);行通信接口標(biāo)準(zhǔn); (3 3)注意串行通信的通信線選擇,一
33、般選用雙絞線較)注意串行通信的通信線選擇,一般選用雙絞線較好,并根據(jù)傳輸?shù)木嚯x選擇纖芯的直徑。如空間干擾較好,并根據(jù)傳輸?shù)木嚯x選擇纖芯的直徑。如空間干擾較多,還要選擇帶有屏蔽層的雙絞線。多,還要選擇帶有屏蔽層的雙絞線。8.5.1 8.5.1 各種串行通信接口標(biāo)準(zhǔn)各種串行通信接口標(biāo)準(zhǔn) AT89S51 AT89S51單串口的輸入、輸出均為單串口的輸入、輸出均為T(mén)TLTTL電平。以電平。以TTLTTL電平串行傳輸數(shù)據(jù)的方式,抗干擾性差,傳輸距電平串行傳輸數(shù)據(jù)的方式,抗干擾性差,傳輸距離短,速率低。為了提高串行通信可靠性,增大串離短,速率低。為了提高串行通信可靠性,增大串行通信的距離和提高傳輸速率,一
34、般都采用標(biāo)準(zhǔn)串行通信的距離和提高傳輸速率,一般都采用標(biāo)準(zhǔn)串行接口,如行接口,如RS-232RS-232、RS-422ARS-422A、RS-485RS-485等。等。418.5.2 方式方式1的應(yīng)用設(shè)計(jì)的應(yīng)用設(shè)計(jì) 【例例8-4】如如圖圖甲、乙雙機(jī)串行通信,雙機(jī)的甲、乙雙機(jī)串行通信,雙機(jī)的RXD和和TXD相互交叉相連,甲機(jī)的相互交叉相連,甲機(jī)的P1口接口接8個(gè)開(kāi)關(guān),乙機(jī)的個(gè)開(kāi)關(guān),乙機(jī)的P1口接口接8個(gè)發(fā)光二極管。甲機(jī)設(shè)置為只發(fā)不收的單工個(gè)發(fā)光二極管。甲機(jī)設(shè)置為只發(fā)不收的單工方式。要求甲機(jī)讀入方式。要求甲機(jī)讀入P1口的口的8個(gè)開(kāi)關(guān)的狀態(tài)后,通過(guò)個(gè)開(kāi)關(guān)的狀態(tài)后,通過(guò)串行口發(fā)送到乙機(jī),乙機(jī)將接收到的甲
35、機(jī)的串行口發(fā)送到乙機(jī),乙機(jī)將接收到的甲機(jī)的8個(gè)開(kāi)關(guān)個(gè)開(kāi)關(guān)的狀態(tài)數(shù)據(jù)送入的狀態(tài)數(shù)據(jù)送入P1口,由口,由P1口的口的8個(gè)發(fā)光二極管來(lái)顯個(gè)發(fā)光二極管來(lái)顯示示8個(gè)開(kāi)關(guān)的狀態(tài)。雙方晶振均采用個(gè)開(kāi)關(guān)的狀態(tài)。雙方晶振均采用11.0592MHz。 參考程序如下。參考程序如下。n#include #include nvoid delay(unsigned int i)void delay(unsigned int i)n int j; int j;n for(;i0;i-) for(;i0;i-)n for(j=0;j125;j+); for(j=0;j125;j+);nvoid main()void main
36、()n n TMOD=0 x20; TMOD=0 x20;/ /* *設(shè)置定時(shí)器設(shè)置定時(shí)器T1T1為方式為方式2 2* */ /n TH1=0 xfd; TH1=0 xfd;/ /* *波特率波特率96009600* */ /n TL1=0 xfd; TL1=0 xfd;n SCON=0 x40; SCON=0 x40; / /* *方式方式1 1只發(fā)送,不接收只發(fā)送,不接收* */ /n PCON=0 x00; PCON=0 x00; / /* *串行口初始化為方式串行口初始化為方式0 0* */ /n TR1=1; TR1=1;/ /* *啟動(dòng)啟動(dòng)T1T1* */ /n P1=0 xff;
37、 P1=0 xff;/ /* * P1 P1口為輸入口為輸入* */ /n SBUF=P1; SBUF=P1;n while(1) while(1)n n if(TI=1); if(TI=1);/ /* *如果如果TI=1TI=1,發(fā)送完數(shù)據(jù),發(fā)送完數(shù)據(jù)* */ /n n SBUF=P1; SBUF=P1;/ /* *讀入讀入P1P1口開(kāi)關(guān)的狀態(tài)數(shù)據(jù)并送串行口發(fā)送口開(kāi)關(guān)的狀態(tài)數(shù)據(jù)并送串行口發(fā)送* */ /n delay(100); delay(100);n TI=0; TI=0;/ /* *已發(fā)送完,再把已發(fā)送完,再把TITI清清0 0* */ /n n n 44P218頁(yè)書(shū)中的程序頁(yè)書(shū)中的程
38、序是否工作正常,如是否工作正常,如不 能 找 出 原 因不 能 找 出 原 因/*甲機(jī)串行發(fā)送甲機(jī)串行發(fā)送*/n#include #include nvoid delay(unsigned int i)void delay(unsigned int i)n n int j; int j;n for(;i0;i-) for(;i0;i-)n for(j=0;j125;j+); for(j=0;j125;j+);n nvoid main( )void main( )n nTMOD=0 x20;TMOD=0 x20;/ /* *設(shè)置定時(shí)器設(shè)置定時(shí)器T1T1為方式為方式2 2* */ /nTH1=0
39、xfd;TH1=0 xfd;/ /* *波特率波特率96009600* */ /nTL1=0 xfd;TL1=0 xfd;nSCON = 0 x50; SCON = 0 x50; / /* *設(shè)置串口為方式設(shè)置串口為方式1 1接收,接收,REN=1REN=1* */ /nPCON = 0 x00; PCON = 0 x00; / /* *SMOD=0SMOD=0* */ /nTR1=1;TR1=1;/ /* *啟動(dòng)啟動(dòng)T1T1* */ /nwhile(1)while(1)n n if(RI=1); if(RI=1); / /* * 若若RIRI為為1 1,接收到數(shù)據(jù),接收到數(shù)據(jù)* */ /n
40、n P1=SBUF; P1=SBUF;/ /* * 接收的數(shù)據(jù)送接收的數(shù)據(jù)送P1P1口控制口控制8 8個(gè)個(gè)LEDLED的亮與滅的亮與滅* */ /n delay(100); delay(100);n RI=0; RI=0;/ /* * 接收到數(shù)據(jù),則把接收到數(shù)據(jù),則把RIRI清清0 0* */ /n n n 45/*乙機(jī)串行接收乙機(jī)串行接收*/8 8.5.3 方式方式2和方式和方式3的應(yīng)用的應(yīng)用 方式方式2和方式和方式1兩點(diǎn)不同兩點(diǎn)不同:A 方式方式2收收/發(fā)發(fā)11位信息,第位信息,第0位為起始位,第位為起始位,第18位為數(shù)據(jù)位,第位為數(shù)據(jù)位,第9位是程控位,可由用戶置位是程控位,可由用戶置T
41、B8決定,決定,第第10位是停止位位是停止位1。A方式方式2波特率波特率=振蕩器頻率振蕩器頻率/n。 當(dāng)當(dāng)SMODSMOD = = 0 0時(shí),時(shí),n n = = 6464。 當(dāng)當(dāng)SMODSMOD = = 1 1時(shí),時(shí),n n = = 3232。 除波特率的差別外,方式除波特率的差別外,方式2 2的使用和方式的使用和方式3 3是一樣的,是一樣的,所以下面介紹的方式所以下面介紹的方式3 3應(yīng)用編程,也適用于方式應(yīng)用編程,也適用于方式2 2?!纠?-68-6】甲乙兩個(gè)單片機(jī)進(jìn)行方式甲乙兩個(gè)單片機(jī)進(jìn)行方式3 3(或方式(或方式2 2)串行通訊。甲機(jī)將串行通訊。甲機(jī)將8 8個(gè)流水燈控制數(shù)據(jù)發(fā)送給乙機(jī),
42、個(gè)流水燈控制數(shù)據(jù)發(fā)送給乙機(jī),乙機(jī)再利用該數(shù)據(jù)點(diǎn)亮其乙機(jī)再利用該數(shù)據(jù)點(diǎn)亮其P1P1口的口的8 8個(gè)個(gè)LEDLED。方式。方式3 3比比方式方式1 1多了一個(gè)可編程位多了一個(gè)可編程位TB8TB8,該位一般作奇偶校驗(yàn),該位一般作奇偶校驗(yàn)位。乙機(jī)接收到的位。乙機(jī)接收到的8 8位二進(jìn)制數(shù)據(jù)有可能出錯(cuò),需進(jìn)位二進(jìn)制數(shù)據(jù)有可能出錯(cuò),需進(jìn)行奇偶校驗(yàn),其方法是將乙機(jī)的行奇偶校驗(yàn),其方法是將乙機(jī)的RB8RB8和和PSWPSW的奇偶校的奇偶校驗(yàn)位驗(yàn)位P P進(jìn)行比較,如相同,接收數(shù)據(jù);否則拒絕接收進(jìn)行比較,如相同,接收數(shù)據(jù);否則拒絕接收。參考程序如下。參考程序如下。4749甲機(jī)發(fā)送程序如下:甲機(jī)發(fā)送程序如下:#inc
43、lude unsigned char code Tab =0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f ;void Send(unsigned char dat ) /* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)的函數(shù)發(fā)送一個(gè)字節(jié)數(shù)據(jù)的函數(shù)*/SBUF=dat; /* 將待發(fā)送的數(shù)據(jù)寫(xiě)入發(fā)送緩沖器將待發(fā)送的數(shù)據(jù)寫(xiě)入發(fā)送緩沖器*/ TB8=P; /* 將奇偶校驗(yàn)位寫(xiě)入將奇偶校驗(yàn)位寫(xiě)入TB8*/while(TI=0); /* 檢測(cè)發(fā)送標(biāo)志位檢測(cè)發(fā)送標(biāo)志位TI, TI=0,未發(fā)送完,未發(fā)送完*/ ; /* 空操作空操作*/TI=0; /* 一個(gè)字節(jié)發(fā)送完,一個(gè)字節(jié)發(fā)送完,T
44、I清清0*/ void Delay (void) /* 延時(shí)大約延時(shí)大約200ms函數(shù)函數(shù)*/unsigned char m,n;for(m=0;m250;m+);for(n=0;n250;n+);void main(void) /* 主函數(shù)主函數(shù)*/ unsigned char i;TMOD=0 x20;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T1為方式為方式2*/SCON=0 xc0;/*設(shè)置串口為方式設(shè)置串口為方式3*/PCON=0 x00; /*SMOD=0*/ TH1=0 xfd; /*給定時(shí)器給定時(shí)器T1賦初值,波特率設(shè)置為賦初值,波特率設(shè)置為9600*/TL1=0 xfd;TR1=1;/*啟動(dòng)定
45、時(shí)器啟動(dòng)定時(shí)器T1*/ while(1) for(i=0;i8;i+) Send(Tabi ); Delay( );/*大約大約200ms發(fā)送一次數(shù)據(jù)發(fā)送一次數(shù)據(jù)*/ 51乙機(jī)接收程序如下:乙機(jī)接收程序如下:#include unsigned char Receive(void)/*接收一個(gè)字節(jié)數(shù)據(jù)的函數(shù)接收一個(gè)字節(jié)數(shù)據(jù)的函數(shù)*/unsigned char dat;while(RI=0); /*檢測(cè)接收中斷標(biāo)志檢測(cè)接收中斷標(biāo)志RI,RI=0,未接收完,則循環(huán)等待,未接收完,則循環(huán)等待*/ ; RI=0;/*已接收一幀數(shù)據(jù),將已接收一幀數(shù)據(jù),將RI清清0*/ ACC=SBUF;/*將接收緩沖器的
46、數(shù)據(jù)存于將接收緩沖器的數(shù)據(jù)存于ACC*/ if(RB8=P) /*只有奇偶校驗(yàn)成功才接收數(shù)據(jù)只有奇偶校驗(yàn)成功才接收數(shù)據(jù)*/ dat=ACC;/*將接收緩沖器的數(shù)據(jù),存于將接收緩沖器的數(shù)據(jù),存于dat*/ return dat;/*將接收的數(shù)據(jù)返回將接收的數(shù)據(jù)返回*/ void main(void) /*主函數(shù)主函數(shù)*/ TMOD=0 x20;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T1為方式為方式2*/SCON=0 xd0;/*設(shè)置串口為方式設(shè)置串口為方式3,允許接收,允許接收REN=1*/PCON=0 x00; /* SMOD=0*/ TH1=0 xfd;/*給定時(shí)器給定時(shí)器T1賦初值,波特率為賦初值,波特
47、率為9600 */TL1=0 xfd;TR1=1;/*啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T1*/ while(1)P1= Receive( ); /*將接收到的數(shù)據(jù)送將接收到的數(shù)據(jù)送P1口顯示口顯示*/ 多個(gè)單片機(jī)利用串口進(jìn)行多機(jī)通信,常采用多個(gè)單片機(jī)利用串口進(jìn)行多機(jī)通信,常采用圖圖8-168-16的的主主從式結(jié)構(gòu)從式結(jié)構(gòu)。系統(tǒng)中。系統(tǒng)中1 1個(gè)主機(jī)(單片機(jī)或其他有串行接口的微個(gè)主機(jī)(單片機(jī)或其他有串行接口的微機(jī))和多個(gè)單片機(jī)組成的從機(jī)系統(tǒng)。機(jī))和多個(gè)單片機(jī)組成的從機(jī)系統(tǒng)。主機(jī)的主機(jī)的RXDRXD與所有從機(jī)與所有從機(jī)的的TXDTXD端相連端相連,TXDTXD與所有從機(jī)的與所有從機(jī)的RXDRXD端相連端相連。
48、從機(jī)地址從機(jī)地址分別分別為為01H01H、02H02H和和03H03H。 圖圖8-168-16 多機(jī)通信系統(tǒng)示意圖多機(jī)通信系統(tǒng)示意圖538.3 8.3 多機(jī)通信多機(jī)通信 主從式主從式只有一個(gè)主機(jī),其余全是從機(jī)。只有一個(gè)主機(jī),其余全是從機(jī)。l 主機(jī)主機(jī)SM2=0SM2=0;從機(jī);從機(jī)SM2=1SM2=1,從機(jī)只能接收地址。,從機(jī)只能接收地址。l 主機(jī)發(fā)送帶主機(jī)發(fā)送帶TB8=1TB8=1的地址幀,以選擇要通信的從機(jī)。的地址幀,以選擇要通信的從機(jī)。l 各從機(jī)接收到主機(jī)發(fā)送的地址,與本機(jī)地址比較。相同時(shí)各從機(jī)接收到主機(jī)發(fā)送的地址,與本機(jī)地址比較。相同時(shí)向主機(jī)發(fā)回本機(jī)地址,并置向主機(jī)發(fā)回本機(jī)地址,并置S
49、M2=0,SM2=0,準(zhǔn)備接收主機(jī)發(fā)送給本機(jī)準(zhǔn)備接收主機(jī)發(fā)送給本機(jī)的數(shù)據(jù),其他從機(jī)的數(shù)據(jù),其他從機(jī)SM2=1;SM2=1;l 主機(jī)收到從機(jī)回應(yīng)地址后,開(kāi)始發(fā)送帶主機(jī)收到從機(jī)回應(yīng)地址后,開(kāi)始發(fā)送帶TB8=0TB8=0的命令或數(shù)的命令或數(shù)據(jù),按照約定進(jìn)行通信。據(jù),按照約定進(jìn)行通信。l 通信結(jié)束后,從機(jī)通信結(jié)束后,從機(jī)SM2=1SM2=1; 主從式主從式只有一個(gè)主機(jī),其余全是從機(jī)。只有一個(gè)主機(jī),其余全是從機(jī)。主機(jī)主機(jī)發(fā)送的信息發(fā)送的信息可以可以被所有從機(jī)接收被所有從機(jī)接收,任何一個(gè)從機(jī)發(fā)送的信息,只能由任何一個(gè)從機(jī)發(fā)送的信息,只能由主主機(jī)機(jī)接收。從機(jī)和從機(jī)之間接收。從機(jī)和從機(jī)之間不能進(jìn)行直接通信,不
50、能進(jìn)行直接通信,只能經(jīng)主機(jī)只能經(jīng)主機(jī)才才能實(shí)現(xiàn)。能實(shí)現(xiàn)。 多機(jī)通信的工作原理:多機(jī)通信的工作原理: 55要保證要保證主機(jī)主機(jī)與與所選擇的從機(jī)所選擇的從機(jī)通信,須保證通信,須保證串口有識(shí)別功能串口有識(shí)別功能。SCON中的中的SM2位位就是為滿足這一條件設(shè)置的就是為滿足這一條件設(shè)置的多機(jī)通信控制多機(jī)通信控制位位。其工作原理是在串行口以方式。其工作原理是在串行口以方式2(或方式(或方式3)接收時(shí),)接收時(shí),若若SM2=1,則表示進(jìn)行多機(jī)通信,有以下,則表示進(jìn)行多機(jī)通信,有以下兩種情況兩種情況: (1 1)從機(jī)接收到主機(jī)發(fā)來(lái)的)從機(jī)接收到主機(jī)發(fā)來(lái)的第第9 9位數(shù)據(jù)位數(shù)據(jù)RB8=1RB8=1時(shí),時(shí),前前
51、8 8位位數(shù)據(jù)才裝入數(shù)據(jù)才裝入SBUFSBUF,并,并置中斷標(biāo)志置中斷標(biāo)志RIRI = = 1 1,向,向CPUCPU發(fā)出中斷請(qǐng)求。發(fā)出中斷請(qǐng)求。 在中斷服務(wù)程序中,從機(jī)把接收到的在中斷服務(wù)程序中,從機(jī)把接收到的SBUFSBUF中的數(shù)據(jù)存入中的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)中。數(shù)據(jù)緩沖區(qū)中。 (2 2)如果從機(jī)接收到的第)如果從機(jī)接收到的第9 9位數(shù)據(jù)位數(shù)據(jù)RB8=0RB8=0時(shí),則時(shí),則不產(chǎn)生不產(chǎn)生中斷標(biāo)志中斷標(biāo)志RI=1RI=1,不引起中斷不引起中斷,從機(jī),從機(jī)不接收主機(jī)發(fā)來(lái)的數(shù)據(jù)不接收主機(jī)發(fā)來(lái)的數(shù)據(jù)。 若若SM2SM2 = = 0 0,則接收的第,則接收的第9 9位數(shù)據(jù)不論是位數(shù)據(jù)不論是0 0還是還
52、是1 1,從機(jī)都,從機(jī)都將產(chǎn)生將產(chǎn)生RIRI = = 1 1中斷標(biāo)志,接收到的數(shù)據(jù)裝入中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUFSBUF中。中。56多機(jī)通信的工作過(guò)程:多機(jī)通信的工作過(guò)程:(1 1)各各從機(jī)從機(jī)初始化程序初始化程序允許從機(jī)串口中斷,將串允許從機(jī)串口中斷,將串口編程為方式口編程為方式2 2或方式或方式3 3接收,即接收,即9 9位異步通信方式,位異步通信方式,且且SM2SM2和和RENREN位位置置“1 1”,使從機(jī)處于多機(jī)通信且使從機(jī)處于多機(jī)通信且只只接收地址幀接收地址幀的狀態(tài)。的狀態(tài)。(2 2)在在主機(jī)和某從機(jī)通信之前主機(jī)和某從機(jī)通信之前,先將從機(jī)地址先將從機(jī)地址(即準(zhǔn)備接收數(shù)據(jù)的從
53、機(jī))發(fā)送給各個(gè)從機(jī)(即準(zhǔn)備接收數(shù)據(jù)的從機(jī))發(fā)送給各個(gè)從機(jī),接著,接著才傳送數(shù)據(jù)(或命令),主機(jī)發(fā)出的才傳送數(shù)據(jù)(或命令),主機(jī)發(fā)出的地址幀信息的地址幀信息的第第9 9位為位為1 1,數(shù)據(jù)(或命令)幀的第數(shù)據(jù)(或命令)幀的第9 9位為位為0 0。當(dāng)主機(jī)。當(dāng)主機(jī)向各從機(jī)發(fā)送地址幀時(shí),各從機(jī)的串行口接收到的向各從機(jī)發(fā)送地址幀時(shí),各從機(jī)的串行口接收到的第第9 9位信息位信息RB8RB8為為1 1,且由于,且由于各從機(jī)的各從機(jī)的SM2=1SM2=1,57則則RIRI置置“1 1”,各從機(jī)各從機(jī)響應(yīng)中斷響應(yīng)中斷,在中斷服務(wù)子程序中,在中斷服務(wù)子程序中,判判斷主機(jī)送來(lái)的地址是否和本機(jī)地址相符合,若為本機(jī)地址
54、,斷主機(jī)送來(lái)的地址是否和本機(jī)地址相符合,若為本機(jī)地址,則該從機(jī)則該從機(jī)SM2SM2位清位清“0 0”,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若地地址不相符址不相符,則,則保持保持SM2SM2 = = 1 1。 (3 3)接著主機(jī)發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第接著主機(jī)發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第9 9位為位為0 0。此時(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)入中斷
55、服務(wù)程序,接收主機(jī)發(fā)來(lái)的數(shù)據(jù)(或命令);發(fā)來(lái)的數(shù)據(jù)(或命令); 與主機(jī)發(fā)來(lái)的與主機(jī)發(fā)來(lái)的地址不相符地址不相符的從機(jī),由于的從機(jī),由于SM2SM2保持為保持為1 1,又,又RB8RB8 = = 0 0,因此,因此不能激活中斷標(biāo)志不能激活中斷標(biāo)志RIRI,就不能接受主機(jī),就不能接受主機(jī)58發(fā)來(lái)的數(shù)據(jù)幀。從而保證發(fā)來(lái)的數(shù)據(jù)幀。從而保證主機(jī)與從機(jī)間通信的正確性主機(jī)與從機(jī)間通信的正確性。 此時(shí)主機(jī)與建立聯(lián)系的從機(jī)已經(jīng)設(shè)置為單機(jī)通信模式,此時(shí)主機(jī)與建立聯(lián)系的從機(jī)已經(jīng)設(shè)置為單機(jī)通信模式,即在整個(gè)通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第即在整個(gè)通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第9 9位位(即(即TB8TB8
56、位)為位)為0 0,防止其他從機(jī)誤接收數(shù)據(jù)。,防止其他從機(jī)誤接收數(shù)據(jù)。 (4 4)結(jié)束數(shù)據(jù)通信并為下一次的多機(jī)通信做好準(zhǔn)備。)結(jié)束數(shù)據(jù)通信并為下一次的多機(jī)通信做好準(zhǔn)備。在在多機(jī)系統(tǒng),多機(jī)系統(tǒng),每個(gè)從機(jī)都被賦予唯一的地址。每個(gè)從機(jī)都被賦予唯一的地址。例如,例如,圖圖8-168-16三三個(gè)從機(jī)的地址可設(shè)為:個(gè)從機(jī)的地址可設(shè)為:01H01H、02H02H、03H03H。 還要還要預(yù)留預(yù)留1212個(gè)個(gè)“廣播地址廣播地址”,它是所有從機(jī)共有的地它是所有從機(jī)共有的地址,例如將址,例如將“廣播地址廣播地址”設(shè)為設(shè)為00H00H。當(dāng)主機(jī)與從機(jī)的數(shù)據(jù)當(dāng)主機(jī)與從機(jī)的數(shù)據(jù)通通信結(jié)束后信結(jié)束后,一定要將從機(jī),一定要將
57、從機(jī)再設(shè)置為多機(jī)通信模式再設(shè)置為多機(jī)通信模式,以便進(jìn)行以便進(jìn)行下一次的多機(jī)通信。下一次的多機(jī)通信。59這時(shí)要求與主機(jī)正在進(jìn)行數(shù)據(jù)傳輸?shù)膹臋C(jī)須隨時(shí)這時(shí)要求與主機(jī)正在進(jìn)行數(shù)據(jù)傳輸?shù)膹臋C(jī)須隨時(shí)注意,注意,一旦接收的數(shù)據(jù)第一旦接收的數(shù)據(jù)第9 9位(位(RB8RB8)為)為“1 1”,說(shuō),說(shuō)明主機(jī)傳送的不再是數(shù)據(jù),而是地址,這個(gè)地址就明主機(jī)傳送的不再是數(shù)據(jù),而是地址,這個(gè)地址就有有可能是可能是“廣播地址廣播地址”。當(dāng)當(dāng)收到收到“廣播地址廣播地址”后后,便將從機(jī)的通信模式再,便將從機(jī)的通信模式再設(shè)置成多機(jī)模式,為下一次多機(jī)通信做好準(zhǔn)備。設(shè)置成多機(jī)模式,為下一次多機(jī)通信做好準(zhǔn)備。608.5.4 8.5.4
58、主從式多機(jī)通信的應(yīng)用主從式多機(jī)通信的應(yīng)用介紹主從式多機(jī)通信的應(yīng)用編程。介紹主從式多機(jī)通信的應(yīng)用編程。 【例例8-78-7】如如圖圖所示,主機(jī)分別與三個(gè)從機(jī)進(jìn)行通信,這所示,主機(jī)分別與三個(gè)從機(jī)進(jìn)行通信,這里僅以地址為里僅以地址為01H01H的的1#1#從機(jī)為例,實(shí)現(xiàn)主從機(jī)的通信,其他從從機(jī)為例,實(shí)現(xiàn)主從機(jī)的通信,其他從機(jī)的程序與機(jī)的程序與1#1#從機(jī)相同,只是定義的地址不同。約定如下。從機(jī)相同,只是定義的地址不同。約定如下。(1 1)3 3臺(tái)從機(jī)的地址為臺(tái)從機(jī)的地址為00H02H00H02H。(2 2)主機(jī)發(fā)出的地址)主機(jī)發(fā)出的地址FFHFFH為一條控制指令,使所有從機(jī)都處于為一條控制指令,使所
59、有從機(jī)都處于SM2=1SM2=1的狀態(tài)。的狀態(tài)。(3 3)其余的控制指令:)其余的控制指令:00H00H接收指令,接收指令,01H01H發(fā)送指令。這發(fā)送指令。這兩條指令是作為數(shù)據(jù)發(fā)送的。兩條指令是作為數(shù)據(jù)發(fā)送的。(4 4)從機(jī)的狀態(tài)字如)從機(jī)的狀態(tài)字如圖圖8-218-21所示。所示。6162圖圖8-21 從機(jī)狀態(tài)字的格式約定從機(jī)狀態(tài)字的格式約定其中: ERR(位D7)=1,表示收到非法命令。 TRDY(位D1)=1,表示發(fā)送準(zhǔn)備完畢。 RRDY(位D0)=1,表示接收準(zhǔn)備完畢。 通信時(shí),主機(jī)采用查詢方式,從機(jī)采用中斷方式。主機(jī)串行口設(shè)為方式3,允許接收,并置TB8為1,因?yàn)橹挥幸粋€(gè)主機(jī),所以主
60、機(jī)的SCON控制寄存器中的SM2不要置1,故控制字為11011000,即D8H。/*主機(jī)程序*/ #include #define uchar unsigned char#define Bytenum 16/*傳送一次的字節(jié)數(shù)*/uchar master(uchar addrs, uchar comnd)uchar slave=0 x00;/*從機(jī)地址*/uchar idata rdata16;uchar idata tdata16=“abcdefghijklmnop”;void main(void) uchar i;for(i=0; i10; i+);/*延時(shí)參數(shù)可根據(jù)需要調(diào)整*/TMOD=0 x20;/*設(shè)置T
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉(cāng)儲(chǔ)設(shè)備維護(hù)與管理員聘用與服務(wù)協(xié)議
- 高端車庫(kù)抵押貸款合同范本
- 管道損壞協(xié)議書(shū)范本
- 采棉企業(yè)員工勞動(dòng)合同范本
- 車貸保證金及違約責(zé)任規(guī)范合同
- 環(huán)保工程場(chǎng)地調(diào)查與合同
- 磁通量索力實(shí)時(shí)監(jiān)測(cè)技術(shù)研究與應(yīng)用
- 泥石流區(qū)橋梁清淤導(dǎo)流工程方案
- 非煤礦山安全操作規(guī)程
- 風(fēng)冷機(jī)房空調(diào)的安裝與驗(yàn)收標(biāo)準(zhǔn)
- 河南省許昌市2023-2024學(xué)年三年級(jí)下學(xué)期期末質(zhì)量檢測(cè)語(yǔ)文試卷
- 2024年全國(guó)“紅旗杯”班組長(zhǎng)大賽(復(fù)賽)備考試題庫(kù)(簡(jiǎn)答、案例分析題)
- 全國(guó)住房城鄉(xiāng)建設(shè)行業(yè)職業(yè)技能大賽各賽項(xiàng)技術(shù)文件 C1-建筑信息模型技術(shù)員LS技術(shù)文件
- 北京大學(xué)2024年強(qiáng)基計(jì)劃筆試數(shù)學(xué)試題(解析)
- 2023-2024學(xué)年四川省南充市儀隴縣五年級(jí)數(shù)學(xué)第二學(xué)期期末經(jīng)典試題含解析
- 畜禽屠宰企業(yè)獸醫(yī)衛(wèi)生檢驗(yàn)人員考試試題
- 醫(yī)療廢物污水培訓(xùn)課件
- 設(shè)備維保的預(yù)防性維修與預(yù)防性管理
- 2022-2023學(xué)年湖北省黃岡市武穴市七年級(jí)(下)期末歷史試卷(含解析)
- 2024年江蘇瑞海投資控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 山東省濟(jì)南市南山區(qū)2022-2023學(xué)年六年級(jí)下學(xué)期期末考試語(yǔ)文試題
評(píng)論
0/150
提交評(píng)論