第七章串行數(shù)據(jù)通信_第1頁
第七章串行數(shù)據(jù)通信_第2頁
第七章串行數(shù)據(jù)通信_第3頁
第七章串行數(shù)據(jù)通信_第4頁
第七章串行數(shù)據(jù)通信_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

7-1串行通信基礎(chǔ)知識7-2串行口及控制寄存器7-3串行通信工作方式7-4串行口的應用第7章串行數(shù)據(jù)通信7-1串行通信基礎(chǔ)知識一、串行通信基本原理: 并行 數(shù)據(jù)傳送 同步(SYNC)

串行異步(ASYNC)(用于單片機中)

并行數(shù)據(jù)傳送串行數(shù)據(jù)傳送原理各數(shù)據(jù)位同時傳送數(shù)據(jù)位按位順序進行優(yōu)點傳送速度快、效率高最少只需一根傳輸線即可完成:成本低缺點數(shù)據(jù)位數(shù)→傳輸線根數(shù):成本高速度慢應用傳送距離<30米,用于計算機內(nèi)部幾米~幾千公里,用于計算機與外設(shè)之間異步通信的雙方需要兩項約定:1.字符格式:一幀字符位數(shù)的規(guī)定:數(shù)據(jù)位,校驗位,起始位和停止位。2.波特率-Baudrate(位/秒)即數(shù)據(jù)傳送速率的規(guī)定:例:要求每秒傳送120個字符,每幀為10位。解:傳送的波特率為:B=120字符/s×10b/字符=1200波特(b/s)

每位代碼的傳送時間Td=0.83ms(二)同步通信:

以一串字符為一個傳送單位,字符間不加標識位,在一串字符開始用同步字符(常約定1~2個)標識,硬件要求高,通訊雙方須嚴格同步。二、串行通信的基本方式:(一)異步通信:以字符為傳送單位用起始位和停止位標識每個字符的開始和結(jié)束字符,間隔不固定,只需字符傳送時同步即可。異步通訊常用格式:一個字符幀D0D1D2D3D4D5D6D7停止位起始位在同步傳送中,當檢測到規(guī)定的同步字符后,就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落;同步傳送時,字符與字符之間眉宇間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符來表示.同步字符的插入可以是單同步字符或雙同步字符,然后是連續(xù)的數(shù)據(jù)塊;同步字符可以是由用戶約定,也可以采用ASCII碼中規(guī)定的同步字符SYNC代碼,即16H.在同步傳送時,要求用時鐘來實現(xiàn)通信雙方的同步,因此發(fā)送方除傳送數(shù)據(jù)外,還要同時傳送時鐘信號.因此硬件要求較高三、串行接口功能:(1)發(fā)送器:并串數(shù)據(jù)格式轉(zhuǎn)換,添加標識位和校驗位,一幀發(fā)送結(jié)束,設(shè)置結(jié)束標志,申請中斷。(2)接收器:串并數(shù)據(jù)格式轉(zhuǎn)換,檢查錯誤,去掉標識位,保存有效數(shù)據(jù),設(shè)置接收結(jié)束標志,申請中斷。(3)控制器:接收編程命令和控制參數(shù),設(shè)置工作方式:同步/異步、字符格式、波特率、校驗方式、數(shù)據(jù)位與同步時鐘比例等。四、串行通信的傳輸方式:1、單工通訊:數(shù)據(jù)單向傳送。(1條數(shù)據(jù)線,單向)2、半雙工通訊:數(shù)據(jù)可分時雙向傳送。(2條數(shù)據(jù)線,雙向)3、全雙工通訊:可同時進行發(fā)送和接收。(1條或2條數(shù)據(jù)線,雙向)發(fā)送器接收器地線數(shù)據(jù)線發(fā)送接收器接收發(fā)送器地線數(shù)據(jù)線發(fā)送接收器接收發(fā)送器地線數(shù)據(jù)線五、異步串行通信的信號形式:1、遠距離直接傳輸數(shù)字信號,信號會發(fā)生畸變,因此要把數(shù)字信號轉(zhuǎn)變?yōu)槟M信號再進行傳送??衫霉饫|、專用通信電纜或電話線。方法:通常使用頻率調(diào)制法(頻帶傳送方式)。通常:“1”:1270Hz或2225Hz;“0”:1070Hz或2025Hz。2、因通信時(有干擾)信號要衰減,所以常采用RS232電平負邏輯,拉開“0”和“1”的電壓檔次,以免信息出錯:RS232C負邏輯(EIA電平):“0”:+3V—+25V;“1”:-3V—-25V。最大傳輸信息的長度為15米。TTL正邏輯:“0”:0—2.4V;“1”:3.6V—+5V;高阻:2.4V—3.6V。TTL電平直接傳輸距離一般不超過1.5米。RS232負邏輯:“0”:+5V—+15V;“1”:-5V—-15V。最大傳輸信息的長度為15米。RS-232C(電平轉(zhuǎn)換芯片為MAX232)RS-422RS-4857-2 串行口及控制寄存器串行接口輸入/輸出引腳:TXD(P3.1)、RXD(P3.0)數(shù)據(jù)格式:按不同方式,一幀數(shù)據(jù)位數(shù)8/10/11

