第7章串行接口_第1頁
第7章串行接口_第2頁
第7章串行接口_第3頁
第7章串行接口_第4頁
第7章串行接口_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基本概念RS-232接口MCS-51的串行接口單片機與單片機之間的通信第

行接口

本章內(nèi)容SingleChipMicrocomputer7.1串行通信基礎(chǔ)串行通信和并行通信計算機1

GND計算機2

GND并行通信計算機1

GND計算機2

GND發(fā)送接收串行通信并行通信:數(shù)據(jù)的各位同時傳送;串行通信:數(shù)據(jù)一位一位順序傳送。與并行通信相比,串行通信的優(yōu)勢傳輸距離長,可達到數(shù)千公里抗干擾能力強,串行通信信號間的互相干擾完全可以忽略。費用低。串行通信的分類:異步(AsynchronousCommunication)同步(SynchronousCommunication)

串行通信制式:單工(a)、半雙工(b)和全雙工(c)(simplexhalfduplexfullduplex)發(fā)送器A站接收器B站單工通信(a)發(fā)收A站發(fā)收B站發(fā)收A站發(fā)收B站(b)(c)串行通信的通信方式異步通信方式:單片機的串行通信使用的是異步串行通信,異步通信是指發(fā)送方和接收方采用獨立的時鐘,即雙方?jīng)]有一個相同的參考時鐘作為基準。在異步通信中數(shù)據(jù)一般以一個字符為單位進行傳送。用一幀來表示一個字符,一幀信息由起始位(為0信號,占1位)、數(shù)據(jù)位(傳輸時低位在先,高位在后)、奇偶較驗位(可要可不要)和停止位(為1信號,可1位、1位半或2位)組成。同步通信方式:在同步通信中,每個數(shù)據(jù)塊的開頭以同步字符SYN加以指示,使發(fā)送與接受雙方取得同步。數(shù)據(jù)塊的各字符之間沒有起始位和停止位,提高了通信的速度。但為了能保持同步傳送,在同步通信中須用一個時鐘來協(xié)調(diào)收發(fā)器的工作,這就增加了設(shè)備的復(fù)雜性。1.字符格式

雙方要事先約定字符的編碼形式、奇偶校驗形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數(shù)據(jù)為7位,加一個奇偶校驗位、一個起始位和一個停止位共10位。2.波特率波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)之間有以下關(guān)系:

波特率=1個字符的二進制編碼位數(shù)×字符/秒注:在異步通信中,通信雙方必須事先約定字符格式和波特率.異步串行通信基礎(chǔ)異步串行通信協(xié)議串行通信的錯誤校驗奇偶校驗代碼和校驗循環(huán)冗余校驗(CRC)

可自動糾錯所謂誤碼率,是指數(shù)據(jù)經(jīng)傳輸后發(fā)生錯誤的位數(shù)與總傳輸位數(shù)之比。在計算機通信中,一般要求誤碼率達到10-6數(shù)量級。誤碼率與通信線路質(zhì)量、干擾大小及波特率等因素有關(guān)差錯控制誤碼率信號調(diào)制解調(diào)在遠距離通信時,為了降低成本,通常大都采用普通電話線(雙絞線)進行傳輸而這種電話線的頻率有限,通常不超過3000Hz。若要通過電話線傳輸數(shù)字信號,必須采取一定的措施,其方法就是調(diào)制解調(diào)技術(shù)。具體地說,就是在發(fā)送端把數(shù)字信號轉(zhuǎn)換成適合于電話線傳輸?shù)啬M信號,此過程稱為調(diào)制,能夠完成調(diào)制任務(wù)的設(shè)備叫調(diào)制器(Modulator);在接收端再把調(diào)制的模擬信號還原成數(shù)字信號,稱為解調(diào),完成解調(diào)的設(shè)備叫解調(diào)器(Demodulator)。調(diào)制和解調(diào)是一個事物不同的兩個方面,而在一個終端設(shè)備上往往既要調(diào)制,又要解調(diào)(以便完成收/發(fā)任務(wù)),因此,二者缺一不可。通常是把上述兩種功能做在一個設(shè)備中,稱為調(diào)制解調(diào)器(Modulator-Demodulator,縮寫為MODEM)。串行通信的基本特征是數(shù)據(jù)逐位順序進行傳送串行通信的格式及約定(如:同步方式、通訊速率、數(shù)據(jù)塊格式、信號電平……等)不同,形成了多種串行通信的協(xié)議與接口標準。常見的有:?通用異步收發(fā)器(UART)?通用串行總線(USB)?I2C總線?CAN總線?SPI總線?RS-485,RS-232C,RS422A標準……等等串行接口RS-232C標準串行通信系統(tǒng)數(shù)據(jù)終端設(shè)備DTE——數(shù)據(jù)源和目的地數(shù)據(jù)通信設(shè)備DCE——使數(shù)據(jù)符合線路要求串行通信的接口標準1

