80C51單片微機的串行口原理及應用課件_第1頁
80C51單片微機的串行口原理及應用課件_第2頁
80C51單片微機的串行口原理及應用課件_第3頁
80C51單片微機的串行口原理及應用課件_第4頁
80C51單片微機的串行口原理及應用課件_第5頁
已閱讀5頁,還剩94頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

80C51單片微機的串行口

原理及應用

通常把電腦與外界的數據傳送稱為通信,隨著80C51應用範圍的不斷拓寬,單臺儀器儀錶或控制器往往會帶有不止一個的單片微機,而多個智能儀器儀錶或控制器在單片微機應用系統中又常常會構成一個分佈式採集、控制系統,上層由PC進行集中管理等。單片微機的通信功能也隨之得到發展。7.1串行數據通信概述

⒈並行傳送方式與串行傳送方式電腦的數據傳送共有兩種方式∶並行數據傳送和串行數據傳送。

⑴並行傳送方式

在數據傳輸時,如果一個數據編碼字元的所有各位都同時發送、並排傳輸,又同時被接收,則將這種傳送方式稱為並行傳送方式。並行傳送方式要求物理通道為並行內匯流排或者並行外匯流排。

並行數據傳送方式的特點是傳送速度快、效率高。但由於需要的傳送數據線多,因而傳輸成本高。並行數據傳輸的距離通常小於30米。而在電腦內部的數據傳送都是並行傳送的。

⑵串行傳送方式

在數據傳輸時,如果一個數據編碼字元的所有各位不是同時發送,而是按一定順序,一位接著一位在通道中被發送和接收,則將這種傳送方式稱為串行傳送方式。串行傳送方式的物理通道為串行匯流排。串行數據傳送方式的特點是成本低,但速度慢。電腦與外界的數據傳送大多是串行的,其傳送距離可以從幾米直到幾千公里。

⒉單工方式、半雙工方式、全雙工方式

按照信號傳輸的方向和同時性,一般把傳送方式分為單工方式、半雙工方式和全雙工方式三種。

⑴單工方式

信號(不包括聯絡信號)在通道中只能沿一個方向傳送,而不能沿相反方向傳送的工作方式稱為單工方式。

⑵半雙工方式

通信的雙方均具有發送和接收資訊的能力,通道也具有雙向傳輸性能,但是,通信的任何一方都不能同時既發送資訊又接收資訊,即在指定的時刻,只能沿某一個方向傳送資訊。這樣的傳送方式稱為半雙工方式。半雙工方式大多採用雙線制。

⑶全雙工方式

若信號在通信雙方之間沿兩個方向同時傳送,任何一方在同一時刻既能發送又能接

收資訊,這樣的方式稱為全雙工方式。

⒊非同步傳輸和同步傳輸 在數據通信中,要保證發送的信號在接收端能被正確地接收,必須採用同步技術。常用的同步技術有兩種方式,一種稱為非同步傳輸也稱起止同步方式,另一種稱為同步傳輸也稱同步字元同步方式。

⑴非同步傳輸

非同步傳輸以字元為單位進行數據傳輸,每個字元都用起始位、停止位包裝起來,在字元間允許有長短不一的間隙。 在單片微機中使用的串行通信都是非同步方式。

⑵同步傳輸

同步傳輸用來對數據塊進行傳輸,一個數據塊中包含著許多連續的字元,在字元之間沒有空閒。同步傳輸可以方便地實現某一通信協議要求的幀格式。

⒋串列傳輸速率(BAUDRATE)

串行通信的傳送速率用於說明數據傳送的快慢,串列傳輸速率表示串行通信時每秒鐘傳送”位”的數目,比如1s傳送1bit,就是1波特。即1波特=1bit/s(位/秒)

串行通信常用的標準串列傳輸速率在RS-232C標準中已有規定,如串列傳輸速率為600、1200、2400、4800、9600、19200等等。 假若數據傳送速率為120字元/s,而每一個字元幀已規定為10個數據位,則傳輸速率為120×10=1200bit/s,即串列傳輸速率為1200,每一位數據傳送的時間為串列傳輸速率的倒數:

T=1÷1200=0.833ms

7.280C51串行口及控制

7.2.180C51串行口結構

串行數據通信主要有兩個技術問題,一個是數據傳送,另一個是數據轉換。數據傳送主要解決傳送中的標準、數據幀格式及工作方式等。數據轉換要解決把數據進行串、並行的轉換,這種轉換通常由通用非同步接收發送器(UART)電路來完成。數據發送端,要把並行數據轉換為串行數據,而在數據接收端,要把串行數據轉換為並行數據。80C51中已集成有UART,有的型號在內部還集成了兩個UART。而在其他一些型號中又增加了新的串行口,如8XC552中就增加了具有I2C匯流排功能的串行口。