發(fā)送/接收時,數(shù)據(jù)皆低位在前。一幀字符發(fā)送/接收結(jié)束,置位標志位(TI/RI),并申請串行中斷。

中斷控制:中斷允許位ES、總允許EA;中斷入口:0023H。D0D1D2D3D4D5D6D7停止位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位起始位D71個全雙工串行接口,可同時進行發(fā)送和接收。7-2-1 MCS-51串行接口一、串行接口控制:

1.數(shù)據(jù)緩沖器SBUF:串行口緩沖器SBUF是可直接尋址的特殊功能寄存器,其內(nèi)部RAM字節(jié)地址是99H。在物理上,它對應著兩個獨立的寄存器,一個發(fā)送寄存器,一個接收寄存器。發(fā)送時,就是CPU寫SBUF的時候(51系列單片機沒有專門的啟動發(fā)送狀態(tài)的指令);接收時,就是讀取SBUF的過程,接收寄存器是雙緩沖的,以避免在接收下一幀數(shù)據(jù)之前,CPU未能及時響應接收器的中斷,沒有把上一幀數(shù)據(jù)讀走,而產(chǎn)生兩幀數(shù)據(jù)重疊的問題。2.節(jié)電控制寄存器(或電源控制寄存器)PCON:

SMOD(PCON.7):波特率加倍控制位。

SMOD=1,波特率加倍;

SMOD=0,則不加倍。

SMOD:波特率倍增位。當SMOD=1時,波特率加倍;當SMOD=0時,波特率不加倍。SM0、SM1:選擇串行口4種工作方式。REN:允許接收控制位,REN=1,允許接收;

REN=0,禁止接收。TB8:發(fā)送的第9位數(shù)據(jù)位,可用作校驗位和地址/數(shù)據(jù)標識位。RB8:接收的第9位數(shù)據(jù)位或停止位。TI:發(fā)送中斷標志,發(fā)送一幀結(jié)束,TI=1,必須軟件清零;RI:接收中斷標志,接收一幀結(jié)束,RI=1,必須軟件清零。3.串行口控制/狀態(tài)寄存器SCON(98H):9FH9EH9DH9CH9BH9AH99H98H位地址位符號表7.2串行口操作模式選擇SM0SM1模式功能波特率0001101101238位同步移位寄存器

10位UART11位UART11位UARTfOSC/12可變(T1溢出率)fOSC/64或fOSC/32可變(T1溢出率)SM2:多機控制位,用于多機通訊。

在模式2和3中,若SM2=1,且接收到的第9位數(shù)據(jù)(RB8)是0,則接收中斷標志(RI)不會被激活。在模式1中,若SM2=1且沒有接收到有效的停止位,則RI不會被激活。在模式0中,SM2必須是0。7-3串行通信工作方式(1)方式0(SM0=0SM1=0):同步移位寄存器方式用于擴展并行I/O接口。

1.一幀8位,無起始位和停止位。

2.RXD(P3.0):數(shù)據(jù)輸入/輸出端。

TXD(P3.1):同步移位脈沖輸出端,每個脈沖對應一個數(shù)據(jù)位。

3.波特率B=fosc/12

如:fosc=12MHz,B=1MHz,每位數(shù)據(jù)占1s。

4.發(fā)送過程:寫入SBUF,啟動發(fā)送.(MOVSBUF,A)

一幀發(fā)送結(jié)束,TI=1。接收過程:REN=1且RI=0,啟動接收,(MOVA,SBUF)

一幀接收完畢,RI=1。發(fā)送、接收的是8位數(shù)據(jù),低位在先。SM0、SM1選擇四種工作方式。

發(fā)送時序?qū)懭隨BUFRXD輸出TXDTID0D1D2D3D4D5D6D7寫REN=1RI=0RXD輸入RI

