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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

SMOD=1,波特率加倍;

SMOD=0,則不加倍。

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

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

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

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

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

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

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

3.波特率B=fosc/12

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

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

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

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

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

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

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

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

CLR

TI

CLR

RI或ANL

SCON,#0FEH

ANL

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

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

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

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

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

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

ORG 0023H

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

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

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

SETB EA ;中斷總允許

CLR ES ;禁止串行中斷

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

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

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

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ā)送中斷標(biāo)志

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

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

SETB ES ;開放串行中斷

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

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 ;定時(shí)器1停止計(jì)數(shù)

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

DEC R7

AEND2:RETI ;中斷返回乙機(jī)接收主程序:

ORG 0023H

LJMP BCINT

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

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

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

SETB EA ;中斷總允許

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

SETB TR1 ;啟動(dòng)定時(shí)

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

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

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

CLR RI ;清接收中斷標(biāo)志

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$ ;等待中斷乙機(jī)中斷服務(wù)程序:

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

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

CLR RI ;清接收中斷標(biāo)志

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個(gè)起始位(0),1個(gè)停止位(1)。 第9位數(shù)據(jù)位在TB8/RB8中,常用作校驗(yàn)位和多機(jī)通訊標(biāo)識(shí)位。2.RXD:接收數(shù)據(jù)端,

TXD:發(fā)送數(shù)據(jù)端。3.波特率:方式2:B=(2SMOD/64)×fosc。 方式3:B=(2SMOD/32)×T1溢出率(與方式1相同)。4.發(fā)送:先裝入TB8,寫入SBUF并啟動(dòng)發(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ā)送時(shí)序圖寫入SBUFTXD輸出TIRXD輸入(b)接收時(shí)序圖RID0D1D2D3D4D5D6TB8停止位起始位D7D0D1D2D3D4D5D6RB8停止位起始位D7檢測負(fù)跳變時(shí)序圖:(4)計(jì)算波特率:方式0為固定波特率:B=fosc/12 方式2可選兩種波特率:B=(2SMOD

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

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

串行口初始化編程格式:

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ā)送一個(gè)字符WAIT: JBC TI,NEXT ;等待發(fā)送結(jié)束

SJMP WAITNEXT: INC R0

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

SJMP TRAM2、中斷方式:

ORG 0023H ;串行口中斷入口

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

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

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

H: SJMP H ;其它工作

SINT: CLRTI ;中斷服務(wù)程序

INC R0 MOV A,@R0

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

MOV SBUF,A

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

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

WAIT: JBC RI,NEXT ;查詢等待

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

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

INCR0

;準(zhǔn)備下一次接收

SJMP WAIT2.中斷方式:

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

H: SJMP H ;其它任務(wù)

RINT: CLR RI

;清中斷標(biāo)志

MOV A,SBUF

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

MOV @R0,A

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

INC R0

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

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

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

MOV R7,#20 ;送入20個(gè)字節(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ù)的接收準(zhǔn)備

MOV A,SBUF ;取數(shù)

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

………. ;對(duì)讀入數(shù)據(jù)進(jìn)行處理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

;取一個(gè)字符

MOV C,P ;加奇偶校驗(yàn)

MOV TB8,C MOV SBUF,A

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

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

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

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

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

SJMP TEND NEXT: INC R0

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

MOV A,@R0

;取下一個(gè)字符

MOV C,P ;加奇偶校驗(yàn)

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

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

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

MOV TMOD,#20H;T1方式2定時(shí)

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

MOV TH1,#0F4H SETBTR1 ;啟動(dòng)T1

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

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

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

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

MOV @R0,A ;保存一個(gè)字符

CLR RI INC R0

;修改指針

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

MOV TMOD,#20H;T1方式2定時(shí)

MOV TL1,#0F4H ;寫入T1

時(shí)間常數(shù)

MOV TH1,#0F4H SETBTR1 ;啟動(dòng)T1

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

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

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

SJMPWAIT NEXT: MOV A,SBUF ;取一個(gè)接收字符

JNB P,COMP ;奇偶校驗(yàn)

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

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

CLR RI INC R0

;修改指針

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

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

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

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

主機(jī)采用查詢方式,從機(jī)采用中斷方式通信,以確保及時(shí)收到主機(jī)的通信信息。主機(jī)的串口設(shè)為方式3,允許接收,并置TB8為1,因?yàn)橹挥幸粋€(gè)主機(jī),所以主機(jī)SCON中的SM2不置1,故控制字為11011000,即D8H.。主機(jī)與從機(jī)的通信程序流程圖如圖2、3所示。

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

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

MOVR0,#74H;從機(jī)號(hào)所在的地址單元

MOVSBUF,@R0;發(fā)從機(jī)機(jī)號(hào)

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

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

CLRRI

MOVA,SBUF;讀從機(jī)應(yīng)答信號(hào)

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

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

DECR0

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

JNBTI,$

CJNER0,#70H,LOOP

CLRTI

SETBEA;打開中斷

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

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

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

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

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

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

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

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

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

圖3從機(jī)通信程序流程圖

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

清接收數(shù)據(jù)標(biāo)志準(zhǔn)備收地址信息接收地址

呼本機(jī)?準(zhǔn)備接收數(shù)據(jù)Y清中斷標(biāo)志返回

開始N從機(jī):從機(jī)(假設(shè)是2號(hào)機(jī))發(fā)送和接收均采用中斷方式從機(jī)主程序: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;非呼叫本機(jī)號(hào)

CLRSM2;是清SM2MOVSBUF,#2;向主機(jī)發(fā)應(yīng)答信號(hào)

CLRES;關(guān)中斷

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

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

POPACCRETI

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

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

MOVSCON,#0C0H;SM2=0TB8=0REN=0準(zhǔn)備發(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;清標(biāo)志

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論