80C51中的串行口是一個全雙工的非同步串行通信介面,它可作UART(通用非同步接收和發送器)用,也可作同步移位寄存器用。 所謂全雙工的非同步串行通信介面,是說該介面可以同時進行接收和發送數據,口內的接收緩衝器和發送緩衝器在物理上是隔離的,即是完全獨立的。可以通過訪問特殊功能寄存器SBUF,來訪問接收緩衝器和發送緩衝器。接收緩衝器具有雙緩衝的功能,即它在接收第一個數據位元組後,能接收笫二個數據位元組。但是在接收完第二個位元組後,若笫一個數據字節還未取走,那麼該數據字節將丟失。

80C51串行口基本結構如圖7–1所示。主要由兩大部分組成。

⒈串列傳輸速率發生器:

主要由T1、T2及內部的一些控制開關和分頻器所組成。它提供串行口的時鐘信號為

TXCLOCK(發送時鐘)和

RXCLOCK(接收時鐘)。相應的控制串列傳輸速率發生器的特殊功能寄存器有

TMOD、TCON、T2CON、PCON、TL1、TH1、TL2、TH2等。

⒉串行口的內部

⑴串行數據緩衝寄存器SBUF

有接收緩衝器SBUF和發送緩衝器SBUF,以便80C51能以全雙工方式進行通信。它們在物理上是隔離的,但是佔用同一個地址(99H)。

⑵串行口控制寄存器SCON ⑶串行數據輸入/輸出引腳 接收方式下,串行數據從RXD(P3.0)引腳輸入,串行口內部在接收緩衝器之前還有移位寄存器,從而構成了串行接收的雙緩衝結構,可以避免在數據接收過程中出現幀重疊錯誤,即在下一幀數據來時,前一幀數據還沒有讀走。 在發送方式下,串行數據通過TXD(P3.1)引腳輸出。

⑷串行口控制邏輯

·接受來自串列傳輸速率發生器的時鐘信號——TXCLOCK(發送時鐘)和RXCLOCK(接收時鐘);

·控制內部的輸入移位寄存器將外部的串行數據轉換為並行數據;

·控制內部的輸出移位寄存器將內部的並行數據轉換為串行數據輸出;

·控制串行中斷(RI和TI)。

7.2.280C51串行口控制

⒈串行口狀態控制寄存器SCON

串行口狀態控制寄存器SCON用來控制串行通信的方式選擇、接收,指示串行口的中斷狀態。寄存器SCON既可位元組尋址也可位尋址,位元組地址為98H,位地址為98H~9FH。其格式如下:位地址

9FH

9EH9DH9CH

9BH9AH99H

98H位功能SM0SM1SM2REN

TB8

RB8

TI

RI⑴SM0(SCON.7),SM1(SCON.6)——串行口工作方式選擇位。其功能見表7–1。⑵SM2(SCON.5)—允許方式2、3中的多處理機通信位。 方式0時,SM2=0。 方式1時,若SM2=l,只有接收到有效的停止位,接收中斷RI才置1。 方式2和方式3時,若SM2=1,則只有當接收到的第9位數據(RB8)為1時,才將接收到的前8位數據送入緩衝器SBUF中,並把RI置1、同時向CPU申請中斷;如果接收到的第9位數據(RB8)為0,RI置0,將接收到的前8位數據丟棄。 而當SM2=0時,則不論接收到的笫九位數據是0或1,都將前8位數據裝入SBUF中,並申請中斷。

⑶REN(SCON.4)——允許串行接收位。

REN=1時,允許串行接收;REN=0時,禁止串行接收。 用軟體置位/清除。⑷TB8(SCON.3)——方式2和方式3中要發送的第9位數據。 在通信協議中,常規定TB8作為奇偶校驗位。在80C51多機通信中,TB8=0用來表示數據幀;TB8=1表示是地址幀。 用軟體置位/清除。⑸RB8(SCON.2)——方式2和方式3中接收到的第9位數據。

方式1中接收到的是停止位。方式0中不使用這一位。

⑹TI(SCON.1)——發送中斷標誌位。 方式0中,在發送第8位末尾置位;在其他方式時,在發送停止位開始時設置。 由硬體置位,用軟體清除。⑺RI(SCON.0)——接收中斷標誌位。 方式0中,在接收第8位末尾置位;在其他方式時,在接收停止位中間設置。 由硬體置位,用軟體清除。 系統複位後,SCON中所有位都被清除。 ⒉電源控制寄存器PCON

其中最高位SMOD與串行口控制有關,其他位與掉電方式有關。其格式如下:

D7

D6

D5

D4

D3

D2

D1

D0SMOD———

GF1

GF0

PD

IDL

SMOD(PCON.7)——串行通信串列傳輸速率係數控制位。

當SMOD=1時,使串列傳輸速率加倍。複位後,SMOD=0。