接收時序(a)(b)時序圖:(1)方式0輸出(發(fā)送)串行數(shù)據(jù)通過RxD(P3.0)輸出,而在TxD(P3.1)輸出移位時鐘脈沖。當一個數(shù)據(jù)寫入串口數(shù)據(jù)發(fā)送緩沖器時,就開始發(fā)送。發(fā)送控制器送出移位信號。直到最高位(D7)數(shù)字移出后,停止發(fā)送數(shù)據(jù)和移位時鐘脈沖。完成一幀數(shù)據(jù)的發(fā)送過程,并置TI為1(申請中斷)。若CPU響應中斷,則從0023H單元開始執(zhí)行串口中斷服務程序。

RxD8051TxDD1D274LS164CLKD7D6D5D4D3D2D1D0例如:在并行輸出口接8支發(fā)光二極管,利用其串入并出功能,把發(fā)光管從左到右依次點亮,并反復循環(huán).(假定發(fā)光管為共陰極型,共陰端接地)程序:MOVSCON,#00HMOVA,#80HDELR:MOVSBUF,AJNBTI,$ACALLDELAYCLRTIRRAAJMPDELR(2)方式0輸入(接收)此時RxD端為數(shù)據(jù)輸入端,TxD端為移位時鐘信號輸出。REN=0,禁止接收。REN=1,允許接收。當滿足方式0,且REN=1,且RI=0的條件時,就會啟動一次接收過程。在接收過程開始后的第10個機器周期,SCON中的RI位被置位,(中斷申請)。至此,完成了一幀數(shù)據(jù)的接收過程。若CPU響應中斷,就去執(zhí)行由0023H作為入口地址的中斷服務程序。

RxD8051TxDQ74LS165CLKD7D6D5D4D3D2D1D0說明:方式0發(fā)送或接收完8位數(shù)據(jù)后由硬件置位發(fā)送中斷標志TI或接收中斷標志RI。CPU響應中斷請求轉(zhuǎn)入中斷服務程序時并不清TI或RI。中斷標志TI或RI要用程序來清0。具體做法:

CLR

TI

CLR

RI或ANL

SCON,#0FEH

ANL

SCON,#0FDH來實現(xiàn)。以方式0工作時SM2位(多機通信控制位)必須為0.(2)方式1:8位數(shù)據(jù)異步通訊方式1.一幀10位:8位數(shù)據(jù)位,1個起始位(0),1個停止位(1)。2.RXD:接收數(shù)據(jù)端。

TXD:發(fā)送數(shù)據(jù)端。3.波特率:用T1作為波特率發(fā)生器,

B=(2SMOD/32)×T1溢出率。4.發(fā)送:寫入SBUF,同時啟動發(fā)送,一幀發(fā)送結(jié)束,TI=1。接收:REN=1,允許接收。接收完一幀,若RI=0且停止位為1(或SM2=0),將接收數(shù)據(jù)裝入SBUF,停止位裝入RB8,并使RI=1;否則丟棄接收數(shù)據(jù),不置位RI。

當REN=1,CPU開始采樣RXD引腳負跳變信號,若出現(xiàn)負跳變,才進入數(shù)據(jù)接收狀態(tài),先檢測起始位,若第一位為0,繼續(xù)接收其余位;否則,停止接收,重新采樣負跳變。數(shù)據(jù)采樣速率為波特率16倍頻,在數(shù)據(jù)位中間,用第7、8、9個脈沖采樣3次數(shù)據(jù)位,并3中取2保留采樣值。T1的時間常數(shù)計算:X=2N-所需定時時間/計數(shù)周期=2N-計數(shù)頻率/所需頻率(溢出率)返回寫入SBUF采樣(a)發(fā)送時序圖TXD數(shù)據(jù)輸出TID0D1D2D3D4D5D6D7停止位起始位RXD輸入數(shù)據(jù)(b)接收時序圖D0D1D2D3D4D5D6D7停止位起始位RI檢測負跳變時序圖:方式1的兩種形式:(1)方式1發(fā)送CPU執(zhí)行任何一條以SBUF為目標寄存器的指令,就啟動發(fā)送。當發(fā)送完數(shù)據(jù)位時,置位中斷標志位TI。(2)方式1接收當檢測到RxD引腳上由1到0的跳變時開始接收過程,并復位內(nèi)部16分頻計數(shù)器,以實現(xiàn)同步。將1位時間等分成16份,在第7,8,9個計數(shù)狀態(tài)時采樣RxD的電平,保證排除噪聲干擾。8位數(shù)據(jù)進入SBUF,停止位進入RB8,且置位中斷標志RI。例:假定甲、乙機以方式1進行串行數(shù)據(jù)通信,其波特率為1200,時鐘6MHz。甲機發(fā)送,發(fā)送數(shù)據(jù)在外部RAM4000~401FH單元中。乙機接收,并把接收到的數(shù)據(jù)塊首末地址及數(shù)據(jù)依次存入外部RAM5000H開始的區(qū)域中。假設(shè)晶振頻率為6MHz,按1200波特率,計算定時器1的計數(shù)初值:

X=256-fosc*2smod/(384*波特率)=256-6*106*1/(384*1200)=243=0F3Hsmod=0,波特率不倍增,則應使PCON=00H串行發(fā)送的內(nèi)容包括數(shù)據(jù)塊的首末地址和數(shù)據(jù)兩部分內(nèi)容。對數(shù)據(jù)塊首末地址的傳送以查詢方式進行,而數(shù)據(jù)則以中斷方式傳送。因此在程序中要先禁止串行中斷,后允許串行中斷。

甲機:首末地址的發(fā)送采用查詢法數(shù)據(jù)的發(fā)送采用中斷法乙機:首末地址的接收采用查詢法數(shù)據(jù)的接收采用中斷法下面是發(fā)送和接收的參考程序:甲機發(fā)送主程序:

ORG 0023H

LJMP ACINT ORG 0100H MOV TMOD,#20H ;設(shè)置定時器1工作方式2

MOV TL1,#0F3H ;定時器1計數(shù)初值

MOV TH1,#0F3H ;計數(shù)重裝值

SETB EA ;中斷總允許

CLR ES ;禁止串行中斷

MOV PCON,#00H ;波特率不倍增

SETB TR1 ;啟動定時器1 MOV SCON,#40H ;設(shè)置串行口方式1,REN=0 MOV SBUF,#40H ;發(fā)送數(shù)據(jù)區(qū)首地址高位SOUT1:JNB TI,$ ;等待一幀發(fā)送完畢

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

MOV SBUF,#00H ;發(fā)送數(shù)據(jù)區(qū)首地址低位SOUT2:JNB TI,$ ;等待一幀發(fā)送完畢續(xù): CLR TI ;

MOV SBUF,#40H ;發(fā)送數(shù)據(jù)區(qū)末地址高位SOUT3:JNB TI,$ ;等待一幀發(fā)送完畢

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

MOV DPTR,#4000H;數(shù)據(jù)區(qū)地址指針

MOV R7,#20H ;數(shù)據(jù)個數(shù)

SETB ES ;開放串行中斷

MOV SBUF,#1FH ;發(fā)送數(shù)據(jù)區(qū)末地址低位AHALT:AJMP$ ;甲機中斷服務程序:

ORG 8100H

ACINT:MOVXA,@DPTR ;讀數(shù)據(jù)

CLR TI ;清發(fā)送中斷續(xù): MOV SBUF,A ;發(fā)送字符

CJNE R7,#00H,AEND1 ;未發(fā)送完轉(zhuǎn)AEND1

CLR ES ;禁止串行中斷

CLR TR1 ;定時器1停止計數(shù)

AJMP AEND2 ;發(fā)送完轉(zhuǎn)AEND2AEND1: INC DPTR ;

DEC R7

AEND2:RETI ;中斷返回乙機接收主程序:

ORG 0023H

LJMP BCINT

ORG 0100H MOV TMOD,#20H ;設(shè)置定時器1工作方式2

MOV TH1,#0F2H ;計數(shù)重裝值

MOV TL1,#0F2H ;定時器1計數(shù)初值

SETB EA ;中斷總允許

CLR ES ;禁止串行中斷續(xù): MOV PCON,#00H ;波特率不倍增

SETB TR1 ;啟動定時

MOV SCON,#50H ;設(shè)置串行口方式1,REN=1

MOV DPTR,#5000H;數(shù)據(jù)存放首地址

MOV R7,#24H ;接收數(shù)據(jù)個數(shù)SIN1: JNB RI,$ ;等待

CLR RI ;清接收中斷標志

MOV A,SBUF ;接收數(shù)據(jù)區(qū)首地址高位

MOVX@DPTR,A ;存首地址高位

INC DPTR ;地址指針增量SIN2: JNB RI,$ ;

CLR RI MOV A,SBUF ;接收數(shù)據(jù)區(qū)首地址低位

MOVX@DPTR,A ;存首地址低位

INC DPTRSIN3: JNB RI,$ ;

CLR RI續(xù): MOV A,SBUF ;接收數(shù)據(jù)區(qū)末地址高位

MOVX@DPTR,A ;存末地址高位

INC DPTR ;地址指針增量SIN4: JNB RI,$ ;

CLR RI MOV A,SBUF ;接收數(shù)據(jù)區(qū)末地址低位