機械特性2常用的RS-232C信號線信號代號中第一個字母表示信號類型,A為地線,B為數(shù)據(jù)線,C為控制線,D為時鐘信號。3常用的RS-232C連接1).使用MODEM2).不使用MODEM3).最簡單連接4電氣特性1).應(yīng)保證電平在±(5~15)V之間對于數(shù)據(jù)線:邏輯“1”=-3V~-15V,邏輯“0”=+3V~+15V對于控制信號:接通狀態(tài)(ON)即信號有效的電平=+3V~15V斷開狀態(tài)(OUT)即信號無效的電平=-3Ⅴ~-15V。2).電平轉(zhuǎn)換RS-232C接口采用的是負邏輯,其邏輯電平與TTL電平不一樣,不能兼容。因此,為了實現(xiàn)與TTL電路的連接,必須進行電平轉(zhuǎn)換。目前可以使用新型電平轉(zhuǎn)換芯片MAX232和MAX232A(高速)雙組RS-232C發(fā)送/接收器,實現(xiàn)TTL電平與RS-232C電平雙向轉(zhuǎn)換。3).最大傳輸速率和最大傳輸線長度的關(guān)系一般應(yīng)用情況下,RS-232C的最高傳輸速率為20Kb/s,最大傳輸線長度為30m。RS423/RS422/RS485RS232單端驅(qū)動、單端接收,單端雙極性RS423單端驅(qū)動、雙端差分接收,雙極性10MB/S15m90KB/S1200mRS423雙端驅(qū)動、雙端差分接收,平衡方式10MB/S15m90KB/S1200m一個發(fā)送器,多個接收器。RS485雙端驅(qū)動、雙端差分接收,平衡方式10MB/S15m100KB/S1200m多個發(fā)送器,多個接收器。最多32個7.2MCS-51的串行接口概述有一個可編程全雙工串行通信接口(UART)(UniversalAsychronousReceiver/Transmitter

)管腳:TXD(P3.1)、RXD(P3.0)可同時發(fā)送、接收數(shù)據(jù)(Transmit/Receive)有四種工作方式,幀格式有8、10、11位。波特率(Baudrate)可設(shè)置

波特率:每秒鐘傳送二進制數(shù)碼的位數(shù),也叫比特數(shù),單位為b/s,即位/秒。MCS-51串行接口的結(jié)構(gòu)MCS-51串行接口寄存器SBUF——串行口數(shù)據(jù)緩沖器共兩個:一個發(fā)送寄存器SBUF,一個接收SBUF,二者共用一個地址99H。SCON——串行口控制寄存器PCON——電源及波特率選擇寄存器

發(fā)送時,只需將發(fā)送數(shù)據(jù)輸入SBUF,CPU將自動啟動和完成串行數(shù)據(jù)的發(fā)送;

接收時,CPU將自動把接收到的數(shù)據(jù)存入SBUF,用戶只需從SBUF中讀出接收數(shù)據(jù)。1、串行數(shù)據(jù)緩沖器SBUF

在邏輯上只有一個,既表示發(fā)送寄存器,又表示接收寄存器,具有同一個單元地址99H,用同一寄存器名SBUF。在物理上有兩個,一個是發(fā)送緩沖寄存器,另一個是接收緩沖寄存器。指令

MOVSBUF,A

啟動一次數(shù)據(jù)發(fā)送,可向SBUF

再發(fā)送下一個數(shù)指令

MOVA,SBUF

完成一次數(shù)據(jù)接收,SBUF可再接收下一個數(shù)2、串行控制寄存器SCONSCOND7D6D5D4D3D2D1D0位名稱SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H功能工作方式選擇多機通信控制接收允許發(fā)送第9位接收第9位發(fā)送中斷接收中斷①SM0SM1——串行口工作方式選擇位。②SM2——多機通信控制位。③REN——允許接收控制位。REN=1,允許接收。④TB8——方式2和方式3中要發(fā)送的第9位數(shù)據(jù)。⑤RB8——方式2和方式3中要接收的第9位數(shù)據(jù)。⑥TI——發(fā)送中斷標志。⑦RI——接收中斷標志。①SM0SM1——串行口工作方式選擇位。其狀態(tài)組合所對應(yīng)的工作方式如表7-5所示。

SM0SM1工作方式

功能說明000同步移位寄存器輸入/輸出,波特率固定為fosc/1201110位UART;波特率可變(TI溢出率/n,n=32或16)10211位UART,波特率固定為fosc/n,(n=64或32)11311位UART,波特率可變(T1溢出率/n,n=32或16)②SM2------多機通信控制位。在方式2和方式3中,若SM2=1,且RB8(接收到的第9位數(shù)據(jù))=1時,將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請求;否則,將接收到的8位數(shù)據(jù)丟棄。而當(dāng)SM2=0時,則不論第9位數(shù)據(jù)為0還是為1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請求。在方式0時,SM2必須為0。

③REN------允許接收控制位。REN位用于對串行數(shù)據(jù)的接收進行控制:REN=0,禁止接收;REN=1,允許接收。該位由軟件置位或復(fù)位。④TB8------方式2和方式3中要發(fā)送的第9位數(shù)據(jù)。在方式2和方式3時,TB8是發(fā)送的第9位數(shù)據(jù)。在多機通信中,以TB8位的狀態(tài)表示主機發(fā)送的是地址還是數(shù)據(jù):TB8=0表示數(shù)據(jù),TB8=1表示地址。該位由軟件置位或復(fù)位。