⒊串行數據寄存器SBUF

包含在物理上是隔離的兩個8位寄存器:發送數據寄存器和接收數據寄存器,它們共用一個地址——99H。其格式如下:

D7

D6

D5

D4

D3

D2

D1

D0SD7

SD6

SD5

SD4

SD3

SD2

SD1

SD0

讀SBUF(MOV A,SBUF),訪問接收數據寄存器;寫SBUF(MOVSBUF,A),訪問發送數據寄存器。

7.3串行口的工作方式

在串行口控制寄存器SCON中,SM0和SM1位決定串行口的工作方式。80C51串行口共有四種工作方式。

7.3.1串行口方式0—同步移位寄存器方式

當SM0=0、SM1=0時,串行口選擇方式0。這種工作方式實質上是一種同步移位寄器方式。

·數據傳輸串列傳輸速率固定為(1/12)fosc。

·由RXD(P3.0)引腳輸入或輸出數據,

·由TXD(P3.1)引腳輸出同步移位時鐘。

·接收/發送的是8位數據,傳輸時低位在前。幀格式如下:

…D0D1D2D3D4D5D6D7…方式0時的工作原理圖如圖7-2所示。

⑴發送 當執行任何一條寫SBUF的指令(MOVSBUF,A)時,就啟動串行數據的發送。 在執行寫入SBUF的指令時,選通內部D觸發器置1,構成發送移位寄存器的第9位, 並使發送控制器開始發送。當發送脈衝有效之後,移位寄存器的內容由RXD(P3.0)引腳串行移位輸出;移位脈衝由TXD(P3.l)引腳輸出。

在發送有效的期間,每個機器週期,發送移位寄存器右移一位,在其左邊補0。當數據最高位移到移位寄存器的輸出位時,原寫入第9位的

l正好移到最高位的左邊一位,由此向左的所有位均為

0,零檢測器通知發送控制器要進行最後一次移位,並撤銷發送有效,同時使發送中斷標誌TI置位。至此,完成了一幀數據發送的全過程。若CPU回應中斷,則執行從0023H開始的串行口發送中斷服務程式。

⑵接收 當REN=1(允許接收)且RI位清除時,就會啟動一次接收過程。 在下一機器週期的S6P2時刻,接收控制器將11111110寫入接收移位寄存器,並在下一時鐘週期S1P1使接收控制器的接收有效,打開“與非門”,同時由TXD引腳輸出移位脈衝。在移位脈衝控制下,接收移位寄存器的內容每一個機器週期左移一位,同時由RXD引腳接收一位輸入信號。 每當接收移位寄存器左移一位,原寫入的11111110也左移一位。當最右邊的0移到最左邊時,標誌著接收控制器要進行最後一次移位。在最後一次移位即將結束時,接收移位寄存器的內容送入接收數據緩衝寄存器SBUF,然後在啟動接收的第10個機器週期的S1P1時,清除接收信號,置位SCON中的RI,發出中斷申請。完成一幀數據的接收過程。若CPU回應中斷,則執行從0023H開始的串行口接收中斷服務程式7.3.2串行口方式1-8位UART

當SM0=0、SM1=l時,串行口選擇方式1。

·數據傳輸串列傳輸速率由T1和T2的溢出決定,可用程式設定。當T2CON寄存器中的RCLK和TCLK置位時,採用T2作為串行口接收和發送的串列傳輸速率發生器。而當RCLK和TCLK都為零時,採用T1作為串行口接收和發送的串列傳輸速率發生器。

·由TXD(P3.1)引腳發送數據。

·由RXD(P3.0)引腳接收數據。

·發送或接收一幀資訊為10位:1位起始位(0)、8位數據位(低位在前)和l位停止位(1)。幀格式如下:

起始D0D1D2D3D4D5D6D7停止⑴發送:方式1時,發送的工作原理圖如圖7-3所示。

當執行任何一條寫SBUF的指令時,就啟動串行數據的發送。在執行寫入SBUF的指令時,也將1寫入發送移位寄存器的第9位(由SBUF和1個獨立的D觸發器構成),並通知發送控制器有發送請求。實際上發送過程開始於16分頻計數器下次滿度翻轉(由全1變全0)後的那個機器週期的開始。每位的發送過程與16分頻計數器同步,而不是與“寫SBUF”同步。

開始發送後的一個位週期,發送信號有效,開始將起始位送TXD引腳。一位時間後,數據信號有效。發送移位寄存器將數據由低位到高位順序輸出至TXD引腳。一位時間後,第一個移位脈衝出現將最低數據位從右邊移出,同時0從左邊擠入。當最高數據位移至發送移位寄存器的出端時,先前裝入的第9位的l,正好在最高數據位的左邊,而它的右邊全部為0。這種狀態被零檢測器檢測到,在第10個位週期(16分頻計數器回0時),發送控制器進行最後一次移位,清除發送信號,同時使SCON寄存器中TI置位,完成了一幀數據發送的全過程。若CPU回應中斷,則執行從0023H開始的串行口發送中斷服務程式。

