版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第8章 AT89S51單片機的 串行口12全雙工異步串行口全雙工異步串行口并行通信并行通信U 并行通信和串行通信并行通信和串行通信串行通信串行通信數(shù)據(jù)的各位數(shù)據(jù)的各位同同時時傳送(接收)傳送(接收)數(shù)據(jù)的逐位數(shù)據(jù)的逐位分時分時傳送(接收)傳送(接收)U 異步通信和同步通信異步通信和同步通信異步通信(異步通信(Asynchronous Communication):):同步通信同步通信(Synchronous Communication):):同步通信是指通信時要建立發(fā)送方時鐘對接收方時同步通信是指通信時要建立發(fā)送方時鐘對接收方時鐘的直接控制,使收發(fā)雙方達到完全同步的一種通鐘的直接控制,使收發(fā)雙
2、方達到完全同步的一種通信方式。信方式。異步通信是指發(fā)送端和接收端使用各自的時鐘來控制異步通信是指發(fā)送端和接收端使用各自的時鐘來控制數(shù)據(jù)的發(fā)送和接收的一種通信方式。這兩個時鐘源彼數(shù)據(jù)的發(fā)送和接收的一種通信方式。這兩個時鐘源彼此獨立,無需嚴(yán)格同步。此獨立,無需嚴(yán)格同步。4 串行通信的串行通信的3 3種制式種制式: :單工(單工(simplexsimplex) 半雙工(半雙工(half duplexhalf duplex) 全雙工全雙工 (duplexduplex)概述:概述:可編程的全雙工異步串行口可編程的全雙工異步串行口 管腳:管腳:TXD(P3.1)、RXD(P3.0) 可同時發(fā)送、接收數(shù)據(jù)可
3、同時發(fā)送、接收數(shù)據(jù) 四種工作方式,幀格式有四種工作方式,幀格式有8位、位、10位、位、11位位 波特率(波特率(Baud rate)可設(shè)置)可設(shè)置 波特率波特率(比特率比特率):每秒鐘傳送二進制數(shù)的位每秒鐘傳送二進制數(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ù)緩沖器緩沖器兩個物理上獨立兩個物理上獨立的的接收、發(fā)送緩沖器接收、發(fā)送緩沖器發(fā)送緩沖器發(fā)送緩沖器只寫不能讀。只寫不能讀。接收緩沖器接收緩沖器只讀不能寫。只讀不能寫。兩個緩沖器兩個緩沖器共用一個字節(jié)地址共用一個字節(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ù)允許串行接收位允許串行接收位多機通信控制位多機通信控制位允許串行接收位允許串行接收位工作方式選擇位工作方式選擇位9SM0SM1工作工作方式方式功功 能能波波 特特 率率0008位同步移位寄存
5、器(擴展位同步移位寄存器(擴展IO口)口)fosc/1201110位異步收發(fā)(位異步收發(fā)(8位數(shù)據(jù))位數(shù)據(jù))可變,由定時器可變,由定時器1溢溢出率控制出率控制10211位異步收發(fā)(位異步收發(fā)(9位數(shù)據(jù))位數(shù)據(jù))fosc/64或或fosc/3211311位異步收發(fā)(位異步收發(fā)(9位數(shù)據(jù))位數(shù)據(jù))可變,由定時器可變,由定時器1溢溢出率控制出率控制表表8-18-1串行口的工作方式串行口的工作方式8.1.2 8.1.2 電源控制及波特率選擇寄存器電源控制及波特率選擇寄存器PCONPCON10當(dāng)SMOD=1SMOD=1時,要比SMOD=0SMOD=0時波特率加倍,所以也稱SMOD位為波特率倍增位波特率倍
6、增位。例如例如,方式,方式1 1的波特率計算公式:的波特率計算公式: 方式方式1 1波特率波特率 = = 定時器定時器T1T1的溢出率的溢出率SMOD2328.2 8.2 串行口的串行口的4 4種工作方式種工作方式8.2.1 8.2.1 方式方式0 0同步移位寄存器輸入同步移位寄存器輸入/ /輸出方式輸出方式。該方式并。該方式并不用于兩個不用于兩個AT89S51AT89S51單片機之間的異步串行通信單片機之間的異步串行通信,而是,而是用于串行口外接用于串行口外接移位寄存器移位寄存器,擴展并行,擴展并行I/OI/O口??凇? 8位數(shù)據(jù)為一幀,位數(shù)據(jù)為一幀,無無起始位起始位和和停止位停止位,先發(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ù)寫入發(fā)送緩沖器寫入發(fā)送緩沖器SBUFSBUF指令指令時,時,產(chǎn)生一個產(chǎn)生一個正脈沖正脈沖,串行口開始把,串行口開始把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ā)送時序發(fā)送時序如如圖圖8-58-5。12圖圖7-5 方式方式0發(fā)送時序發(fā)送時序13(2 2)方式)方式0 0輸出的應(yīng)用輸出的應(yīng)用 典型應(yīng)用是外擴串行輸入典型應(yīng)用是外擴串行輸入/ /并行輸出的同步移位寄存器并行輸出的同步移位寄存器74LS16474LS164,實現(xiàn)并行輸出端口的擴展。,實現(xiàn)并行輸出端口的擴展。 圖圖8-68-6為串行口工作在方式為串行口工作在方式0 0,通過,通過74LS16474LS164的輸出來控的輸出來控制制8 8個外接個外接LEDLED發(fā)光二極管亮滅的接口電路。當(dāng)串行
9、口被設(shè)置發(fā)光二極管亮滅的接口電路。當(dāng)串行口被設(shè)置在方式在方式0 0輸出時,串行數(shù)據(jù)由輸出時,串行數(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個個LEDLED發(fā)光二極管的接口電路發(fā)光二極管的接口電路 【例例8-18-1】如如圖圖8-68-6所示,編寫程序控制所示,編寫
10、程序控制8 8個發(fā)個發(fā)光二極管輪流點亮。光二極管輪流點亮。 圖中圖中74LS16474LS164的的CLKCLK端為同步脈沖輸入端,端為同步脈沖輸入端,CLRCLR為控制端,當(dāng)為控制端,當(dāng)CLR=0CLR=0時,允許串行數(shù)據(jù)從時,允許串行數(shù)據(jù)從A A和和B B端輸端輸入但是入但是8 8位并行輸出端關(guān)閉;當(dāng)位并行輸出端關(guān)閉;當(dāng)CLR=1CLR=1時,時,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ù)程序中,單片機通過串行
11、口輸出下一個程序中,單片機通過串行口輸出下一個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; /啟動串口發(fā)送啟動串口發(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寄存器寄存器寫入控制字寫入控制字(設(shè)置為方式(設(shè)置為方式0 0,并使,并使RENREN位置位置“1 1”,同時,同時RIRI = = 0 0)時,)時,產(chǎn)生一個正脈沖,串行口開始接收產(chǎn)生一個正脈沖,串行口開始接收數(shù)據(jù)。數(shù)據(jù)。引腳引腳RXDRXD為數(shù)據(jù)輸入端,為數(shù)據(jù)輸入端,TXDTXD為移位脈沖信號輸出端,接收為移位脈沖信號輸出端,接收器以器以f foscosc/12/12的固定波特率的固定波特率采樣采樣RXDRXD引腳的數(shù)據(jù)信息,當(dāng)引腳的數(shù)據(jù)信息,當(dāng)接收完接收完8
14、8位位數(shù)據(jù)時,中斷標(biāo)志數(shù)據(jù)時,中斷標(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ù),時序如時序如圖圖8-78-7。19圖圖7-7 方式方式0接收時序接收時序2021(2 2)方式)方式0 0輸入應(yīng)用舉例輸入應(yīng)用舉例 【例例8-28-2】圖圖8-88-8為串口外接一片為串口外接一片8 8位并行輸入、串行輸出位并行輸入、串行輸出的同步移位寄存器的同步移位寄存器74LS16574LS165,擴展一個,擴展一個8 8位并行輸入口的電路,位并行輸入口的電路,可
15、將接在可將接在74LS16574LS165的的8 8個開關(guān)的狀態(tài)通過串口方式個開關(guān)的狀態(tài)通過串口方式0 0讀入到單片讀入到單片機內(nèi)。機內(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參考程序如下:參考程序如下:查詢方式讀入開關(guān)狀態(tài)查詢方式讀入開關(guān)狀態(tài)作業(yè):中斷方式讀入開關(guān)狀態(tài)作業(yè):中斷方式讀入開關(guān)狀態(tài)8.2.2 8.2.2 方式方式1 1方式方式1 1為雙機串行通
17、信方式,如為雙機串行通信方式,如圖圖8-98-9所示。所示。當(dāng)當(dāng)SM0SM0、SM1=01SM1=01時,串行口設(shè)為方式時,串行口設(shè)為方式1 1的雙機串行通信。的雙機串行通信。TXDTXD腳和腳和RXDRXD腳分別用于發(fā)送和接收數(shù)據(jù)。腳分別用于發(fā)送和接收數(shù)據(jù)。圖圖8-98-9 方式方式1 1雙機串行通信的連接電路雙機串行通信的連接電路24方式方式1 1一幀數(shù)據(jù)為一幀數(shù)據(jù)為1010位位,1 1個起始位(個起始位(0 0),),8 8個數(shù)據(jù)位,個數(shù)據(jù)位,1 1個個停止位(停止位(1 1),),先發(fā)送或接收最低位。幀格式如先發(fā)送或接收最低位。幀格式如圖圖8-108-10。 圖圖8-108-10 方式
18、方式1 1的幀格式的幀格式方式方式1 1為為波特率可變波特率可變的的8 8位異步通信接口。波特率由下式確位異步通信接口。波特率由下式確定:定:方式方式1 1波特率波特率 = = 定時器定時器T1T1的溢出率的溢出率SMODSMOD為為PCONPCON寄存器的最高位的值(寄存器的最高位的值(0 0或或1 1)。)。25SMOD2321 1方式方式1 1發(fā)送發(fā)送方式方式1 1輸出時,數(shù)據(jù)位由輸出時,數(shù)據(jù)位由TXDTXD端端輸出,當(dāng)輸出,當(dāng)CPUCPU執(zhí)行一條數(shù)據(jù)執(zhí)行一條數(shù)據(jù)寫寫SBUFSBUF的指令,就的指令,就啟動發(fā)送啟動發(fā)送。發(fā)送時序見。發(fā)送時序見圖圖8-118-11。圖圖8-118-11中中
19、TXTX時鐘時鐘的頻率就是發(fā)送的波特率。的頻率就是發(fā)送的波特率。26內(nèi)部發(fā)送內(nèi)部發(fā)送控制信號控制信號圖圖8 -11 8 -11 方式方式1 1發(fā)送時序發(fā)送時序中斷標(biāo)志位中斷標(biāo)志位TI置置“1發(fā)送移位發(fā)送移位時鐘信號時鐘信號空閑為空閑為12 2方式方式1 1接收接收方式方式1 1接收時(接收時(RENREN = = 1 1),數(shù)據(jù)從),數(shù)據(jù)從RXDRXD(P3.1P3.1)引腳輸入。當(dāng))引腳輸入。當(dāng)檢測到起始位的檢測到起始位的負跳變負跳變,則,則開始接收開始接收。接收時序見。接收時序見圖圖8-128-12。27 圖圖8-128-12 方式方式1 1接收時序接收時序接收移位接收移位時鐘信號時鐘信號
20、空閑為空閑為1D7接收數(shù)據(jù)有效(能裝入接收數(shù)據(jù)有效(能裝入SBUFSBUF且能被且能被CPUCPU讀出的)的讀出的)的條件:條件:(1 1) RI=0RI=0 ;SM2=0SM2=0(方式(方式1 1時,時,SM2SM2設(shè)為設(shè)為0 0)。)。(2 2) RI=0RI=0 ; RB8RB8 = = 1 1( (控制激活控制激活RIRI的功能的功能) ), SM2=1SM2=1(只有接收到有效的停止位,(只有接收到有效的停止位,RIRI才被才被置置“1”1”。若不滿足任何一個條件,收的數(shù)據(jù)不能被若不滿足任何一個條件,收的數(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(如奇偶校驗位或(如奇偶校驗位或多機通信的地址多機通信的地址/ /數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫入數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫入SBUFSBUF,即啟動發(fā)送。,即啟動發(fā)送。TB8TB8自動裝入自動裝入第第9 9位數(shù)據(jù)位,逐一發(fā)送。位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使發(fā)送完畢,使TITI位置位置“1 1”。 圖圖8-148-14 方式方式2 2和方式和方式3 3發(fā)送時序發(fā)送時序302 2方式方式2 2接收接收 SM0 SM0、SM1=10SM1=10,且,且REN=1REN=1時。數(shù)據(jù)由時。數(shù)據(jù)由RXDRXD端端輸入,當(dāng)位檢輸入,當(dāng)位檢測邏輯采樣到測邏輯采樣到RXDRX
23、D的的負跳變負跳變,判斷起始位有效,便開始接收,判斷起始位有效,便開始接收一幀信息。在接收完第一幀信息。在接收完第9 9位數(shù)據(jù)后,位數(shù)據(jù)后,需滿足以下兩個條件,需滿足以下兩個條件,才能將接收到的數(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)滿足上述兩個條件滿足上述兩個條件時,時,收到的數(shù)據(jù)送收到的數(shù)據(jù)送SBUFSBUF(接收緩沖(接收緩沖器),第器),第9 9位數(shù)據(jù)送入位數(shù)據(jù)送入RB8RB8,
24、且,且RIRI置置“1 1”。若不滿足這兩個若不滿足這兩個條件條件,接收的信息將被丟棄。,接收的信息將被丟棄。31串行口方式串行口方式2 2和方式和方式3 3接收時序接收時序如如圖圖8-158-15。 圖圖8-158-15 方式方式2 2和方式和方式3 3接收時序接收時序328.2.4 8.2.4 方式方式3 3 SM0 SM0、SM1=11SM1=11時,方式時,方式3 3。為波。為波特率可變的特率可變的9 9位異步通信位異步通信方式,方式,除了波特率外,方式除了波特率外,方式3 3和方式和方式2 2相同相同。方式。方式3 3發(fā)送和接發(fā)送和接收時序收時序如如圖圖8-148-14和和圖圖8-1
25、58-15所示。所示。方式方式3 3波特率波特率 = = 定時器定時器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 定時器定時器T1T1產(chǎn)生波特率的計算產(chǎn)生波特率的計算(1 1)方式方式0 0時,波特率時,波特率固定為時鐘頻率固定為時鐘頻率f foscosc的的1/121/12,不受,不受SM
26、ODSMOD位位值的影響。若值的影響。若f foscosc = = 12 MHz12 MHz,波特率,波特率1Mbit/s1Mbit/s。(2 2)方式方式2 2時,波特率僅與時,波特率僅與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波特率波特率 = = 定時器定時
27、器T1T1的溢出率的溢出率 (8-18-1)波特率由波特率由T1T1溢出率溢出率和和SMODSMOD的值的值共同決定共同決定。實際設(shè)定波特率時實際設(shè)定波特率時,T1T1常設(shè)置為方式常設(shè)置為方式2 2定時(自動裝初值),定時(自動裝初值),即即TL1TL1作為作為8 8位計數(shù)器,位計數(shù)器,TH1TH1存放備用初值。存放備用初值。定時器定時器T1T1的溢出率的溢出率 = = (8-28-2)35SM OD232osc/12256256計計數(shù)數(shù)速速率率fXX(3 3)方式)方式1 1或方式或方式3 3時,用時,用T1T1作為波特率發(fā)生器作為波特率發(fā)生器SMODosc23212(256)fX波特率波特
28、率 = = (8-38-3)結(jié)論:波特率結(jié)論:波特率隨隨f foscosc、SMODSMOD和定時器和定時器 TL0TL0初值初值X X而變化。而變化。定時器定時器TL1在方在方式式2的初值為的初值為X 實際使用時,經(jīng)常根據(jù)實際使用時,經(jīng)常根據(jù)已知波特率和時鐘頻率已知波特率和時鐘頻率f foscosc來來計算計算TL1TL1的初值的初值X X。為避免繁雜的初值計算,。為避免繁雜的初值計算,常用的波特率和初值常用的波特率和初值X X間的關(guān)系常列成間的關(guān)系常列成表表8-28-2形式形式,供查用。供查用。36表8-2 用定時器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有兩點需要注意:有兩點需要注意:(1 1)在使用的時鐘振蕩頻率)在使用的時鐘振蕩頻率f foscosc為為12MHz12MHz或或6MHz6MHz時,將初時,將初值值X X和和f foscosc帶入式(帶入式(8-38-3)中計算出的波特率)中計算出的波特率有一定誤差有一定誤差
30、。消。消除誤差可采用除誤差可采用時鐘頻率時鐘頻率11.0592MHz11.0592MHz。(2 2)如果選用)如果選用很低的波特率很低的波特率,如選為,如選為5555,可將定時器,可將定時器T1T1設(shè)為方式設(shè)為方式1 1定時。但這種情況,定時。但這種情況,T1T1溢出時,需在中斷服務(wù)程溢出時,需在中斷服務(wù)程序中重新裝入初值。中斷響應(yīng)時間和執(zhí)行指令時間會使波特序中重新裝入初值。中斷響應(yīng)時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。38【例例8-38-3】 若時鐘頻率為若時鐘頻率為11.0592MHz11.0592MHz,選用
31、選用T1T1的的方式方式2 2定時定時作為波特率發(fā)生器,作為波特率發(fā)生器,波特率為波特率為2 2 .4kbit/s.4kbit/s,求初值。,求初值。 設(shè)設(shè)T1T1為方式為方式2 2定時,選定時,選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、。 這里時鐘振蕩頻率選為這里時鐘振蕩頻率選為11.0592MHz11.0592MHz,就可使就可使初值為整數(shù)初值為整數(shù),從而產(chǎn)生精確的波特率。從而產(chǎn)生精確的波特率。39SMODosc23212(256)fX8.5 8.5 串行通信的應(yīng)用設(shè)計串行通信的應(yīng)用設(shè)計 串行通信接口設(shè)計時,需考慮如下問題。串行通信接口設(shè)計時,需考慮如下問題。 (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單串口的輸入、輸出均為單串口的輸入、輸出均為TTLTTL電平。以電平。以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è)計的應(yīng)用設(shè)計 【例例8-4】如如圖圖甲、乙雙機串行通信,雙機的甲、乙雙機串行通信,雙機的RXD和和TXD相互交叉相連,甲機的相互交叉相連,甲機的P1口接口接8個開關(guān),乙機的個開關(guān),乙機的P1口接口接8個發(fā)光二極管。甲機設(shè)置為只發(fā)不收的單工個發(fā)光二極管。甲機設(shè)置為只發(fā)不收的單工方式。要求甲機讀入方式。要求甲機讀入P1口的口的8個開關(guān)的狀態(tài)后,通過個開關(guān)的狀態(tài)后,通過串行口發(fā)送到乙機,乙機將接收到的甲
35、機的串行口發(fā)送到乙機,乙機將接收到的甲機的8個開關(guān)個開關(guān)的狀態(tài)數(shù)據(jù)送入的狀態(tài)數(shù)據(jù)送入P1口,由口,由P1口的口的8個發(fā)光二極管來顯個發(fā)光二極管來顯示示8個開關(guān)的狀態(tà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è)置定時器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;/ /* *啟動啟動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口開關(guān)的狀態(tài)數(shù)據(jù)并送串行口發(fā)送口開關(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頁書中的程序頁書中的程
38、序是否工作正常,如是否工作正常,如不 能 找 出 原 因不 能 找 出 原 因/*甲機串行發(fā)送甲機串行發(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è)置定時器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;/ /* *啟動啟動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個個LEDLED的亮與滅的亮與滅* */ /n delay(100); delay(100);n RI=0; RI=0;/ /* * 接收到數(shù)據(jù),則把接收到數(shù)據(jù),則把RIRI清清0 0* */ /n n n 45/*乙機串行接收乙機串行接收*/8 8.5.3 方式方式2和方式和方式3的應(yīng)用的應(yīng)用 方式方式2和方式和方式1兩點不同兩點不同: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時,時,n n = = 6464。 當(dāng)當(dāng)SMODSMOD = = 1 1時,時,n n = = 3232。 除波特率的差別外,方式除波特率的差別外,方式2 2的使用和方式的使用和方式3 3是一樣的,是一樣的,所以下面介紹的方式所以下面介紹的方式3 3應(yīng)用編程,也適用于方式應(yīng)用編程,也適用于方式2 2?!纠?-68-6】甲乙兩個單片機進行方式甲乙兩個單片機進行方式3 3(或方式(或方式2 2)串行通訊。甲機將串行通訊。甲機將8 8個流水燈控制數(shù)據(jù)發(fā)送給乙機,
42、個流水燈控制數(shù)據(jù)發(fā)送給乙機,乙機再利用該數(shù)據(jù)點亮其乙機再利用該數(shù)據(jù)點亮其P1P1口的口的8 8個個LEDLED。方式。方式3 3比比方式方式1 1多了一個可編程位多了一個可編程位TB8TB8,該位一般作奇偶校驗,該位一般作奇偶校驗位。乙機接收到的位。乙機接收到的8 8位二進制數(shù)據(jù)有可能出錯,需進位二進制數(shù)據(jù)有可能出錯,需進行奇偶校驗,其方法是將乙機的行奇偶校驗,其方法是將乙機的RB8RB8和和PSWPSW的奇偶校的奇偶校驗位驗位P P進行比較,如相同,接收數(shù)據(jù);否則拒絕接收進行比較,如相同,接收數(shù)據(jù);否則拒絕接收。參考程序如下。參考程序如下。4749甲機發(fā)送程序如下:甲機發(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ā)送一個字節(jié)數(shù)據(jù)的函數(shù)發(fā)送一個字節(jié)數(shù)據(jù)的函數(shù)*/SBUF=dat; /* 將待發(fā)送的數(shù)據(jù)寫入發(fā)送緩沖器將待發(fā)送的數(shù)據(jù)寫入發(fā)送緩沖器*/ TB8=P; /* 將奇偶校驗位寫入將奇偶校驗位寫入TB8*/while(TI=0); /* 檢測發(fā)送標(biāo)志位檢測發(fā)送標(biāo)志位TI, TI=0,未發(fā)送完,未發(fā)送完*/ ; /* 空操作空操作*/TI=0; /* 一個字節(jié)發(fā)送完,一個字節(jié)發(fā)送完,T
44、I清清0*/ void Delay (void) /* 延時大約延時大約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è)置定時器T1為方式為方式2*/SCON=0 xc0;/*設(shè)置串口為方式設(shè)置串口為方式3*/PCON=0 x00; /*SMOD=0*/ TH1=0 xfd; /*給定時器給定時器T1賦初值,波特率設(shè)置為賦初值,波特率設(shè)置為9600*/TL1=0 xfd;TR1=1;/*啟動定
45、時器啟動定時器T1*/ while(1) for(i=0;i8;i+) Send(Tabi ); Delay( );/*大約大約200ms發(fā)送一次數(shù)據(jù)發(fā)送一次數(shù)據(jù)*/ 51乙機接收程序如下:乙機接收程序如下:#include unsigned char Receive(void)/*接收一個字節(jié)數(shù)據(jù)的函數(shù)接收一個字節(jié)數(shù)據(jù)的函數(shù)*/unsigned char dat;while(RI=0); /*檢測接收中斷標(biāo)志檢測接收中斷標(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) /*只有奇偶校驗成功才接收數(shù)據(jù)只有奇偶校驗成功才接收數(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è)置定時器T1為方式為方式2*/SCON=0 xd0;/*設(shè)置串口為方式設(shè)置串口為方式3,允許接收,允許接收REN=1*/PCON=0 x00; /* SMOD=0*/ TH1=0 xfd;/*給定時器給定時器T1賦初值,波特率為賦初值,波特
47、率為9600 */TL1=0 xfd;TR1=1;/*啟動定時器啟動定時器T1*/ while(1)P1= Receive( ); /*將接收到的數(shù)據(jù)送將接收到的數(shù)據(jù)送P1口顯示口顯示*/ 多個單片機利用串口進行多機通信,常采用多個單片機利用串口進行多機通信,常采用圖圖8-168-16的的主主從式結(jié)構(gòu)從式結(jié)構(gòu)。系統(tǒng)中。系統(tǒng)中1 1個主機(單片機或其他有串行接口的微個主機(單片機或其他有串行接口的微機)和多個單片機組成的從機系統(tǒng)。機)和多個單片機組成的從機系統(tǒng)。主機的主機的RXDRXD與所有從機與所有從機的的TXDTXD端相連端相連,TXDTXD與所有從機的與所有從機的RXDRXD端相連端相連。
48、從機地址從機地址分別分別為為01H01H、02H02H和和03H03H。 圖圖8-168-16 多機通信系統(tǒng)示意圖多機通信系統(tǒng)示意圖538.3 8.3 多機通信多機通信 主從式主從式只有一個主機,其余全是從機。只有一個主機,其余全是從機。l 主機主機SM2=0SM2=0;從機;從機SM2=1SM2=1,從機只能接收地址。,從機只能接收地址。l 主機發(fā)送帶主機發(fā)送帶TB8=1TB8=1的地址幀,以選擇要通信的從機。的地址幀,以選擇要通信的從機。l 各從機接收到主機發(fā)送的地址,與本機地址比較。相同時各從機接收到主機發(fā)送的地址,與本機地址比較。相同時向主機發(fā)回本機地址,并置向主機發(fā)回本機地址,并置S
49、M2=0,SM2=0,準(zhǔn)備接收主機發(fā)送給本機準(zhǔn)備接收主機發(fā)送給本機的數(shù)據(jù),其他從機的數(shù)據(jù),其他從機SM2=1;SM2=1;l 主機收到從機回應(yīng)地址后,開始發(fā)送帶主機收到從機回應(yīng)地址后,開始發(fā)送帶TB8=0TB8=0的命令或數(shù)的命令或數(shù)據(jù),按照約定進行通信。據(jù),按照約定進行通信。l 通信結(jié)束后,從機通信結(jié)束后,從機SM2=1SM2=1; 主從式主從式只有一個主機,其余全是從機。只有一個主機,其余全是從機。主機主機發(fā)送的信息發(fā)送的信息可以可以被所有從機接收被所有從機接收,任何一個從機發(fā)送的信息,只能由任何一個從機發(fā)送的信息,只能由主主機機接收。從機和從機之間接收。從機和從機之間不能進行直接通信,不
50、能進行直接通信,只能經(jīng)主機只能經(jīng)主機才才能實現(xiàn)。能實現(xiàn)。 多機通信的工作原理:多機通信的工作原理: 55要保證要保證主機主機與與所選擇的從機所選擇的從機通信,須保證通信,須保證串口有識別功能串口有識別功能。SCON中的中的SM2位位就是為滿足這一條件設(shè)置的就是為滿足這一條件設(shè)置的多機通信控制多機通信控制位位。其工作原理是在串行口以方式。其工作原理是在串行口以方式2(或方式(或方式3)接收時,)接收時,若若SM2=1,則表示進行多機通信,有以下,則表示進行多機通信,有以下兩種情況兩種情況: (1 1)從機接收到主機發(fā)來的)從機接收到主機發(fā)來的第第9 9位數(shù)據(jù)位數(shù)據(jù)RB8=1RB8=1時,時,前前
51、8 8位位數(shù)據(jù)才裝入數(shù)據(jù)才裝入SBUFSBUF,并,并置中斷標(biāo)志置中斷標(biāo)志RIRI = = 1 1,向,向CPUCPU發(fā)出中斷請求。發(fā)出中斷請求。 在中斷服務(wù)程序中,從機把接收到的在中斷服務(wù)程序中,從機把接收到的SBUFSBUF中的數(shù)據(jù)存入中的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)中。數(shù)據(jù)緩沖區(qū)中。 (2 2)如果從機接收到的第)如果從機接收到的第9 9位數(shù)據(jù)位數(shù)據(jù)RB8=0RB8=0時,則時,則不產(chǎn)生不產(chǎn)生中斷標(biāo)志中斷標(biāo)志RI=1RI=1,不引起中斷不引起中斷,從機,從機不接收主機發(fā)來的數(shù)據(jù)不接收主機發(fā)來的數(shù)據(jù)。 若若SM2SM2 = = 0 0,則接收的第,則接收的第9 9位數(shù)據(jù)不論是位數(shù)據(jù)不論是0 0還是還
52、是1 1,從機都,從機都將產(chǎn)生將產(chǎn)生RIRI = = 1 1中斷標(biāo)志,接收到的數(shù)據(jù)裝入中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUFSBUF中。中。56多機通信的工作過程:多機通信的工作過程:(1 1)各各從機從機初始化程序初始化程序允許從機串口中斷,將串允許從機串口中斷,將串口編程為方式口編程為方式2 2或方式或方式3 3接收,即接收,即9 9位異步通信方式,位異步通信方式,且且SM2SM2和和RENREN位位置置“1 1”,使從機處于多機通信且使從機處于多機通信且只只接收地址幀接收地址幀的狀態(tài)。的狀態(tài)。(2 2)在在主機和某從機通信之前主機和某從機通信之前,先將從機地址先將從機地址(即準(zhǔn)備接收數(shù)據(jù)的從
53、機)發(fā)送給各個從機(即準(zhǔn)備接收數(shù)據(jù)的從機)發(fā)送給各個從機,接著,接著才傳送數(shù)據(jù)(或命令),主機發(fā)出的才傳送數(shù)據(jù)(或命令),主機發(fā)出的地址幀信息的地址幀信息的第第9 9位為位為1 1,數(shù)據(jù)(或命令)幀的第數(shù)據(jù)(或命令)幀的第9 9位為位為0 0。當(dāng)主機。當(dāng)主機向各從機發(fā)送地址幀時,各從機的串行口接收到的向各從機發(fā)送地址幀時,各從機的串行口接收到的第第9 9位信息位信息RB8RB8為為1 1,且由于,且由于各從機的各從機的SM2=1SM2=1,57則則RIRI置置“1 1”,各從機各從機響應(yīng)中斷響應(yīng)中斷,在中斷服務(wù)子程序中,在中斷服務(wù)子程序中,判判斷主機送來的地址是否和本機地址相符合,若為本機地址
54、,斷主機送來的地址是否和本機地址相符合,若為本機地址,則該從機則該從機SM2SM2位清位清“0 0”,準(zhǔn)備接收主機的數(shù)據(jù)或命令;若準(zhǔn)備接收主機的數(shù)據(jù)或命令;若地地址不相符址不相符,則,則保持保持SM2SM2 = = 1 1。 (3 3)接著主機發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第接著主機發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第9 9位為位為0 0。此時各從機接收到的。此時各從機接收到的RB8=0RB8=0。 只有與前面只有與前面地址相符合地址相符合的從機(即的從機(即SM2SM2位已清位已清“0 0”的從機)的從機)才能才能激活中斷標(biāo)志位激活中斷標(biāo)志位RIRI,從而進入中斷服務(wù)程序,接收主機,從而進入中斷
55、服務(wù)程序,接收主機發(fā)來的數(shù)據(jù)(或命令);發(fā)來的數(shù)據(jù)(或命令); 與主機發(fā)來的與主機發(fā)來的地址不相符地址不相符的從機,由于的從機,由于SM2SM2保持為保持為1 1,又,又RB8RB8 = = 0 0,因此,因此不能激活中斷標(biāo)志不能激活中斷標(biāo)志RIRI,就不能接受主機,就不能接受主機58發(fā)來的數(shù)據(jù)幀。從而保證發(fā)來的數(shù)據(jù)幀。從而保證主機與從機間通信的正確性主機與從機間通信的正確性。 此時主機與建立聯(lián)系的從機已經(jīng)設(shè)置為單機通信模式,此時主機與建立聯(lián)系的從機已經(jīng)設(shè)置為單機通信模式,即在整個通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第即在整個通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第9 9位位(即(即TB8TB8
56、位)為位)為0 0,防止其他從機誤接收數(shù)據(jù)。,防止其他從機誤接收數(shù)據(jù)。 (4 4)結(jié)束數(shù)據(jù)通信并為下一次的多機通信做好準(zhǔn)備。)結(jié)束數(shù)據(jù)通信并為下一次的多機通信做好準(zhǔn)備。在在多機系統(tǒng),多機系統(tǒng),每個從機都被賦予唯一的地址。每個從機都被賦予唯一的地址。例如,例如,圖圖8-168-16三三個從機的地址可設(shè)為:個從機的地址可設(shè)為:01H01H、02H02H、03H03H。 還要還要預(yù)留預(yù)留1212個個“廣播地址廣播地址”,它是所有從機共有的地它是所有從機共有的地址,例如將址,例如將“廣播地址廣播地址”設(shè)為設(shè)為00H00H。當(dāng)主機與從機的數(shù)據(jù)當(dāng)主機與從機的數(shù)據(jù)通通信結(jié)束后信結(jié)束后,一定要將從機,一定要將
57、從機再設(shè)置為多機通信模式再設(shè)置為多機通信模式,以便進行以便進行下一次的多機通信。下一次的多機通信。59這時要求與主機正在進行數(shù)據(jù)傳輸?shù)膹臋C須隨時這時要求與主機正在進行數(shù)據(jù)傳輸?shù)膹臋C須隨時注意,注意,一旦接收的數(shù)據(jù)第一旦接收的數(shù)據(jù)第9 9位(位(RB8RB8)為)為“1 1”,說,說明主機傳送的不再是數(shù)據(jù),而是地址,這個地址就明主機傳送的不再是數(shù)據(jù),而是地址,這個地址就有有可能是可能是“廣播地址廣播地址”。當(dāng)當(dāng)收到收到“廣播地址廣播地址”后后,便將從機的通信模式再,便將從機的通信模式再設(shè)置成多機模式,為下一次多機通信做好準(zhǔn)備。設(shè)置成多機模式,為下一次多機通信做好準(zhǔn)備。608.5.4 8.5.4
58、主從式多機通信的應(yīng)用主從式多機通信的應(yīng)用介紹主從式多機通信的應(yīng)用編程。介紹主從式多機通信的應(yīng)用編程。 【例例8-78-7】如如圖圖所示,主機分別與三個從機進行通信,這所示,主機分別與三個從機進行通信,這里僅以地址為里僅以地址為01H01H的的1#1#從機為例,實現(xiàn)主從機的通信,其他從從機為例,實現(xiàn)主從機的通信,其他從機的程序與機的程序與1#1#從機相同,只是定義的地址不同。約定如下。從機相同,只是定義的地址不同。約定如下。(1 1)3 3臺從機的地址為臺從機的地址為00H02H00H02H。(2 2)主機發(fā)出的地址)主機發(fā)出的地址FFHFFH為一條控制指令,使所有從機都處于為一條控制指令,使所
59、有從機都處于SM2=1SM2=1的狀態(tài)。的狀態(tài)。(3 3)其余的控制指令:)其余的控制指令:00H00H接收指令,接收指令,01H01H發(fā)送指令。這發(fā)送指令。這兩條指令是作為數(shù)據(jù)發(fā)送的。兩條指令是作為數(shù)據(jù)發(fā)送的。(4 4)從機的狀態(tài)字如)從機的狀態(tài)字如圖圖8-218-21所示。所示。6162圖圖8-21 從機狀態(tài)字的格式約定從機狀態(tài)字的格式約定其中: ERR(位D7)=1,表示收到非法命令。 TRDY(位D1)=1,表示發(fā)送準(zhǔn)備完畢。 RRDY(位D0)=1,表示接收準(zhǔn)備完畢。 通信時,主機采用查詢方式,從機采用中斷方式。主機串行口設(shè)為方式3,允許接收,并置TB8為1,因為只有一個主機,所以主
60、機的SCON控制寄存器中的SM2不要置1,故控制字為11011000,即D8H。/*主機程序*/ #include #define uchar unsigned char#define Bytenum 16/*傳送一次的字節(jié)數(shù)*/uchar master(uchar addrs, uchar comnd)uchar slave=0 x00;/*從機地址*/uchar idata rdata16;uchar idata tdata16=“abcdefghijklmnop”;void main(void) uchar i;for(i=0; i10; i+);/*延時參數(shù)可根據(jù)需要調(diào)整*/TMOD=0 x20;/*設(shè)置T
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測繪管理與法律法規(guī)-2020年注冊測繪師《測繪管理與法律法規(guī)》真題
- 2024年錘紋助劑項目可行性研究報告
- 2024年白喉類毒素項目資金申請報告
- 2024年航天器壓力控制系統(tǒng)組件及零部件項目資金申請報告代可行性研究報告
- 2025年冀教新版選擇性必修1生物下冊階段測試試卷含答案
- 2025年浙科版七年級生物上冊階段測試試卷
- 2025年牛棚租賃與生態(tài)旅游開發(fā)合作合同書4篇
- 二零二五年度奶牛養(yǎng)殖場數(shù)字化轉(zhuǎn)型升級合同4篇
- 二零二五年度木工雕刻藝術(shù)品定制生產(chǎn)合同4篇
- 二零二五年度城市綜合體夜間安全管理打更合同3篇
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學(xué)一模試卷
- 2025中國人民保險集團校園招聘高頻重點提升(共500題)附帶答案詳解
- 重癥患者家屬溝通管理制度
- 法規(guī)解讀丨2024新版《突發(fā)事件應(yīng)對法》及其應(yīng)用案例
- IF鋼物理冶金原理與關(guān)鍵工藝技術(shù)1
- 銷售提成對賭協(xié)議書范本 3篇
- 勞務(wù)派遣招標(biāo)文件范本
- EPC項目階段劃分及工作結(jié)構(gòu)分解方案
- 小學(xué)二年級數(shù)學(xué)口算練習(xí)題1000道
- 家譜、宗譜頒譜慶典講話
評論
0/150
提交評論