TB8還可用于奇偶校驗位。⑤RB8------方式2和方式3中要接收的第9位數(shù)據(jù)。在方式2或方式3時,RB8存放接收到的第9位數(shù)據(jù)。⑥TI------發(fā)送中斷標志。當(dāng)方式0時,發(fā)送完第8位數(shù)據(jù)后,該位由硬件置位。在其他方式下,遇發(fā)送停止位時,該位由硬件置位。因此TI=1,表示幀發(fā)送結(jié)束,可軟件查詢TI位標志,也可以請求中斷。TI位必須由軟件清0。⑦RI------接收中斷標志。當(dāng)方式0時,接收完第8位數(shù)據(jù)后,該位由硬件置位。在其他方式下,當(dāng)接收到停止位時,該位由硬件置位。因此RI=1,表示幀接收結(jié)束,可軟件查詢RI位標志,也可以請求中斷。RI位也必須由軟件清0。接收/發(fā)送數(shù)據(jù),無論是否采用中斷方式工作,每接收/發(fā)送一個數(shù)據(jù)都必須用指令對RI/TI

清0,以備下一次收/發(fā)。3、電源控制寄存器PCONPCOND7D6D5D4D3D2D1D0位名稱SMOD———GF1GF0PDIDL1.SMOD=1,串行口波特率加倍。PCON寄存器不能進行位尋址。?

SMOD:在串行口工作方式1、2、3中,是波特率加倍位

=1時,波特率加倍

=0時,波特率不加倍。

(在PCON中只有這一個位與串口有關(guān))2)GF1,GF0--用戶可自行定義的通用標志位3)PD--掉電方式控制位

PD=0:常規(guī)工作方式

PD=1:進入掉電方式

CPU處于掉電方式時,振蕩器停振,片內(nèi)RAM和SRF的值保持不變,P0—P3口維持原狀,程序停止。只有復(fù)位能退出掉電方式。

4)IDL--待機方式(空閑方式)控制位。

IDL=0:常規(guī)工作方式

IDL=1:進入待機方式

CPU處于待機方式時,振蕩器繼續(xù)振蕩,中斷、定時器、串口功能繼續(xù)有效,片內(nèi)RAM和SRF保持不變,CPU狀態(tài)保持,P0—P3口維持原狀,程序停頓。中斷、復(fù)位都能退出待機狀態(tài)。

二、串行工作方式

80C51串行通信共有4種工作方式,由串行控制寄存器SCON中SM0SM1決定。

1、串行工作方式0(同步移位寄存器工作方式)以RXD(P3.0)端作為數(shù)據(jù)移位的輸入/輸出端,以TXD(P3.1)端輸出移位脈沖。移位數(shù)據(jù)的發(fā)送和接收以8位為一幀,不設(shè)起始位和停止位,無論輸入/輸出,均低位在前高位在后。其幀格式為:???D0D1D2D3D4D5D6D7???1)發(fā)送數(shù)據(jù)

將數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,TXD端輸出移位脈沖,串行口把SBUF中的數(shù)據(jù)依次由低到高以fosc/12的波特率從RXD端輸出,一幀數(shù)據(jù)發(fā)送完畢后硬件置發(fā)送中斷標志位TI為1。若要再次發(fā)送數(shù)據(jù),必須用指令將TI清零。2)接收數(shù)據(jù)

在RI=0的條件下,用指令置REN=1即可開始串行接收。TXD端輸出移位脈沖,數(shù)據(jù)依次由低到高以fosc/12的波特率經(jīng)RXD端接收到SBUF中,一幀數(shù)據(jù)接收完成后硬件置接收中斷標志位RI為1。若要再次接收一幀數(shù)據(jù),應(yīng)該用指令MOVA,SBUF將上一幀數(shù)據(jù)取走,并用指令將RI清零。

3)方式0工作時,多用查詢方式編程:發(fā)送:

MOVSBUF,A

JNBTI,$

CLRTI

……接收:

JNBRI,$

CLRRI

MOVA,SBUF

……

注)復(fù)位時,SCON被清零,工作方式的缺省值為方式0。接收前,務(wù)必先置位REN=1方允許接收數(shù)據(jù)。⑴數(shù)據(jù)發(fā)送

在移位時鐘脈沖(TXD)的控制下,數(shù)據(jù)從串行口RXD端逐位移入74HC164SA、SB端。當(dāng)8位數(shù)據(jù)全部移出后,SCON寄存器的TI位被自動置1。其后74HC164的內(nèi)容即可并行輸出。74HC164CLR為清0端,輸出時CLR必須為1,否則74HC164Q0~Q7輸出為0。

串行口作為并行輸出口使用時,要有“串入并出”的移位寄存器配合。(例如CD4094或74HCl64)

4)方式0可將串行輸入輸出數(shù)據(jù)轉(zhuǎn)換成并行輸入輸出數(shù)據(jù)。(2)數(shù)據(jù)接收