⑵接收方式1時,接收的工作原理圖如圖7-4所示。

當REN=1且清除RI後,若在RXD引腳上檢測到一個1到0的跳變,立即啟動一次接收。同時,複位16分頻計數器,使輸入位的邊沿與時鐘對齊,並將1FFH(即9個l)寫入接收移位寄存器。接收控制器以串列傳輸速率的16倍的速率繼續對RXD(P3.0)引腳進行檢測,

計數器的16個狀態把每一位的時間分為16份,對每一位時間的第7、8、9個計數狀態,位檢測器對RXD端的值採樣,這三個狀態理論上對應於每

一位的中央值。若發送端與接收端的串列傳輸速率有差異,就會發生偏移,只要這種差異在允許範圍內,就不至於發生錯位或漏碼。在上述三個狀態下,取得三個採樣值,其中至少有兩個值是一致的,即採用3取2的多數表決法,,可抑制雜訊。

如果在第1個時鐘週期中接收到的不是0,說明它不是一幀數據的起始位,則複位接收電路,繼續檢測RXD引腳上l到0的跳變。如果接收到的是起始位,就將其移入接收移位寄存器,然後接收該幀的其他位。接收到的位從右邊移入,原來寫入的1,從左邊移出,當起始位移到最左邊時,接收控制器將控制進行最後一次移位,把接收到的9位數據送入接收數據緩衝器SBUF和RB8,而且置位RI。

在進行最後一次移位時,能將數據送入接收數據緩衝器SBUF和RB8,而且置位RI的條件是:

·RI=0即上一幀數據接收完成時發出的中斷請求已被回應,SBUF中數據已被取走。

·

SM2=0或接收到的停止位=1。

若以上兩個條件中有一個不滿足,將不可恢復地丟失接收到的這一幀資訊。

7.3.3串行口方式2和3—9位UART

當SM0=1、SM1=0時,串行口選擇方式2;當SM1=1、SM0=1時,串行口選擇方式3。

·由TXD(P3.l)引腳發送數據。

·由RXD(P3.0)引腳接收數據。

·發送或接收一幀資訊為11位:1位起始位(0)、8位數據位(低位在前)、1位可編程位和1位停止位(l)。發送時可編程位TB8可設置為1或0,接收時可編程位進入SCON寄存器的RB8位。

·方式2的串列傳輸速率是固定的,為振盪器頻率的1/32或1/64。方式3的串列傳輸速率則由T1和T2的溢出決定,可用程式設定。

幀格式如下:

起始D0D1D2D3D4D5D6D7D8

停止方式2時的工作原理圖如圖7-5所示。⑴發送

當執行任何一條寫SBUF的指令時,就啟動串行數據的發送。在執行寫入SBUF的指令時,也將

1寫入發送移位寄存器的第

9位,並通知發送控制器有發送請求。實際上發送過程開始於16分頻計數器下次滿度翻轉(由全1變全0)後的那個機器週期的開始。所以每位的發送過程與16分頻計數器同步,而不是與“寫SBUF”同步。

開始發送後的一個位週期,發送信號有效,開始將起始位送TXD引腳。一位時間後,數據信號有效。發送移位寄存器將數據由低位到高位順序輸出至

TXD引腳。一位時間後,第一個移位脈衝出現將最低數據位從右邊移出,同時0從左邊擠入。當最高數據位移至發送移位寄存器的輸出端時,先前裝入的第

9位的

1,正好在最高數據位的左邊,而它的右邊全部為0。在第10個位週期間

(16分頻計數器回0時),發送控制器進行最後一次移位,清除發送信號,同時使TI置位。

⑵接收 當REN=l且清除RI後,若在RXD引腳上檢測到一個l到0的跳變,立即啟動一次接收。同時,複位16分頻計數器,使輸入位的邊沿與時鐘對齊,並將1FFH(即9個1)寫入接收移位寄存器。接收控制器以串列傳輸速率的16倍的速率繼續對RXD引腳進行檢測,對每一位時間的第7、8、9個計數狀態的採樣值用多數表決法,當兩次或兩次以上的採樣值相同時,採樣值予以接受。

如果在第1個時鐘週期中接收到的不是0,就複位接收電路,繼續檢測RXD引腳上

1到

0的跳變。如果接收到的是起始位,就將其移入接收移位寄存器,然後接該幀的其他位。接收到的位從右邊移入,原來寫入的1,從左邊移出,當起始位移到最左邊時,接收控制器將控制進行最後一次移位,把接收到的9位數據送入接收數據緩衝器SBUF和RB8,而且置位RI。