MOVX@DPTR,A ;存末地址低位

INC DPTR SETB ES ;開放串行中斷BHALT:AJMP$ ;等待中斷乙機中斷服務程序:

ORG 8100HBCINT:MOV A,SBUF ;接收數(shù)據(jù)

MOVX@DPTR,A ;存數(shù)據(jù)

CLR RI ;清接收中斷標志

CJNE R7,#00H,BEND1;未接收完轉(zhuǎn)BEND1續(xù):

AJMP BEND2 ;接收完轉(zhuǎn)BEND2BEND1:INC DPTR

DEC R7BEND2:RETI ;中斷返回(3)

方式2和方式3:9位數(shù)據(jù)異步通訊方式1.一幀為11位:9位數(shù)據(jù)位,1個起始位(0),1個停止位(1)。 第9位數(shù)據(jù)位在TB8/RB8中,常用作校驗位和多機通訊標識位。2.RXD:接收數(shù)據(jù)端,

TXD:發(fā)送數(shù)據(jù)端。3.波特率:方式2:B=(2SMOD/64)×fosc。 方式3:B=(2SMOD/32)×T1溢出率(與方式1相同)。4.發(fā)送:先裝入TB8,寫入SBUF并啟動發(fā)送,發(fā)送結(jié)束,TI=1。接收:REN=1,允許接收。接收完一幀,若RI=0且第9位為1(或SM2=0),將接收數(shù)據(jù)裝入接收SBUF,第9位裝入RB8,使RI=1;否則丟棄接收數(shù)據(jù),不置位RI。(a)發(fā)送時序圖寫入SBUFTXD輸出TIRXD輸入(b)接收時序圖RID0D1D2D3D4D5D6TB8停止位起始位D7D0D1D2D3D4D5D6RB8停止位起始位D7檢測負跳變時序圖:(4)計算波特率:方式0為固定波特率:B=fosc/12 方式2可選兩種波特率:B=(2SMOD

/64)×fosc 方式1、3為可變波特率,用T1作波特率發(fā)生器。

B=(2SMOD/32)×T1溢出率T1為方式2的時間常數(shù):X=28-t/T溢出時間:t=(28-X)T=(28-X)×12/foscT1溢出率=1/t=fosc/[12×(2n-X)]

波特率B=(2SMOD

/32)×fosc/[12×(28-X)]串行口方式1、3,根據(jù)波特率選擇T1工作方式,計算時間常數(shù)。T1選方式2:TH1=X=28-fosc/12×2SMOD/(32×B)T1選方式1用于低波特率,需考慮T1重裝時間常數(shù)時間。也可選工作方式3。4種方式比較:方式波特率傳送位數(shù)發(fā)送端接收端用途01/12fosc(固定不變)8(數(shù)據(jù))RXDRXD接移位寄存器,擴充并口12SMOD/32T1溢出率10(起始位、8位數(shù)據(jù)位、停止位)TXDRXD單機通訊22SMOD/64fosc11(第9位為1:地址;為0:數(shù)據(jù))TXDRXD多機通訊32SMOD/32T1溢出率11位(同方式2)TXDRXD多機通訊7-4串行口的應用

串行口初始化編程格式:

SIO:MOVSCON,#控制狀態(tài)字;寫方式字且TI=RI=0 (MOVPCON,#80H) ;波特率加倍