串行口作為并行輸入口使用時,要有“并入串出”的移位寄存器配合。(例如CD4014或74HCl65)

74HC165S/L端為移位/置入端,當(dāng)S/L=0時,從Q0~Q7并行置入數(shù)據(jù),當(dāng)S/L=1時,允許從QH端移出數(shù)據(jù)。在80C51串行控制寄存器SCON中的REN=1時,TXD端發(fā)出移位時鐘脈沖,從RXD端串行輸入8位數(shù)據(jù)。當(dāng)接收到第8位數(shù)據(jù)D7后,置位中斷標志RI,表示一幀數(shù)據(jù)接收完成。應(yīng)用舉例【例7-1】電路如圖所示,試編制程序按下列順序要求每隔0.5秒循環(huán)操作。④

從右向左依次點亮,每次亮一個;⑤從左向右依次點亮,每次增加一個, 直至全部點亮;⑥返回從②不斷循環(huán)。①8個發(fā)光二極管全部點亮;②從左向右依次暗滅,每次減少一個,直至全滅;③

從左向右依次點亮,每次亮一個;解:編程如下:LIGHT:MOVSCON,#00H;串行口方式0CLRES;禁止串行中斷MOVDPTR,#TAB;置發(fā)光二極管亮暗控制字表首址LP1:MOVR7,#0;置順序編號0LP2:MOVA,R7;讀順序編號

MOVCA,@A+DPTR;讀控制字

CLRP1.0;關(guān)閉并行輸出,STR=O時,關(guān)閉并行輸出;

MOVSBUF,A;啟動串行發(fā)送

JNBTI,$

;等待發(fā)送完畢

CLRTI;清發(fā)送中斷標志

SETBP1.0;開啟并行輸出,STR=1時,開啟并行輸出;

LCALLDLY500ms;調(diào)用延時0.5秒子程序INCR7;指向下一控制字

CJNER7,#30,LP2;判循環(huán)操作完否?未完繼續(xù)

SJMPLP1;順序編號0~29依次操作完畢,從0開始重新循環(huán)TAB:

DB0FFH,7FH,3FH,1FH,0FH,07H,03H,01H,00H;從左向右依次暗滅,

每次減少一個,直至全滅;DB80H,40H,20H,10H,08H,04H,02H,01H;從左向右依次點亮,每次亮一個

DB02H,04H,08H,10H,20H,40H,80H;從右向左依次點亮,每次亮一個

DB0C0H,0E0H,0F0H,0F8H,0FCH,0FEH;從左向右依次點亮,

每次增加一個,直至全部點亮;【例】電路如圖所示,試編制程序輸入K1~K8狀態(tài)數(shù)據(jù),并存入內(nèi)RAM40H。解:編程如下:

KIN:

MOVSCON,#00H;串行口方式0CLRES ;禁止串行中斷

CLRP1.0;鎖存并行輸入數(shù)據(jù)

SETBP1.0;允許串行移位操作

SETBREN;允許并啟動接收(TXD發(fā)送移位脈沖)

JNBRI,$ ;等待接收完畢

MOV40H,SBUF;存入K1~K8狀態(tài)數(shù)據(jù)

RET;2.工作方式1

一幀數(shù)據(jù)有1O位,1位起始位(低電平信號),8位數(shù)據(jù)位(先低位后高位),1位停止位(高電平信號)。

波特率可變,由定時器/計數(shù)器T1的溢出率和SMOD(PCON.7)決定。其格式如下:起始位數(shù)據(jù)位停止位0D0D1D2D3D4D5D6D711)發(fā)送數(shù)據(jù)

將數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,在串行口由硬件自動加入起始位和停止位來構(gòu)成完整的字符幀,并在移位脈沖的作用下將其通過TXD端向外串行發(fā)送,一幀數(shù)據(jù)發(fā)送完畢后硬件自動置TI=1。再次發(fā)送數(shù)據(jù)前,用指令將TI清零。

(p156表7-9)2)接收數(shù)據(jù)

在REN=1的條件下,串行口采樣RXD端,當(dāng)采樣到從1向0的狀態(tài)跳變時,就認定為已接收到起始位。隨后在移位脈沖的控制下,數(shù)據(jù)從RXD端輸入。在方式1接收數(shù)據(jù)時,必須同時滿足以下兩個條件:RI=0,SM2=0或接收數(shù)據(jù)的停止位為1。若有任一條件不滿足,則所接收的數(shù)據(jù)幀就會丟失。在滿足上述接收條件時,接收到的8位數(shù)據(jù)位進入接收緩沖器SBUF,停止位送入RB8,并置中斷標志位RI=1。再次接收數(shù)據(jù)前,需用指令將RI清零。

在實際應(yīng)用時,通常是先確定波特率,后根據(jù)波特率求T1定時初值,因此上式又可寫為:⑶波特率

方式1波特率可變,由定時/計數(shù)器T1的計數(shù)溢出率來決定。波特率=2SMOD×(T1溢出率)/32