在進行最後一次移位時,能將數據送入接收數據緩衝器SBUF和RB8,而且置位RI的條件是:

·RI=0;

·SM2=0或接收到的停止位=1。

若以上兩個條件中有一個不滿足,將不可恢復地丟失接收到的這一幀資訊。

7.4多處理機通信方式

某些應用系統中,往往需要對多個對象進行控制,採用一個單片微機來控制系統中一個對象,然後採用多處理機通信方式實現應用系統的整個功能。 在串行口控制寄存器SCON中,設有多處理機通信位SM2(SCON.5)。 當串行口以方式2或方式3接收時,若SM2=1,只有當接收到的第9位數據(RB8)為1時,才將數據送入接收緩衝器SBUF,並使RI置1,申請中斷,否則數據將丟失;若SM2=0,則無論第9位數據(RB8)是1還是0,都能將數據裝入SBUF,並且發中斷。利用這一特性,便可實現主機與多個從機之間的串行通信。圖7-6為多機通信連線示意圖,系統中左邊的80C51為主機,其餘的為1~n號從機,並保證每臺從機在系統中的編號是惟一的。

系統初始化時,將所有從機中的SM2位均設置為1,並處於允許串行口中斷接收狀態。 主機欲與某從機通信,先向所有從機發出所選從機的地址,從機地址符合後,接著才發送命令或數據。

·在主機發地址時,置第9位數據(RB8)為1,表示主機發送的是地址幀;

·當主機呼叫某從機聯絡正確後,主機發送命令或數據幀時,將第9位數據(RB8)清0。

各從機由於SM2置1,將回應主機發來的第9位數據(RB8)為1的地址資訊。從機回應中斷後,有兩種不同的操作:

·若從機的地址與主機點名的地址不相同,則該從機將繼續維持SM2為l,從而拒絕接收主機後面發來的命令或數據資訊,等待主機的下一次點名。

·若從機的地址與主機點名的地址相同,該從機將本機的SM2清0,繼續接收主機發來的命令或數據,回應中斷。

7.5串行口的應用

7.5.1串行口的串列傳輸速率發生器及串列傳輸速率計算

串行口的串列傳輸速率發生器如圖7-7所示。

·方式0時的串列傳輸速率由振盪器的頻率(fosc)所確定:串列傳輸速率為fosc/12。

·方式2時的串列傳輸速率由振盪器的頻率(fosc)和SMOD位(PCON.7)所確定:

當SMOD位=1時,串列傳輸速率=fosc/32;當SMOD=0時,串列傳輸速率=fosc/64。

·方式1和3時的串列傳輸速率由定時器T1和T2的溢出率和SMOD(PCON.7)所確定。

(1)用定時器T1(=0)產生串列傳輸速率

定時器T1的溢出率與它的工作方式有關:

·定時器T1工作於方式0:此時定時器T1相當於一個13位的計數器。

式中:TC——13位計數器初值;

X——中斷服務程式的機器週期數,在中斷服務程式中重新對定時器置數。

·定時器T1工作於方式1:此時定時器T1相當於一個16位的計數器。式中:TC——16位計數器初值;

X——中斷服務程式的機器週期數,在中斷服務程式中重新對定時器置數。

·定時器Tl工作於方式2:此時定時器T1工作於一個8位可重裝的方式,用TL1計數,用TH1裝初值。

(2)用T2產生串列傳輸速率

(RCAP2H,RCAP2L)為16位寄存器的初值(定時常數)。

7.5.2方式0的編程和應用

應用方式0可以擴展並行I/O口。

例:

使用74LS164的並行輸出瑞接8只發光二極體,利用它的串入並出功能,把發光二極體從左向右依次點亮,並不斷迴圈之。電路連接圖見圖7-8。

MOV SCON,#00H ;設串行口為方式0,

CLR ES ;禁止串行口中斷

MOV A,#80H ;先顯示最左邊發光二極體LED: MOV SBUF,A ;串行輸出

JNB TI,$ ;輸出等待

CLR TI ACALL DELAY ;輪顯間隔

RR A ;發光右移

AJMP LED ;迴圈7.5.3方式1的編程和應用

例:試編寫雙機通信程式。甲、乙雙機均為串行口方式1,並以定時器T1的方式2為串列傳輸速率發生器,串列傳輸速率為2400。 串列傳輸速率的計算:這裏使用6MHz晶振,以T1的方式2制定串列傳輸速率。此時T1相當於一個8位的計數器。 計算定時器T1的計數初值:

2smodfosc 1

串列傳輸速率= ×

× 3212 28-TH1

TH1=28-(2SMOD×fosc)÷(串列傳輸速率×32×12) =256-(20×6×106)÷(2400×32×12) =256-6.5=249.5=FAH