(MOVTMOD,#20H) ;T1作波特率發(fā)生器

(MOVTH1,#X) ;選定波特率

(MOVTL1,#X) (SETBTR1) (SETBEA) ;開串行口中斷

(SETBES)發(fā)送程序:1、查詢方式:TRAM: MOV A,@R0

;取數(shù)據(jù)

MOV SBUF,A ;發(fā)送一個字符WAIT: JBC TI,NEXT ;等待發(fā)送結(jié)束

SJMP WAITNEXT: INC R0

;準備下一次發(fā)送

SJMP TRAM2、中斷方式:

ORG 0023H ;串行口中斷入口

AJMPSINTMAIN: … ;初始化編程TRAM: MOV A,@R0

;取數(shù)據(jù)

MOV SBUF,A ;發(fā)送第一個字符

H: SJMP H ;其它工作

SINT: CLRTI ;中斷服務程序

INC R0 MOV A,@R0

;取數(shù)據(jù)

MOV SBUF,A

;發(fā)送下一個字符

RETI先發(fā)送一個字符,等待TI=1后再發(fā)送下一個字符。接收程序:1.查詢方式:

WAIT: JBC RI,NEXT ;查詢等待

SJMP WAITNEXT: MOV A,SBUF ;讀取接收數(shù)據(jù)

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

INCR0

;準備下一次接收

SJMP WAIT2.中斷方式:

ORG 0023H AJMP RINTMAIN: … ;初始化編程

H: SJMP H ;其它任務

RINT: CLR RI

;清中斷標志

MOV A,SBUF

;讀取接收數(shù)據(jù)

MOV @R0,A

;保存數(shù)據(jù)

INC R0

RETIREN=1、RI=0等待接收,當RI=1,從SBUF讀取數(shù)據(jù)。(一)串行口方式0:串行口通過接口74LS164實現(xiàn):串行→并行的數(shù)據(jù)轉(zhuǎn)換(顯示器接口);

通過接口74LS165實現(xiàn):并行→串行的數(shù)據(jù)轉(zhuǎn)換。

用于接移位寄存器擴充并口。程序:

MOV R7,#20 ;送入20個字節(jié)

MOV R0,#20H ;送首地址為20HRCV0:CLR P1.0

;P1.0=0(并行置入數(shù)據(jù))

SETB P1.0

;P1.0=1(允許串行移位)

MOVSCON,#10H ;允許方式0接收

JNB RI,$ ;等待RI=1,順序執(zhí)行

CLR RI ;RI=0為下一幀數(shù)據(jù)的接收準備

MOV A,SBUF ;取數(shù)

MOV @R0,A INC R0RCV2:DJNZ R7,RCV0 ;R7-1=0?≠0跳(判是否已讀入預定字節(jié)數(shù))

………. ;對讀入數(shù)據(jù)進行處理ORG0000hAjmpmain

ORG0023H

;串行口中斷入口

AJMPTRANIMAIN:MOV SCON,#80H;串行口初始化

MOV PCON,#80H;波特率

SETB EA SETB ES

;開串行口中斷

MOV R0,#50H ;設(shè)數(shù)據(jù)指針

MOV R7,#10H

;數(shù)據(jù)長度LOOP: MOV A,@R0

;取一個字符

MOV C,P ;加奇偶校驗

MOV TB8,C MOV SBUF,A

;啟動一次發(fā)送HERE: SJMP HERE ;CPU執(zhí)行其它任務(二)異步通訊程序舉例:

1.發(fā)送程序:將片內(nèi)RAM50H起始單元的16個數(shù)由串行口發(fā)送。要求發(fā)送波特率為系統(tǒng)時鐘的32分頻,并進行奇偶校驗。 TRANI: PUSH A ;保護現(xiàn)場

PUSH PSW CLR TI ;清發(fā)送結(jié)束標志

DJNZ R7,NEXT ;是否發(fā)送完?

CLR ES ;發(fā)送完,關(guān)閉串行口中斷

SJMP TEND NEXT: INC R0

;未發(fā)送完,修改指針

MOV A,@R0

;取下一個字符

MOV C,P ;加奇偶校驗

MOV TB8,C MOV SBUF,A ;發(fā)送一個字符

POP PSW ;恢復現(xiàn)場

POP A TEND: RETI ;中斷返回2.接收程序:RECS: MOV SCON,#50H;串行口方式1允許接收

MOV TMOD,#20H;T1方式2定時

MOV TL1,#0F4H;寫入T1時間常數(shù)

MOV TH1,#0F4H SETBTR1 ;啟動T1

MOV R0,#50H ;設(shè)數(shù)據(jù)指針

MOV R7,#10H ;接收數(shù)據(jù)長度

WAIT: JBC RI,NEXT ;等待串行口接收

SJMPWAIT NEXT: MOV A,SBUF ;讀取接收字符

MOV @R0,A ;保存一個字符

CLR RI INC R0

;修改指針

DJNZR7,WAIT ;全部字符接收完? RET串行輸入16個字符,存入片內(nèi)RAM的50H起始單元,串行口波特率為2400(設(shè)晶振為11.0592MHz)。(采用方式1)3.接收程序:RECS: MOV SCON,#0D0H;串行口方式3允許接收

MOV TMOD,#20H;T1方式2定時

MOV TL1,#0F4H ;寫入T1

時間常數(shù)

MOV TH1,#0F4H SETBTR1 ;啟動T1

MOV R0,#50H ;設(shè)數(shù)據(jù)指針

MOV R7,#10H ;接收數(shù)據(jù)長度

WAIT: JBC RI,NEXT ;等待串行口接收

SJMPWAIT NEXT: MOV A,SBUF ;取一個接收字符

JNB P,COMP ;奇偶校驗

JNB RB8,ERR ;P≠RB8,數(shù)據(jù)出錯

SJMPRIGHT ;P=RB8,數(shù)據(jù)正確COMP: JB RB8,ERR RIGHT: MOV @R0,A ;保存一個字符

CLR RI INC R0

;修改指針

DJNZR7,WAIT ;全部字符接收完? CLR F0 ;F0=0,接收數(shù)據(jù)全部正確

RETERR: SETBF0 ;F0=1,接收數(shù)據(jù)出錯

RET串行輸入16個字符,串行口波特率為2400(設(shè)晶振為11.0592MHz)進行奇偶校驗。(采用方式3)4.主從分布式微機系統(tǒng):也叫集散控制系統(tǒng):從機(單片機)作數(shù)據(jù)采集或?qū)崟r控制,主機(PC機)作數(shù)據(jù)處理、中央管理等。應用:過程控制、儀器儀表、生產(chǎn)自動化和企業(yè)管理等方面。直接傳送串行通信接法PC機調(diào)用的中斷指令為:INT14H①單機通信:7-5多機通信技術(shù)典型應用:校園卡系統(tǒng)、智能樓宇、自動溫控蔬菜大棚、大型糧庫、工廠自動化;1#打卡機2#打卡機3#打卡機……n#打卡機通信過程所有從機的SM2=1,處于只接收地址幀狀態(tài)所有同學坐著聽講主機發(fā)地址信息,以第9位TB8=1表示發(fā)送的是地址老師喊同學名字從機接收到地址幀后與本機地址比較所有同學聽到名字與自己的名字比較被尋址從機SM2=0,其作從機SM2=1不變名字相符的同學站起來(SM2=0)主機發(fā)數(shù)據(jù)信息(TB8=0),對已被尋址的從機因SM2=0,可以接收主機發(fā)來的信息。其余從機因SM2=1不理睬主機。老師與站起的同學進行提問,課堂交流,TB8=0.被尋址的從機SM2置1.主機可另發(fā)地址幀與其它從機通信時?;卮饐栴}的同學坐下(SM2=1)②多機通信系統(tǒng):PC機要對某一指定了地址編號的單片機通訊,就必須作好聯(lián)絡(luò)。①PC機處于發(fā)送狀態(tài),各單片機的串行口均處于接收狀態(tài)并使其SM2=1,作好接收地址信息的準備。②PC機發(fā)出要通訊的那臺單片機的地址編號,然后發(fā)送通訊數(shù)據(jù),發(fā)地址時必須使第9位信息為1,發(fā)數(shù)據(jù)時必須使第9位數(shù)據(jù)為0。③各單片機收到PC機發(fā)來的地址信息后,因此此時各SM2=1,所以將引起各單片機的中斷。在中斷服務程序中,判斷PC機發(fā)來的地址是否是自身的地址編號,僅有符合地址編號的那臺才使其SM2=0,其它不符合者仍是SM2=1。④隨著PC機信息的發(fā)出(第9位信息為0),因為符合地址編號的那臺單片機此時已是SM2=0,所以這臺單片機將再次進入中斷,并在中斷服務程序中接收PC機發(fā)來的數(shù)據(jù)。那些地址不符者,不能進入中斷(因SM2=1),也就不能接收串行來的數(shù)據(jù)。SM2、RB8與從機動作關(guān)系SM2RB8從機動作10此時不能接收數(shù)據(jù)11能收到主機發(fā)的數(shù)據(jù)(地址信息)00進入串口中斷,對接收的數(shù)據(jù)進行處理01進入串口中斷,對接收的數(shù)據(jù)進行處理2.多機通信系統(tǒng)設(shè)計

設(shè)多機通信系統(tǒng)主、從機晶振為6MHz,波特率為1200bps,以方式3進行多機串行通信。0#為主機、其他為從機,主機向某從機發(fā)出起始地址和終止地址,要求把該地址范圍內(nèi)的數(shù)據(jù)塊由所指定的從機片外數(shù)據(jù)存貯器中傳送到主機片外RAM之相應單元,起始地址的高低兩字節(jié)分別存放在各機片內(nèi)RAM的70H和71H單元,終止地址在72H和73H中,主機74H單元存放欲呼叫的從機號。1#從機89c510#……2#從機n#從機圖1多機通信系統(tǒng)硬件結(jié)構(gòu)1簡單通信協(xié)議

主機采用查詢方式,從機采用中斷方式通信,以確保及時收到主機的通信信息。主機的串口設(shè)為方式3,允許接收,并置TB8為1,因為只有一個主機,所以主機SCON中的SM2不置1,故控制字為11011000,即D8H.。主機與從機的通信程序流程圖如圖2、3所示。

主機呼叫從機和發(fā)送地址值用查詢方式,接收數(shù)據(jù)采用中斷方式ORG0000HAJMPMASTERORG0023HAJMPRECEIVMASTER:MOVTMOD,#21HMOVTL1,#0F2H;波特率設(shè)置

MOVTH1,#0F2HMOVPCON,#00HSETBTR1MOVSCON,#0D8H;

MOVR0,#74H;從機號所在的地址單元

MOVSBUF,@R0;發(fā)從機機號

JNBTI,$MOVTH0,#27H;定時器T0定時10msMOVTL0,#10HSETBTR0JNBTF0,$CLRTR0CLRTF0JNBRI,ERR

;若未接收到,則轉(zhuǎn)出錯處理

CLRRI

MOVA,SBUF;讀從機應答信號

CJNEA,74H,ERR1;若應答非所呼叫則轉(zhuǎn)ERR1(比如重發(fā))

CLRTB8;若是所呼叫從機,則清TB8,接下來發(fā)送數(shù)據(jù)LOOP:CLRTI

DECR0

MOVSBUF,@R0;發(fā)送地址值

JNBTI,$

CJNER0,#70H,LOOP

CLRTI

SETBEA;打開中斷

SETBESHERE:SJMP$ERR:……ERR1:MOVSBUF,@R0

………主機接收數(shù)據(jù)程序(中斷)RECEIV:PUSHDPHPUSHDPLPUSHACCMOVDPH,70H;建立數(shù)據(jù)指針(高字節(jié))

MOVDPL,71H;(低字節(jié))

MOVA,SBUF;接收數(shù)據(jù)

MOVX@DPTR,A;存入主機的片外RAMCLRRIMOVA,72H;讀末地址高字節(jié)

CJNEA,DPH,GOON;數(shù)據(jù)塊尚未傳完?

MOVA,73H;讀末地址低字節(jié)

CJNEA,DPL,GOON;數(shù)據(jù)尚未傳完?

CLRTR1CLRESTOMAIN:POPACCPOPDPLPOPDPHRETIGOON:INCDPTRMOV70H,DPHMOV71H,DPLAJMPTOMAINEND從機軟件設(shè)計-----通信子程序

圖3從機通信程序流程圖

數(shù)據(jù)?接收并保存數(shù)據(jù)YN

清接收數(shù)據(jù)標志準備收地址信息接收地址

呼本機?準備接收數(shù)據(jù)Y清中斷標志返回

開始N從機:從機(假設(shè)是2號機)發(fā)送和接收均采用中斷方式從機主程序:ORG0000HAJMPSLAVE2ORG0023HAJMPSLV2ORG0100HSLAVE2:MOVTMOD,#20HMOVTH1,#0F2H;波特率設(shè)置1200bPSMOVTL1,#0F2HSETBTR1MOVSCON,#0F0H;SM1=1REN=1工作方式3

SETBEASETBESHERE:SJMP$

SLV2:PUSHACCJNBRI,XMT;非接收,轉(zhuǎn)發(fā)送中斷處理

MOVA,SBUF;讀接收結(jié)果

CLRRIJNBRB8,ADDR;非代碼轉(zhuǎn)地址接收

CJNEA,#2,NOT;非呼叫本機號

CLRSM2;是清SM2MOVSBUF,#2;向主機發(fā)應答信號

CLRES;關(guān)中斷

JNBTI,$;等待發(fā)送結(jié)束再開中斷

CLRTISETBESMOVR0,#74H;建立地址指針ADDR1:DECR0POPACCRETINOT:SETBSM2;配合主機ERR1處理(主機再次發(fā)送從機號)

POPACCRETI

續(xù):ADDR:MOV@R0,A;存接收的地址值

CJNER0,#74H,ADDR1;地址字節(jié)接受完?

MOVSCON,#0C0H;SM2=0TB8=0REN=0準備發(fā)送數(shù)據(jù)

XMT:PUSHDPH

PUSHDPL

MOVDPH,70H;建立數(shù)據(jù)指針

MOVDPL,71H

MOVXA,@DPTR;由片外RAM讀數(shù)據(jù)

CLRTI

MOVSBUF,A;發(fā)送數(shù)據(jù)

MOVA,72H;讀末地址高字節(jié)

CJNEA,DPH,AGAIN;數(shù)據(jù)塊發(fā)送完?

MOVA,73H;讀末地址低字節(jié)

CJNEA,DPL,AGAIN;數(shù)據(jù)塊發(fā)送完?

CLRES

JNBTI,$;等待最后字節(jié)發(fā)送

CLRTI;清標志

溫馨提示

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

評論

0/150

提交評論