其中SMOD為PCON寄存器中最高位的值,SMOD=1表示波特率倍增。當(dāng)定時/計數(shù)器T1用作波特率發(fā)生器時,通常選用定時初值自動重裝的工作方式2。其計數(shù)結(jié)構(gòu)為8位,假定計數(shù)初值為X,單片機的機器周期為T,則定時時間為(256-X)*T。從而在1s內(nèi)發(fā)生溢出的次數(shù)(即溢出率)為:

波特率=(2SMOD/32)T1的溢出率波特率=(2SMOD/32)T1的溢出率?溢出率:T1溢出的頻繁程度即:T1溢出一次所需時間的倒數(shù)。?初值X=2n

-2SMODfosc32波特率

12?波特率=2SMODfosc3212(2n

-X)其中:X是定時器初值⑷應(yīng)用舉例【例7-3】設(shè)甲乙機以串行方式1進行數(shù)據(jù)傳送,fosc=11.0592MHz,波特率為1200b/s。甲機發(fā)送的16個數(shù)據(jù)存在內(nèi)RAM40H~4FH單元中,乙機接收后存在內(nèi)RAM50H為首地址的區(qū)域中。

T1初值=256-×=232=E8H3212×1200解: 串行方式1波特率取決于T1溢出率(設(shè)SMOD=0), 計算T1定時初值:

1105920020甲機發(fā)送子程序:

MOVTMOD,#20H ;置T1定時器工作方式2 MOVTL1,#0E8H ;置T1計數(shù)初值

MOVTH1,#0E8H ;置T1計數(shù)重裝值

CLRET1 ;禁止T1中斷

SETBTR1 ;T1啟動

MOVSCON,#40H ;置串行方式1,禁止接收

MOVPCON,#00H ;置SMOD=0(SMOD不能位操作)

CLRES ;禁止串行中斷

MOVR0,#40H ;置發(fā)送數(shù)據(jù)區(qū)首地址

MOVR2,#16 ;置發(fā)送數(shù)據(jù)長度

MOV A,@R0 ;讀一個數(shù)據(jù)

MOV SBUF,A ;發(fā)送

JNB TI,$ ;等待一幀數(shù)據(jù)發(fā)送完畢

CLR TI ;清發(fā)送中斷標志

INC R0 ;指向下一字節(jié)單元

DJNZ R2,TRSA ;判16個數(shù)據(jù)發(fā)完否?未完繼續(xù)

RET ;TXDA:

TRSA:

MOVTMOD,#20H ;置T1定時器工作方式2 MOVTL1,#0E8H ;置T1計數(shù)初值

MOVTH1,#0E8H ;置T1計數(shù)重裝值

CLRET1 ;禁止T1中斷

SETBTR1 ;T1啟動

MOVSCON,#40H ;置串行方式1,禁止接收

MOVPCON,#00H ;置SMOD=0(SMOD不能位操作) CLRES ;禁止串行中斷

MOVR0,#50H ;置接收數(shù)據(jù)區(qū)首地址

MOVR2,#16 ;置接收數(shù)據(jù)長度

SETBREN

;啟動接收

JNB RI,$ ;等待一幀數(shù)據(jù)接收完畢

CLR RI ;清接收中斷標志

MOV A,SBUF ;讀接收數(shù)據(jù)

MOV @R0,A ;存接收數(shù)據(jù)

INC R0 ;指向下一數(shù)據(jù)存儲單元

DJNZ R2,RDSB ;判16個數(shù)據(jù)接收完否?未完繼續(xù)

RET;乙機接收子程序:RXDB:RDSB:方式2是一幀11位的串行通信方式3、

串行工作方式2起始D0D1D2D3D4D5D6D7TB8/RB8停止當(dāng)SMOD=0時,波特率=20

╳fosc/64=fosc/64當(dāng)SMOD=1時,波特率=21

╳fosc/64=fosc/32

數(shù)據(jù)發(fā)送和接收與方式1基本相同,區(qū)別在于方式2把發(fā)送/接收到的第9位內(nèi)容送入TB8/RB8。

波特率:方式2波特率固定。如用公式表示則為:波特率=2SMOD╳fosc/64【例7-4】設(shè)計一個串行方式2發(fā)送子程序(SMOD=1),將片內(nèi)RAM50H~5FH中的數(shù)據(jù)串行發(fā)送,第9數(shù)據(jù)位作為奇偶校驗位。接到接收方核對正確的回復(fù)信號(用FFH表示)后,再發(fā)送下一字節(jié)數(shù)據(jù),否則再重發(fā)一遍。解:程序如下:MOVA,@R0;讀數(shù)據(jù)MOVC,PSW.0;奇偶標志送TB8MOVTB8,C;MOVSBUF,A;啟動發(fā)送JNBTI,$;等待一幀數(shù)據(jù)發(fā)送完畢CLRTI;清發(fā)送中斷標志SETBREN;允許接收CLRRI;清接收中斷標志JNBRI,$;等待接收回復(fù)信號MOVA,SBUF;讀回復(fù)信號CPLA;回復(fù)信號取反JNZTRLP;非全0(回復(fù)信號≠FFH,錯誤),轉(zhuǎn)重發(fā)INCR0;全0(回復(fù)信號=FFH,正確), 指向下一數(shù)據(jù)存儲單元CJNER0,#60H,TRLP;判16個數(shù)據(jù)發(fā)送完否?未完繼續(xù)RET;TRLP:MOVSCON,#80H;置串行方式2,禁止接收MOVPCON,#80H;置SMOD=1MOVR0,#50H ;置發(fā)送數(shù)據(jù)區(qū)首址TRS2:【例7-5】編制一個串行方式2接收子程序,接收上例發(fā)送的16個數(shù)據(jù),存首址為40H的內(nèi)RAM中,并核對奇偶校驗位,接收核對正確,發(fā)出回復(fù)信號FFH;發(fā)現(xiàn)錯誤,發(fā)出回復(fù)信號00H,并等待重新接收。RXD2:MOVSCON,#80H;置串行方式2,禁止接收