⑴甲機發送: 將以片內RAM的78H及77H的內容為首地址、以76H及75H的內容減1為末地址的數據塊內容,通過串行口傳至乙機。 例:(78H)=20H ;首地址高位 (77H)=00H

(76H)=20H ;末地址高位 (75H)=20H

即要求程式將片外RAM的2000H~20lFH中的內容輸出到串行口。對數據塊首、末地址的傳送以查詢方式進行,而數據的傳送以中斷方式進行。

ORG 0000H SJMP TRANS ORG 0023H ;串行口中斷入口

AJMPSINT

ORG 0030HTRANS:MOVTMOD,#20H ;置T1為定時器方式2 MOV TL1,#0FAH ;置T1定時常數

MOVTH1,#0FAH SETBEA ;允許中斷

CLRES ;關串行口中斷

MOV PCON,#00H ;串列傳輸速率不倍增

CLRTI ;清發送中斷

MOV PCON,#00H ;串列傳輸速率不倍增

MOVSCON,#40H ;置串行口方式1 MOVSBUF,78H ;輸出首地址WAIT1:JNBTI,WAITI;查詢等待發送結束

CLR TI MOV SBUF,77HWAIT2:JNBTI,WAIT2;查詢等待發送結束

CLRTI

MOVSBUF,76H ;輸出末地址WAIT3:JNBTI,WAIT3 CLRTI MOVSBUF,75HWAIT4:JNBTI,WAIT4 CLRTI SETBES ;允許串行口中斷

MOVDPH,78H ;輸出數據塊中第1個數據

MOVDPL,77H MOVXA,@DPTR CLRTI MOVSBUF,A SJMP $ ;中斷等待

ORG 0200H ;串行口中斷服務程式SINT:PUSH DPL ;保護現場

PUSH DPH PUSH A

INC 77H ;地址加1

MOV A,77H JNZ JP1 INC 78HJP1:MOV A,78H CJNEA,76H,END1 ;判數據傳送是否結束,未 ;結束則轉END1 MOVA,77H CJNEA,75H,END1 CLRES ;結束,關串行口中斷ESCOM:POPA ;恢復現場

POPDPH POPDPL RETI

END1:MOVDPH,78H;數據輸出未結束,則繼續發送

MOVDPL,77H MOVXA,@DPTR CLRTI MOVSBUF,A RETI

⑵乙機接收

乙機通過RXD引腳接收甲機發來的數據,接收串列傳輸速率與甲機一樣。接收的第1、2位元組是數據塊的首地址,第3、4位元組是數據塊的末地址減1,第5位元組開始是數據,接收到的數據依次存入數據塊首地址開始的記憶體中。

ORG 0000H SJMP RECEIVE ;乙機接收

ORG 0023H AJMP RSINT ;串行口中斷入口

ORG 0030HRECEIVE:MOVTMOD,#20H

;設T1為定時器方式2

MOV TL1,#0FAH ;置T1定時常數

MOVTH1,#0FAH

SETBEA ;允許中斷

CLRES ;關串行口中斷

CLRTI ;清發送中斷

MOVSCON,#50H ;置串行口方式1、接收

CLR20H ;置地址標誌(20H=0,為 ;地址;20H=1,為數據)

MOV70H,#78H SJMP $ ;中斷等待

ORG 0200HRSINT:PUSHDPL;保護現場

PUSHDPH PUSHACC MOVA,R0 PUSHACC JB20H,DATA;判別接收的是地址還是數據,是數 ;據,轉移

MOVR0,70H ;是地址,分別送入78H~75H中去

MOVA,SBUFMOV@R0,A DEC70H CLRRI MOVA,#74H CJNEA,70H,RETURN;是地址,轉結束

SETB20H ;地址已接收完,置接收數據標誌

RETURN:POPACC;恢復現場

MOVR0,A

POPACC

POPDPH POPDPL RETI

DATA:MOVDPH,78H ;接收數據

MOVDPL,77H

MOVA,SBUF MOVX@DPTR,A ;將數據送入片外RAM CLRRI INC77H ;地址加1

MOVA,77H JNZDATA1 INC78H

DATA1∶MOVA,76H CJNZA,78H,RETURN MOV A,75H CJNEA,77H,RETURN CLRES ;結束,關串行口中斷

AJMPRETURN

例:通過串行口發送帶奇偶校驗位的數據塊

ASCII碼由7位組成,其最高位可作為奇偶校驗位用。數據塊通過串行口發送和接收,採用8位非同步通信,串列傳輸速率為1200,已知fosc=11.0592MHz。

從內部RAM單元20H~3FH中取出ASCII碼加上奇偶校驗位之後發出。設串行口為方式1,定時器/計數器T1為方式2作為串行口的串列傳輸速率發生器。∵SMOD=0 ∴TH1=232=E8H

ORG 0000H MOV TMOD,#20H ;設T1為方式2

MOV TL1,#0E8H ;T1定時常數MOV TH1,#0E8H SETB TR1 ;啟動T1 MOV SCON,#01000000B ;設串行口為方式1

MOV R0,#20H ;設發送數據區首址

MOV R7,#32 ;發送32個ASCII碼數據LOOP:MOVA,@R0 ;取ASCII碼數據

ACALLSP-OUT ;調用串行口發送副程式

INC R0 ;未發送完,則繼續

DJNZ R7,LOOP

串行口發送副程式SP-OUT:MOVC,P ;設奇校驗位 CPL C MOV ACC.7,C MOV SBUF,A ;帶校驗位發送

JNB TI,$ ;發送等待

CLR TI RET

例通過串行口接收帶奇偶校驗位的數據塊。把接收到的32個位元組數據存放到20H~3FH中,串列傳輸速率仍為1200,若奇校驗出錯,將進位標誌C置1。

ORG 0000H MOV TMOD,#20H ;設T1為定時器方式2 MOV TL1,#0E8H ;設T1時間常數

MOV TH1,#0E8H SETB TR1 ;啟動T1 MOV R0,#20H ;接收緩衝區首址

MOV R7,#32 ;接收位元組計數器LOOP:ACALL SP-IN ;調用帶奇校驗的串行口接 ;收副程式

JC ERROR ;校驗錯,轉出錯處理

MOV @R0,A ;存入

INC R0 DJNZ R7,LOOP ;未接收完,則繼續

ERROR:… ;校驗錯,處理SP-IN:MOVSCON,#01010000B ;設串行口為方式1,啟動接收

JNB RI,$ CLR RI MOV A,SBUF ;接收一個位元組

MOV C,P ;檢查奇校驗位,若出錯,C=1 CPL C ANL A,#7FH ;去掉校驗位後的ASCII碼數據

RET7.5.4方式2和3的編程和應用

方式2接收/發送的一幀資訊是11位:第0位是起始位(0);第1~8位是數據位;第9位是程式控制位,可由用戶置TB8決定;第10位是停止位。

· 方式2的串列傳輸速率為: 串列傳輸速率=振盪器頻率/n其中:當SMOD=0時,n=64;

當SMOD=l時,n=32。由於方式2和方式3基本一樣,僅串列傳輸速率設置不同,所以具體使用方法見方式3的編程。

例:試編寫串行介面以工作方式2發送數據的中斷服務程式。

串行介面發送數據時由TXD端輸出;工作方式2發送的一幀資訊為11位:1位起始位,8位數據位,1位可編程為1或0的第9位(可用作奇偶校驗位或數據/地址標誌位)和1位停止位。在串行數據傳送時,設工作寄存器區2的R0作為發送數據區的地址指示器。奇偶校驗位的發送是在將發送數據寫入發送緩衝器SBUF之前,先將奇偶標誌寫入SCON的TB8位。程式設計如下:

ORG 0023H AJMP SPINT

SPINT:CLR0AFH ;關中斷(EA) PUSHPSW ;保護現場

PUSHACC SETB0AFH ;開中斷

SETBPSW.4 ;切換寄存器工作組

CLRTI ;清除發送中斷請求標誌

MOVA,@R0 ;取數據,置奇偶標誌位

MOVC,P ;奇偶標誌位P送TB8 MOVTB8,C MOVSBUF,A ;數據寫入發送緩衝器,啟動發送

INCR0 ;數據地址指針加1

CLR 0AFH ;恢復現場

POP ACC POP PSW SETB0AFH CLRPSW.4 ;切換寄存器工作組

RETI ;中斷返回

例:方式3和方式1的不同在於接收/發送的資訊位數不同,而與方式2的不同僅在於串列傳輸速率設置不同。 這裏以雙機通信為例。串行口以方式3進行接收和發送,以T1為串列傳輸速率發生器,選擇定時器方式2。

程式首先發送數據存放地址,而地址的高位存放在78H中,地址的低位存放在77H中;然後發送00H,01H,02H,…,FEH,共255個數據以後結束。

甲機的發送程式:

ORG 0023H CLRTI RETITRANSFER:MOVTMOD,#20H ;置定時器T1為定時 ;方式2

MOVTL1,#0F0H ;置T1定時常數

MOVTH1,#0F0H SETBEA ;允許中斷

CLRES ;禁止串行口中斷

CLRET1 ;禁止定時器T1中斷

MOVSCON,#0E0H ;置串行口方式3

SETBTB8 ;表示發送的是地址

MOVSBUF,78H ;發送地址

JNBTI,$

CLRTI MOVSBUF,77H JNB TI,$ CLR TI MOVIE,#90H ;允許串行口中斷

CLRSM2 ;以後發送的是數據

MOVA,#00H ;發送數據