MOVPCON,#80H;置SMOD=1MOVR0,#40H;置接收數(shù)據(jù)區(qū)首址

SETBREN;啟動接收RWAP:JNBRI,$;等待一幀數(shù)據(jù)接收完畢

CLRRI

;清接收中斷標志

MOVA,SBUF;讀接收數(shù)據(jù),并在PSW中產(chǎn)生接收數(shù)據(jù)的奇偶值

JBPSW.0,ONE;P=1,轉(zhuǎn)另判

JBRB8,ERR;P=0,RB8=1,接收有錯;

;P=0,RB8=0,接收正確,繼續(xù)接收RLOP:MOV@R0,A;存接收數(shù)據(jù)

INCR0;指向下一數(shù)據(jù)存儲單元RIT:MOVA,#0FFH;置回復(fù)信號正確FDBK:MOVSBUF,A;發(fā)送回復(fù)信號

CJNER0,#50H,RWAP;判16個數(shù)據(jù)接收完否?未完繼續(xù)

CLRREN;16個數(shù)據(jù)正確接收完畢,禁止接收

RET;ONE:JNBRB8,ERR;P=1,RB8=0,接收有錯

SJMPRLOP;P=1,RB8=1,接收正確,繼續(xù)接收ERR:CLRA;接收有錯,置回復(fù)信號錯誤標志

SJMPFDBK;轉(zhuǎn)發(fā)送回復(fù)信號解:程序如下:

方式3同樣是一幀11位的串行通信方式,其通信過程與方式2完全相同,所不同的僅在于波特率。方式2的波特率只有固定的兩種,而方式3的波特率則與方式1相同,即通過設(shè)置T1的初值來設(shè)定波特率。4、串行工作方式35、串行口四種工作方式的比較

四種工作方式的區(qū)別主要表現(xiàn)在幀格式及波特率兩個方面。表7-2四種工作方式比較工作方式幀格式波特率方式08位全是數(shù)據(jù)位,沒有起始位、停止位固定,即每個機器周期傳送一位數(shù)據(jù)方式110位,其中1位起始位,8位數(shù)據(jù)位,1位停止位不固定,取決于T1溢出率和SMOD方式211位,其中1位起始位,9位數(shù)據(jù)位,1位停止位固定,即2SMOD×fosc/64方式3同方式2同方式1

解決的方法只有調(diào)整單片機的時鐘頻率fosc,通常采用11.0592MHz晶振。6、常用波特率及其產(chǎn)生條件

常用波特率通常按規(guī)范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,則計算得出的T1定時初值將不是一個整數(shù),產(chǎn)生波特率誤差而影響串行通信的同步性能。MCS-51串行口的波特率1.方式0和方式2的波特率是固定的在方式2中,波特率取決于PCON中的SMOD值:當(dāng)SMOD=0時,波特率為fosc/64;當(dāng)SMOD=1時,波特率為fosc/32.即波特率=。oscSMODf642在方式0中,波特率為時鐘頻率的1/12,即fosc/12,固定不變2.方式1和方式3的波特率可變,由定時器1的溢出率決定波特率/(b/s)fosc/MHzSMOD定時器1C/模式初始值方式0:1M方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBHT波特率=單片機之間的通信雙機異步通信接口電路雙機通信軟件編程查詢方式1)甲機發(fā)送編程將甲機片外1000H~101FH單元的數(shù)據(jù)塊從串行口輸出。定義方式2發(fā)送,TB8為奇偶校驗位。發(fā)送波特率375kb/s,晶振為12MHz,SMOD=1。參考發(fā)送子程序如下:

MOV SCON,#80H;設(shè)置串行口為方式2

MOV PCON,#80H;SMOD=1 MOV DPTR,#1000H;設(shè)數(shù)據(jù)塊指針

MOV R7,#20H;設(shè)數(shù)據(jù)塊長度START:MOVXA,@DPTR;取數(shù)據(jù)給A MOV C,P MOV TB8,C;奇偶位P送給TB8MOV SBUF,A;數(shù)據(jù)送SBUF,啟動發(fā)送WAIT:JBCTI,CONT;判斷一幀是否發(fā)送完。若送完,清TI,取下一個數(shù)據(jù)

AJMPWAIT;未完等待

CONT:INCDPTR;更新數(shù)據(jù)單元