LOOP:MOV SBUF,A INC A JNB TI,$ CLR TI CJNZA,#0FFH,LOOP ;判是否結束

CLRES ;禁止串行口中斷

CLREA ;關中斷HERE:AJMPHERE

乙機接收程式:把接收到的頭兩個位元組作為存放數據的首地址,再接收到的255個位元組的數據存放入相應的單元中。

ORG 0023H AJMP SINT ;串行口中斷入口RECEIVE:MOVTL1,#0F0H;置定時常數

MOVTH1,#0F0H MOVTMOD,#20H;置定時方式2

SETBES ;允許串行口中斷

CLRET1 ;禁止定時器T1中斷

SETBEA ;開中斷

MOVSCON,#0F0H;置串行口方式3接收

MOVR0,#0FEH ;數據個數

RWAIT:AJMPRWAIT ORG 1000H SINT:MOVC,SM2 JNCPD+2 ;輸入是否為地址

INCR0 NOP MOVA,R0 JZPD MOVDPH,SBUF ;輸入的是高位地址

AJMPPD+1PD:

MOVDPL,SBUF ;輸入的是低位地址

CLRSM2 ;下一次輸入是數據PD+l:CLR RI RETIPD+2: MOVA,SBUF ;是數據

MOVX@DPTR,A INCDPTR CLRRI CJNZA,#0FEH,RETURN;判是否結束

CLRES;結束,關中斷RETURN:RETI

例:多機通信 在集散式分佈系統中,往往採用一臺主機和多臺從機。系統連接圖請參考圖7-6。主機串行幀的第9數據位為1,表示地址幀;若為0,表示命令/數據幀。 多機通信過程簡述如下:

①所有從機的SM2=1,只回應主機的地址幀。

②主機發送地址幀,

③所有從機接收到地址幀後,均中斷各自CPU,並與本從機地址比較。

④被尋址的從機,清其SM2,其餘從機SM2仍為1,對主機發出的命令/數據幀不予理睬。

主機與被尋址的從機進行命令或數據的傳送。通信結束後,該從機又重設SM2=1。

本例只規定以下幾條:

①系統中允許接有255臺從機,它們的地址分別為00H—FEH。

②地址FFH是對所有從機都起作用的一條控制命令:命令各從機恢復SM2=1的狀態。

③主機發送的控制命令代碼為:

00H–要求從機接收數據塊

01H–要求從機發送數據塊 其他–非法命令

④數據塊長度、16個位元組

從機狀態字格式為:

D7D6D5D4D3D2D1D0ERR00000TRDYRRDY其中:若ERR=1,從機接收到非法命令 若TRDY=1,從機發送準備就緒 若RRDY=1,從機接收準備就緒

主機在接收或發送完一個數據塊後可返回主程序,完成其他任務。從機部分以串行口中斷服務程式的方式給出。若從機未作好接收或發送數據的準備,就從中斷程式中返回,在主程序中作好準備。系統採用T1作為串列傳輸速率發生器,主機和從機中對定時器初始化的程式從略。圖7-9是多機串行通信主機程式的流程圖,圖7-10是多機串行通信從機程式的流程圖。

⑴主機串行通信副程式

入口參數: (R0)——主機發送的數據塊首址

(R1)——主機接收的數據塊首址

(R2)——被尋址從機地址

(R3)——主機命令

(R4)一一數據塊長度MSIO:MOVSCON,#0D8H;設串行口模式3,允許接收, ;TB8置1MSIO1:MOVA,R2 ;發送地址幀

MOV SBUF,A JNB RI,$ ;等待從機應答

CLRRI

MOV A,SBUF XRL A,R2 ;判應答地址是否相符

JZ MSIO3MSIO2:MOVSBUF,#0FFH ;重新聯絡

SETBTB8 SJMP MSIO_1MSIO3:CLRTB8 ;地址符合,準備送命令

MOV SBUF,R3 ;送命令

JNB RI,$ ;等待從機應答

CLR RI MOVA,SBUF

JNB ACC.7,MSI04 ;判命令是否出錯

SJMP MSIO2 ;若從機接收命令出錯,重 ;新聯絡MSIO4:CJNER3,#00,MSIO_5;不是要求從機接收數據, ;則跳轉

JNB ACC.0,MSIO2 ;從機接收數據準備就緒否?LP–TX:MOVSBUF,@R0 ;主機發送數據塊

JNB TI,$ ;等待發送完一幀

CLRTI INC R0 DJNZR4,LP–TX RETMSIO5:JNBACC.1,MSIO2 ;從機發送數據準備就緒否?LP–RX:JNBRI,$ ;主機接收數據塊

CLRRI MOV A,SBUF MOV @R1,A INC R1 DJNZR4,LP–RX RET

若主機向10號從機發送數據塊,數據塊放置在內部RAM

溫馨提示

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

評論

0/150

提交評論