DJNZR7,START;循環(huán)發(fā)送至結(jié)束

RET2)乙機接收編程使乙機接收甲機發(fā)送過來的數(shù)據(jù)塊,并存入片內(nèi)50H~6FH單元。接收過程要求判斷RB8,若出錯置F0標志為1,正確則置F0標志為0,然后返回。在進行雙機通信時,兩機應(yīng)采用相同的工作方式和波特率。參考接收子程序如下:

MOVSCON,#80H ;設(shè)置串行口為方式2

MOVPCON,#80H ;SMOD=1

MOVR0,#50H ;設(shè)置數(shù)據(jù)塊指針

MOVR7,#20H ;設(shè)置數(shù)據(jù)塊長度

SETBREN ;啟動接收

WAIT:JBCRI,READ;判斷是否接收完一幀。若完,清RI,讀入數(shù)據(jù) AJMPWAIT;未完等待

READ:MOVA,SBUF;讀入一幀數(shù)據(jù)a

JNBPSW.0,PZ;奇偶位為0則轉(zhuǎn)

JNBRB8,ERR;P=1,RB8=0,則出錯

SJMPRIGHT;二者全為1,則正確

PZ:JBRB8,ERR;P=0,RB8=1,則出錯

RIGHT:MOV@R0,A ;正確,存放數(shù)據(jù)

INCR0 ;更新地址指針

DJNZR7,WAIT ;判斷數(shù)據(jù)塊是否接收完

CLRPSW.5 ;接收正確,且接收完清F0標志

RET ;返回

ERR:SETBPSW.5 ;出錯,置F0標志為1

RET ;返回例7-7:甲、乙兩單片機以工作方式1進行串行數(shù)據(jù)通信,波特率為1200,甲機發(fā)送,發(fā)送數(shù)據(jù)在甲機外部RAM的1000H-101FH單元中。乙機接收,并把接收數(shù)據(jù)依次放入乙機外部RAM的1000H-101FH單元中。甲,乙機晶振頻率均為11.0592MHz。連接方式如圖7-33所示。圖7-33硬件連接圖分析:①甲、乙機定時用工作方式1,查表7-13(教材p162)得初值為E8H。②SMOD=0,即波特率不倍增。

③用查詢傳送方式。④SCON=01000000B=40H

甲機發(fā)送主程序如下:

ORG0000H

AJMPMAIN;復(fù)位入口轉(zhuǎn)主程序

ORG0100HMAIN:MOVTMOD,#20H;設(shè)定時器1工作方式2

MOVTL1,#0E8H;設(shè)置定時器初值MOVTH1,#0E8H;設(shè)置重裝值

CLREA;禁止中斷

MOVPCON,#00H;(SMOD)=0

MOVSCON,#40H;設(shè)串行工作方式1,禁止接收

MOVDPTR,#1000H;建立發(fā)送數(shù)據(jù)地址指針初

MOVR7,#20H;建立計數(shù)指針

SETBTR1;啟動定時器1

SEND:MOVXA,@DPTR;取數(shù)據(jù)

MOVSBUF,A;啟動數(shù)據(jù)傳送操作

JNBTI,$;等待一幀發(fā)送完畢

CLRTI;清TI標志

INCDPTR;指向下一單元DJNZR7,SEND;數(shù)據(jù)塊傳送結(jié)束?

CLRTR1;傳送結(jié)束,停止定時器1工作END乙機接收主程序如下:

ORGAJMPORGMOVMOVMOVCLRMOVMOVMOVMOVSETBSETBJNBCLRMOVMOVXINCDJNZCLREND0000HMAIN0100HTMOD,#20HTL1,#0E8HTH1,#0E8HEAPCON,#00HSCON,#40HDPTR,#1000HR7,#20HTR1RENRI,$RIA,SBUF@DPTR,ADPTRR7,RECIVTR1;復(fù)位入口轉(zhuǎn)主程序;設(shè)定時器1工作方式2;設(shè)置定時器初值;設(shè)置重裝值;禁止中斷;SMOD=0;設(shè)串行工作方式1;建立接收地址指針初值;建立計數(shù)指針;啟動定時器T1;啟動接收數(shù)據(jù)操作;等待數(shù)據(jù)接收完畢;清RI標志;取數(shù)據(jù);送外部RAM;指向下一單元;數(shù)據(jù)塊接收完畢?沒完繼續(xù)接收;接收完畢,停止定時器1工作MAIN:RECIV:多機通信

MCS-51單片機工作在串行方式2、3時,具有多機通信功能,可以實現(xiàn)一臺主機與多臺從機的信息交流。通信只在主從機之間進行,而從機與從機之間不可以直接通信。下圖為8051單片機的主從式多機通訊系統(tǒng)。

RXDTXD主機8051RXDTXD80510#從機RXDTXD80511#從機RXDTXD8051N#從機主從多機通信的過程如下:

1)使所有的從機工作在方式2或方式3,且SM2位置1,REN=1,以便接收主機發(fā)來的地址。2)主機發(fā)出要尋址的從機的一幀地址信息,其中包括8位需要與之通信的從機地址,第9位TB8=1。3)所有從機接收到地址幀后,置RI=1。4)各從機相應(yīng)中斷,進入中斷服務(wù)程序,進行地址比較。對于地址相同的從機,使SM2=0,準備接收主機隨后發(fā)來的數(shù)據(jù)信息;對于地址不符合的從機,仍保持SM2=1的狀態(tài),對主機隨后發(fā)來的數(shù)據(jù)不予理睬,直至發(fā)送新的地址幀。5)主機給已被尋址的從機發(fā)送控制指令和數(shù)據(jù)(數(shù)據(jù)幀的第9位為0)實現(xiàn)主從通信。6.主從式多機通信應(yīng)用舉例

(1)主機向02號從機發(fā)送50H一5FH單元內(nèi)的數(shù)據(jù),串行工作方式2。

ORG2000HMAIN:MOVSCON,#98H;串行口方式2,令SM2=0、REN=1、RTB8=1M1:MOVSBUF,#02H;呼叫02號從機L1:JBCTI,L2SJMPL1L2:JBCRI,S1;等待從機應(yīng)答

SJMPL2S1:MOVA,SBUF;取出應(yīng)答地址

XRLA,#02H;判斷是否02號機應(yīng)答JZRIGHT;若02從機,轉(zhuǎn)發(fā)送AJMPM1;若不是,重新呼叫RIGHT:CLRTB8;聯(lián)絡(luò)成功,清除地址標志

MOVR0,#50H;數(shù)據(jù)區(qū)首址送R0MOVR7,#10H;字節(jié)數(shù)送R7LOOP:MOVA,@R0;取發(fā)送數(shù)據(jù)

MOVSBUF,A;啟動發(fā)送WA:JBCTI,CON;判發(fā)送中斷標志

SJMPWACON:INCR0DJNZR7,LOOPAJMPMAINEND(2)從機(02號)響應(yīng)主機呼叫的聯(lián)絡(luò)程序

ORG2000HMOVR0,#50H;從機數(shù)據(jù)區(qū)首址

MOVR7,#10H;字節(jié)長度

SI:MOVSCON,#0B0H;串行口工作方式2,SM=1,REN=1SR1:JBCRI,SR2;等待主機發(fā)送

SJMPSR1SR2:MOVA,SBUF;取出呼叫地址

XRLA,#02H;判斷是否呼叫本機

JNZSR1;若不是本機,繼續(xù)等待

CLRSM2;是本機,清SM2MOVSBUF,#02H;向主機發(fā)應(yīng)答地址

WT:JBCTI,SR3;發(fā)完地址轉(zhuǎn)

SJMPWT;未發(fā)送完繼續(xù)SR3:JBCRI,SR4;等待主機發(fā)送數(shù)據(jù)

SJMPSR3SR4:JNBRB8,RIGHT;再判斷聯(lián)絡(luò)成功否

SETBSM2;未聯(lián)絡(luò)成功,恢復(fù)等待主機發(fā)送

SJMPSR1RIGHT:MOVA,SBUF;聯(lián)絡(luò)成功,取主機發(fā)來的信息

MOV@R0,A;數(shù)據(jù)送緩沖區(qū)

INCR0DJNZR7,SR3;未接收完繼續(xù)

AJMPSIEND舉例(P167)主機發(fā)送的地址聯(lián)絡(luò)信號為00H,01H,02H…,地址為FFH時命令各從機復(fù)位,即恢復(fù)SM=1主機命令編碼為:01H,主機命令從機接收數(shù)據(jù)02H,主機命令從機發(fā)送數(shù)據(jù)程序分為主機程序和從機程序,約定一次傳遞的數(shù)據(jù)為16字節(jié),以01H地址的從機為例主機程序如下:

ORG 0000H AJMP MAIN ORG 0030HMAIN: MOV TMOD,#20;T1,方式2 MOVTH1,#0FDH;波特率 MOV TL1,#0FDH MOVPCON,#00H SETBTR1 MOVSCON,#0F0H;方式3LOOP1: SETB TB8MOV SBUF,40 JNB TI,$ CLR TI

JNB RI,$;等待從機對聯(lián)絡(luò)應(yīng)答CLR RIMOV A,SBUFXRLA,40JZ AD_OKMOV SBUF,#0FFH;應(yīng)答錯誤

JNB TI,$CLR TISJMPLOOP1;CLR TB8MOV SBUF,41H;發(fā)送命令字JNB TI,$CLR TIJNB RI,$CLR RIAD_ERR:AD_OK:

MOV A,SBUF;接收應(yīng)答到A XRLA,#80 JNZCO_OKSETB TB8SJMPADD_ERRCO_OK:MOV A,SBUF; XRLA,#01 JZSE_DATA;可以發(fā)送數(shù)據(jù)

MOV A,SBUF; XRLA,#02 JZRE_DATA;可以接收數(shù)據(jù)SJMPSE_DATARE_DATA:MOVR6,#00 MOVR0,#30 MOVR7,#10JNB RI,$;CLR RIMOV A,SBUFMOV@R0,AINCR0ADDA,

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論