




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第7章:80C51單片機的串行口通信1目錄7.1串行通信基礎知識
7.1.1并行通信與串行通信7.1.2串行通信的通信方式7.1.3串行通信的數據傳送方向7.1.4通信中的誤碼問題7.280C51系列單片機的串行接口
7.2.1串行接口的結構7.2.2串行接口的控制寄存器
7.2.3串口通信的波特率設計7.3串行口工作模式7.3.1模式07.3.2模式17.3.3模式27.3.4模式327.4串行通信應用舉例
7.4.1串行口模式0的應用7.4.2串行口模式1的應用7.4.3串行口模式2的應用7.4.4串行口模式3的應用7.5串行通信實用技術
7.5.1雙機串行通信的硬件連接7.5.280C51單片機的多機通信7.5.3雙機串行通信軟件編程7.5.4PC機與單片機的點對點串行通信接口設計7.5.5PC機與多個單片機的串行通信接口設計第7章:80C51單片機的串行口通信7.1串行通信基礎知識37.1.1并行通信與串行通信一、并行通信并行通信是指將數據字節的各位用多條數據線同時進行傳送。每一位數據都需要一條傳輸線,8位數據總線的通信系統,一次傳送8位數據(1個字節),將需要8條數據線。并行通信的特點:是傳送速度快、需要的數據傳輸線較多。因此當距離較遠、位數又多時導致了通信線路復雜且成本高。一般適合于短距離的數據傳輸。(a)并行通信4二、串行通信串行通信是指所傳送的數據按順序一位接一位地進行傳送。因為一次只能傳送一位,所以對于一個字節的數據,至少要分8位才能傳送完畢。串行通信的特點是需要的數據傳輸線較少,通信線路簡單、成本低,適用于數據的遠距離通信。但傳輸速度慢。只要一對傳輸線:即發送線和接收線就可以實現通信。缺點是傳送速度慢,假設并行傳送n位數據所需的時間為t,那么串行傳送的時間至少為nt,而實際上總是大于nt。7.1串行通信基礎知識(b)串行通信57.1.2串行通信的通信方式
根據通信協議的不同,串行通信可分為同步通信和異步通信兩種基本方式。一、同步通信
同步通信是一種連續串行傳輸數據的通信方式,傳送的數據可以是多個字符組成的數據塊,每次傳送的一幀數據由同步字符、數據字符和校驗字符三部分組成。傳輸一幀數據的開頭采用同步字符使收發雙方實現嚴格同步,期間不允許出現空隙,沒有起始位和停止位,提高了傳輸速度。無數據傳送時,發送同步字符。同步通信方式發送的數據量大、速度快,常用于傳輸速度要求高的場合,但較復雜。7.1串行通信基礎知識6同步通信方式幀格式如圖7-2所示。圖7-2字符幀的同步串行通信格式7.1串行通信基礎知識7二、異步通信
異步通信不需要同步字符,也不需要發送設備保持數據塊的連續性。發送的每一字符,都必須先按照通信雙方約定好的格式進行格式化,在其前、后分別加上起始位和停止位,用以指示每一字符的開始和結束。一幀信息傳送完畢后,可傳送不定長度的空閑位“1”,作為幀與相鄰幀之間的間隔,也可以沒有空閑位間隔。
80C51單片機一般采用異步通信方式,一個字符幀的異步串行通信格式如圖7-3所示。7.1串行通信基礎知識8圖7-3字符幀的異步串行通信格式7.1串行通信基礎知識97.1.3串行通信的數據傳送方向
數據通信系統一般由數據發送方、數據接收方及數據通路組成的。串行通信的數據是在兩個站之間傳送的,按照數據的傳送方向,串行通信有三種數據通路連接方式。7.1串行通信基礎知識一、單工方式
在單工方式下,通信線的一端接發送器,另一端接接收器,形成單向連接。若A為發送端,B為接收端,數據僅能從A端發至B端,如廣播、無線尋呼等,如7-4中(a)圖所示。(a)單工方式10二、半雙工方式
在半雙工方式下,系統中的每個通信設備都由一個發送器和一個接收器組成,通過收、發開關接到通信線上。數據既可
從A端發送到B端,也可以由B端發送到A端,不過在同一時間只能作一個方向的數據傳送,如使用同一載波頻率的對講機,如7-4中(b)圖所示。三、全雙工方式
在全雙工方式下,在同一時間兩端既可同時發送,也可同時接收,如普通電話、手機等,80C51單片機使用全雙工方式,如7-4(c)圖所示。7.1串行通信基礎知識(b)半雙工方式(c)全雙工方式7.1.4通信中的誤碼問題
數據在串行傳輸過程中,由于干擾可能使傳輸的數據發生錯誤,這種情況稱為出現了“誤碼”,錯誤的數據位數與所有傳輸數據總位數的比率叫做“誤碼率”,發現傳輸中的錯誤叫做“檢錯”,發現錯誤后消除錯誤叫做“糾錯”。
為了使系統能夠可靠、穩定地通信,在編程時應當設計通信協議,并應考慮數據的糾錯,一般在通信時采取數據校驗的辦法,可有效保證數據傳輸的可靠性,目前較為流行的方法有奇偶校驗、累加和校驗、據環冗余碼校驗幾種:7.1串行通信基礎知識一、奇偶校驗
最簡單的檢錯方法是“奇偶校驗”,在傳送字符的各位之外,再傳送1位奇/偶校驗位。①奇校驗:數據中1的個數與校驗位1的個數之和應為奇數②偶校驗:數據中1的個數與校驗位1的個數之和應為偶數
在接收字符時,對1的個數進行校驗,若發現不一致,則說明傳輸數據過程中出現了差錯。奇偶校驗無法實現自動糾錯,發現錯誤后只能要求重發,但由于其實現簡單,仍得到了廣泛使用。7.1串行通信基礎知識13二、累加和校驗
累加和校驗是指發送方將發送的數據塊求和,并將“校驗和”附加到數據塊末尾,接收方接收數據時也是先對數據塊求和,將所得結果與發送方的“校驗和”進行比較,相符則無差錯,否則即出現了差錯。校驗和能夠檢測到比奇偶校驗更多的錯誤,但當字節順序顛倒時,校驗和不能發現,因為其不能發現次序錯誤。三、據環冗余碼校驗
據環冗余碼校驗是通過某種數學運算實現有效信息與校驗位之間的循環校驗,常用于對磁盤信息的傳輸、存儲區的完整性校驗等。這種校驗方法糾錯能力強,廣泛應用于同步通信中。7.1串行通信基礎知識7.280C51系列單片機的串行接口1480C51系列單片機有一個全雙工的串行口,這個口除可以實現串行異步通信,還可以作為同步移位寄存器使用。7.2.1串行接口的結構80C51系列單片機串行口主要由發送數據緩沖器、發送控制器、接收數據緩沖器、接收控制器、輸出控制門、輸入移位寄存器等組成。
由于串行口對外有兩條獨立的收、發信號線RXD(P3.0)、TXD(P3.1),因此可以同時發送、接收數據,實現全雙工通信。15圖7-5串行口結構框圖7.280C51系列單片機的串行接口串行口結構框圖如圖7-5所示:16寄存器地址名稱76543210SCON98H串行口控制SM0SM1SM2RENTB8RB8TIRIPCON87H電源控制SMOD------GF1GF0PDIDLSBUF99H串行口緩存----------------7.2.2串行接口的控制寄存器
對串行口的訪問和設置是通過訪問相關的特殊功能寄存器完成的,與串行口相關的特殊功能寄存器共有3個,如表7-1所示。表7-1串口控制寄存器7.280C51系列單片機的串行接口17一、串行數據緩沖器SBUF80C51單片機串行數據緩沖器SBUF是兩個8位的特殊功能寄存器,其在功能和物理空間上均獨立,但兩者共用SBUF這個符號,并且字節地址均為99H。發送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,兩者均只能進行字節尋址。SBUF具有接收緩沖功能,接收器是雙緩沖結構,在第一個字節從寄存器讀出之前,可以開始接收第二個字節,但是如果第二個字節接收完畢時,第一個字節仍未讀出,其第一個字節將會丟失。發送器為單緩沖器,因為發送時CPU是主動的。7.280C51系列單片機的串行接口181.串行口的數據發送
單片機啟動發送的方法是:在TI=0的條件下,CPU通過執行一條寫SBUF指令。如:執行MOVSBUF,A指令向輸出緩沖器SBUF。
寫入數據,從而啟動數據串行發送。在波特率發生器產生的發送時鐘控制下,按照預先設置的幀格式由低位到高位逐位由TXD端輸出發送數據,發送結束TI=1。7.280C51系列單片機的串行接口192.串行口的數據接收
單片機啟動接收的首要條件是REN=1。串行口通過對RXD引腳信號的采樣來確認串行數據,若檢測到發送數據的起始位(一般為低電平),則其后對RXD引腳每間隔一定時間進行采樣,采樣到的數據在接收時鐘控制下以移位方式存入輸入移位寄存器,當數據接收完成或檢測到停止位時,CPU將自動把接收到輸入移位寄存器的內容送入接收緩沖器SBUF,并置接收完成標志位RI=1,編程人員可通過中斷方式或查詢方式得知這一消息,隨后編寫讀取指令如:MOVA,SBUF指令將接收到的數據取出。7.280C51系列單片機的串行接口20例如:甲機發送數據給乙機。圖7-6串行通信甲機發送已機接收7.280C51系列單片機的串行接口21
甲機作為發送機,執行MOVSBUF,A指令后CPU向SBUF寫入數據,啟動發送過程,A中的8位數據并行送入SBUF,在發送控制器的作用下,按照編程人員設定的發送速率(發送波特率),每傳來一個時鐘脈沖,數據移出一位,從TXD端由低位到高位一位一位地發送到通信線路上,移出的數據經過線路直達乙機。乙機作為接收機,按照與發送速率相同的接收速率(接收波特率),將數據按照移位脈沖的頻率由低位到高位一位一位地移入到SBUF。
很顯然,只有雙方的傳送速度一致,才能完成數據的正確傳送,不一致,勢必會造成數據位的丟失。同樣,如果數據傳輸率一致,幀格式不一致同樣會導致數據傳輸混亂。7.280C51系列單片機的串行接口22SM0SM1SM2RENTB8RB8TIRI二、串行口控制寄存器SCON
串行口控制寄存器SCON的作用是控制串行通信的工作方式、在數據發送和接收的過程中設置中斷標志。SCON的字節地址為98H,可進行位尋址,位地址從高位到低位分別為9FH~98H,寄存器的位定義如下:D7D6D5D4D3D2D1D07.280C51系列單片機的串行接口23SM0SM1工作方式功能波特率00方式08位同步移位寄存器方式fosc/1201方式110位通用異步接收器/發送器可變(由定時器控制)10方式211位通用異步接收器/發送器fosc/32或fosc/6411方式311位通用異步接收器/發送器可變(由定時器控制)(1)SM0、SM1:定義串口工作方式選擇位。SM0和SM1定義串行口4種工作方式,如表7-2所示。7.280C51系列單片機的串行接口表7-2串行口工作方式(fosc為系統晶振頻率)24(2)SM2:多機通信控制位。SM2主要用于方式2和方式3。當接收機的SM2=1時,可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數據進入SBUF,并激活RI,進而在中斷服務程序中將數據從SBUF讀走)。當SM2=0時,不論收到的RB8是0還是1,均可以使收到的數據進入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現多機通信。在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1。(3)REN,允許接收控制位。
該位由軟件置1或清0,REN=1時,允許串行口接收數據;REN=0時,禁止串行口接收數據。7.280C51系列單片機的串行接口25(4)TB8:方式2或3中發送數據的第9位。
該位按由軟件置1或清0,在方式2或方式3時存放要發送數據的第9位??梢杂米鲾祿钠媾夹r炍唬蛟诙鄼C通信中,作為地址幀和數據幀的標志位。一般TB8=0時,表示發送的是數據信息;TB8=1時,表示發送的是地址信息。方式0和方式1該位未用。(5)RB8:方式2或3中接收數據的第9位。
在方式2或方式3下存放接收數據的第9位。可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀和數據幀的標志位。一般約定數據信息為0,地址信息為1。在方式1中,若SM2=0,則RB8是接收到的停止位。在方式0中,RB8未用。7.280C51系列單片機的串行接口26(6)TI:發送中斷標志位。
該位用來指示一幀數據是否發送完,在方式0中,發送完第8位數據,由硬件置1。其他方式中,在發送停止位時,由硬件置1。值得注意的是,在任何方式下,TI雖然都是由硬件自動置位,但都必須由軟件來清零。(7)RI:接收中斷標志位。
該位用來指示一幀數據是否接收完,在方式0中,接收完第8位數據,由硬件置1。其他方式中,在接收停止位時,由硬件置1。RI必須由軟件清零。
注意:發送中斷標志TI和接收中斷標志RI共用一個中斷入口地址(中斷向量)。7.280C51系列單片機的串行接口27SMOD(SMOD0)(LVDF)(POF)GF1GF0PDIDL三、電源管理寄存器PCON
電源管理寄存器在特殊功能寄存器中,字節地址為87H,不能位尋址,其各位的定義如下:D7D6D5D4D3D2D1D0(1)SMOD:該位與串口通信波特率有關。SMOD=0:串口方式1,2,3時,波特率正常。SMOD=1:串口方式1,2,3時,波特率加倍。(3)(SMOD0),(LVDF),(POF):這三位是STC單片機特有的功能,請查看相關手冊,其他單片機保留未使用。(4)GFl,GF0:兩個通用工作標志位,用戶可以自由使用。7.280C51系列單片機的串行接口28(5)PD:掉電模式設定位。PD=0:單片機處于正常工作狀態。PD=1:單片機進入掉電(PowerDown)模式,可由外部中斷低電平觸發或由下降沿觸發或者硬件復位模式換醒,進入掉電模式后,外部晶振停振,CPU、定時器、串行口全部停止工作,只有外部中斷繼續工作。(6)IDL:空閑模式設定位。IDL=0:單片機處于正常工作狀態。IDL=1:單片機進入空閑(Idle)模式,除CPU不工作外,其余仍繼續工作,在空閑模式下可由任一個中斷或硬件復位喚醒。7.280C51系列單片機的串行接口297.2.3串口通信的波特率設計一、什么是波特率
波特率是指每秒傳送二進制數據的位數,單位是bps(位/秒),即1波特=1位/秒。
單片機或計算機在串口通信時的速率用波特率表示。
如果單片機與計算機之間每秒鐘傳送360個字符,而每個字符格式包含10位(1個起始位、1個停止位、8個數據位),這時的波特率為10位×360個/秒=3600bps。7.280C51系列單片機的串行接口30二、80C51單片機串行口的波特率設計
串行通信的波特率隨串行口工作方式的不同而不同,串行口的4種工作方式對應著3種波特率。
影響波特率的因素主要有以下幾個:系統的振蕩頻率fosc。電源控制寄存器PCON中的波特率倍增位SMOD。定時器/計數器T1的溢出率設置。7.280C51系列單片機的串行接口31
接下來討論在各種工作方式下的波特率設置方法。1.模式0的波特率
在模式0時,每個機器周期產生一個移位時鐘,發送或接收一位數據。所以,波特率固定為振蕩頻率的1/12,且不受SMOD的影響。即:
模式0的波特率=7.280C51系列單片機的串行接口322.模式2的波特率
模式2波特率的產生與模式0不同,模式2的波特率由系統的振蕩頻率fosc和PCON的最高位SMOD確定,當SMOD=0時,波特率為fosc/64;若SMOD=l,波特率為fosc/32,即:模式2的波特率=7.280C51系列單片機的串行接口333.模式1和模式3的波特率
模式1和模式3的移位時鐘脈沖由定時器T1的溢出率決定,故波特率由定時器T1的溢出率與SMOD值共同決定,即:模式1和模式3的波特率=?T1的溢出率
當T1做波特率發生器使用時,最典型的用法是使T1工作在模式2(初值自動加載)定時方式,若計數初值為X,則每過“256-X”個機器周期。定時器T1就會產生一次溢出。為了避免因溢出而引起中斷,此時應禁止中斷。這時,溢出周期為7.280C51系列單片機的串行接口34溢出率為溢出周期的倒數,所以:波特率=此時,定時器T1工作在模式2時的初值為:7.280C51系列單片機的串行接口35【例7-1】設晶振頻率fosc=6MHz,SMOD=1,設定時器T1工作在方式2,fosc為6MHz時,波特率為2400bit/s,計算定時初值X,并初始化T1和串行口。解:X=256-6×106×(1+1)/(2400×32×12)=242.98≈243=0F3H則定時器T1和串行口的初始化程序如下:
MOVTMOD,#20H;設T1為方式2定時MOVTH1,#0F3H;置時間常數MOVTL1,#0F3HSETBTR1 ;啟動T1ORLPCON,#80H ;SMOD=1MOVSCON,#50H;串行口方式17.280C51系列單片機的串行接口7.3串行口工作模式36……D0D1D2D3D4D5D6D7……7.3.1模式0
模式0時80C51單片機串行口工作在同步移位寄存器狀態,有輸入/輸出方式,一般應用于擴展I/O口。8位串行數據的輸入或輸出都是通過RXD端,而TXD端用于送出同步移位脈沖,作為外接器件的同步移位信號。波特率固定為fsoc/12。
模式0以8位為一幀數據,沒有起始位和停止位,傳送數據時,低位在前、高位在后,其幀格式為:37
模式0的發送是在TI=0的情況下,由一條寫發送緩沖器的指令開始。例如:MOVSBUF,A。CPU執行完該指令,串行口即將8位數據從RXD端送出(低位在前),同時在TXD端發出同步移位脈沖。8位數據發送完畢后,由硬件置位TI=1,可通過查詢TI位來確定是否發送完一幀數據,TI=1表示發送緩沖器已空;TI=1也可作為中斷請求信號,申請串行口發送中斷。當要發送下一組數據時,需用軟件使TI清零,然后才可發送下一組數據。7.3串行口工作模式(a)串行口方式0發送時序38(b)串行口方式0接收時序
模式0的接收是在RI=0的條件下,執行指令使得REN=1,啟動串行口接收。接收數據由RXD端輸入(低位在前),TXD端仍發出同步移位脈沖。接收到8位數據以后,由硬件使RI=1??赏ㄟ^查詢RI位來確定是否接收到一組數據,RI=1表示接收數據已裝入接收緩沖器,可以用指令讀取其內容,常用的指令如:MOVA,SBUF;RI=1也可作為中斷請求信號,申請串行口接收中斷。無論是中斷方式還是查詢方式,當CPU讀取數據后,需用軟件使RI清零,以準備接收下一組數據。7.3串行口工作模式在模式0中,SCON寄存器中的SM2、RB8、TB8都不起作用,一般設它們為零即可。39起始DOD1D2D3D4D5D6D7停止7.3.2模式1
串行口定義為模式1時,是串行異步通信方式。模式1一幀數據由10位組成,包括1位起始位、8位數據位、1位停止位,其幀格式為:
7.3串行口工作模式40
模式1的發送也是在TI=0時由一條寫發送緩沖器SBUF的指令開始。啟動發送后,串行口自動插入一位起始位(邏輯0),接著是8位數據(低位在前),然后插入一位停止位(邏輯1),在發送移位脈沖作用下,依次由TXD端發出。一幀信息發完后,自動維持TXD端信號為1。在8位數據發完之后,也就是在插入停止位時,使TI置1,用以通知CPU可以發送下一幀數據。7.3串行口工作模式(a)串行口方式1發送時序41
模式1的接收也是在RI=0的條件下,執行指令使得REN=1,啟動串行口接收。串行口采樣引腳RXD(P3.0),在無信號時,RXD端的狀態為1,當采樣到1至0的跳變時,確認是起始位“0”,就開始接收一幀數據。在接收移位脈沖的控制下,把收到的數據一位一位地送入輸入移位寄存器,直到9位數據全部收齊(包括一位停止位)。當RI=0且停止位為1或者SM2=O時,8位數據送入接收緩沖器SBUF,停止位進入RB8,同時使RI置1;否則,8位數據不裝入SBUF,放棄接收的數據。所以,模式1接收時,應先用軟件清除RI或SM2標志。7.3串行口工作模式(b)串行口方式1接收時序42起始DOD1D2D3D4D5D6D70/1停止7.3.3模式2
模式2也是串行異步通信方式。一幀數據由11位組成,包括1位起始位、8位數據位、1位可編程位、1位停止位,其幀格式為:模式2的波特率是固定的,且有兩種:
一種是:另一種是:7.3串行口工作模式43
模式2的發送包括9位有效數據,在啟動發送之前,要把發送的第9位數值裝入SCON寄存器中的TB8位,準備好TB8的值以后,在TI=0的條件下,就可以執行一條寫發送緩沖器SBUF的指令來啟動發送。串行口能自動把TB8取出,并裝入到第9位數據的位置,逐一發送出去。發送完畢,使TI置1。7.3串行口工作模式(a)串行接口方式2發送時序44(b)串行接口方式2接收時序
模式2的接收與模式1基本相似。不同之處是要接收9位有效數據。在模式1時是把停止位當作第9位數據來處理,而在模式2(或模式3)中存在著真正的第9位數據。因此,接收數據真正有效的條件為:(1)RI=0;(2)SM2=0或收到的第9位數據為1。
若上述兩個條件成立,接收的前8位數據進入SBUF以準備讓CPU讀取,接收的第9位數據進入RB8,同時置位RI。若以上條件不成立,則這次接收無效,放棄接收數據,即8位數據不裝入SBUF,也不置位RI。7.3串行口工作模式457.3.4模式3
模式3同樣是串行異步通信方式,其一幀數據格式,接收、發送過程與模式2完全相同,所不同的僅在于波特率。模式2的波特率只有固定的兩種,而模式3的波特率由定時器T1的溢出率及SMOD決定,這一點與模式1相同。7.3串行口工作模式7.4串行通信應用舉例46
圖7-10串轉并原理圖7.4.1串行口模式0的應用一、擴展并行輸出口80C51單片機的串行口在方式0時外接一個串入并出的移位寄存器如CD4094(或是74LS164等),可以擴展一個8位并行輸出口。如圖7-10所示,移位寄存器CD4094的STB端為并行輸出允許控制端,STB=0時,移位寄存器串行接收,STB=1時打開并行輸出控制門,實現并行輸出點亮發光二極管。47【例7-2】用某51單片機串行口外接CD4094擴展8位并行輸出口,8位并行口的各位都接一個發光二極管,假設發光二極管為共陰極型,電路連接如圖7-10所示,要求編程實現:發光二極管呈流水燈狀態(從左向右以一定延遲依次點亮,并反復循環)。解:本例數據的串行發送采用查詢方式,顯示的延遲由延時程序DELAY實現。程序如下:ORG2000HSTART:MOVSCON,#00H;置串行口工作方式0,且TI=0 CLRES;禁止串行中斷MOVA,#80H ;擬先點亮最左邊一位
OUT0:CLRP1.0 ;關閉并行輸出MOVSBUF,A ;啟動串行輸出
7.4串行通信應用舉例48OUT1:JNBTI,OUT1 ;輸出完否
CLRTI ;完了,清TI標志,以備下次發送
SETBP1.0 ;打開并行口輸出
ACALLDELAY;延時一段時間
RRA ;循環右移
CLR P1.0 ;關閉并行輸出
JMP OUT0 ;循環
RETDELAY:ORG2400H;延時50msDEL:MOVR7,#125;執行時需1個機器周期DEL1:MOVR6,#200;DEL2:DJNZR6,DEL2;200×2=400μs(內循環時間)DJNZR7,DEL1;0.4ms×125=50ms(外循環時間)RET7.4串行通信應用舉例49二、擴展并行輸入口80C51單片機的串行口在方式0時外接一個并入串出的移位寄存器如CD4014(或是74LS165等),如圖7-11所示,可以擴展一個8位并行輸入口。并入串出移位寄存器必須帶有一個預置/移位的控制端,CD4014的預置/移位控制端是P/S,當P/S=1時,8位數據并行置入移位寄存器;P/S=0時,移位寄存器中的8位數據串行移位輸出。7.4串行通信應用舉例圖7-11擴展并行輸入口50【例7-3】某51單片機串行口外接CD4014擴展8位并行輸入口,輸入數據由8個開關提供,另有一個開關S提供聯絡信號,電路連接如圖7-12所示。當S=0時,要求編程實現連續從RXD輸入到單片機8位開關量。7.4串行通信應用舉例
圖7-12擴展并行輸入口接口電路51解:本例用串行口模式0接收數據,初始化時應使REN為1啟動接收,采用查詢方式輸入數據,程序如下:ORG0300HBJS0:JBP1.0,LP2;開關K未閉合,轉返回
CLRES;采用查詢方式,因此禁止串行中斷
MOVSCON,#10H;設模式0,RI清0,REN=1啟動接收
LP:SETBP1.1;P/S=1,并行置入開關數據
CLRP1.1;P/S=0,開始串行輸出
LP1:JNBRI,LP1;查詢RI,RI=0未接收完等待CLRRI;接收完,清RI,準備接收下一個MOVA,SBUF;讀取數據送入累加器
MOV40H,A;送內部RAM區LP2:RET;接收完,子程序返回7.4串行通信應用舉例527.4.2串行口模式1的應用【例7-4】設計一個發送程序,發送片內RAM40H~4FH中的數據。串行口設定為工作方式1,波特率為1200b/s,fosc=11.0592MHz。(設T1工作在方式2,SMOD=0。)解:工作方式1的波特率取決于定時器T1的溢出率,波特率為1200,則T1的計數初值X=256-(20/32)×11059200/(12×1200)=232=0E8H,程序如下: MOVTMOD,#20H;定時器T1為工作方式2 MOVTH1,#0E8H;初始化計數器MOVTL1,#0E8H CLRET1;禁止T1中斷SETBTR1;啟動T1
MOVSCON,#40H;設定串口工作在模式1,禁止接收數據7.4串行通信應用舉例53 MOVPCON,#00H;SMOD=0CLRES;禁止串行中斷 MOVR0,#40H;置發送數據首地址 MOVR7,#16;置發送數據長度LOOP:MOVA,@R0;讀取第一個數據→A MOVSBUF,A;數據→SBUF,啟動發送JNBTI,$;等待一幀數據發送完畢 CLRTI;TI清0 INCR0;指向下一字節單元 DJNZR7,LOOP SJMP$END
7.4串行通信應用舉例547.4.3串行口模式2的應用【例7-5】設計一個發送程序,發送片內RAM50H~5FH中的數據。串行口設定為方式2,TB8用作奇偶校驗位。解:在數據寫入發送緩沖器之前,先將數據的奇偶性P寫入TB8,這時TB8做奇偶校驗用,程序如下: MOVSCON,#80H;設定為工作方式2 MOVPCON,#80H;SMOD=1,波特率為fosc/32 MOVR0,#50H;置發送數據首地址 MOVR7,#16;置發送數據長度LOOP: MOVA,@R0;取第一個數據→A MOVC,P;P隨A變,P→C→TB8MOVTB8,C MOVSBUF,A;數據→SBUF,啟動發送 JNBTI,$;等待一幀數據發送完畢 CLRTI;TI清0 INCR0;指向下一字節單元 DJNZR7,LOOP SJMP$END7.4串行通信應用舉例557.4.4串行口模式3的應用【例7-6】設計一個接收程序,將接收的16個字節數據送入片內RAM50H~5FH單元中。串行口設定為工作方式3,波特率為1200b/s,fosc=6MHz。解:工作方式3的波特率是由T1產生的,波特率為1200,T1的計數初值為0F3H(SMOD=0),程序如下:MOVTMOD,#20H;定時器T1為工作方式2MOVTH1,#0F3H;初始化計數器MOVTL1,#0F3HSETBTR1;啟動T1MOVSCON,#0D0H;設定為工作方式3,可以接收數據MOVR0,#50H;置接收數據首地址MOVR7,#16;置接收數據長度7.4串行通信應用舉例56COUNT:JBCRI,PRI;等待接收,RI=1則結束等待并將RI清0 SJMPCOUNTPRI:MOVA,SBUF;從串行口中讀取數據JNBP,PNP;P=0,轉PNP JNBRB8,PER;P=1,RB8=0,出錯轉PERRIGHT:MOV@R0,A;P=1,RB8=1,存接收數據 INCR0DJNZR7,COUNTCLRPSW.1;正確接收完16個字節數據,標志位F1清0 SJMP$PER:SETBPSW.1;奇偶錯置位F1 SJMP$PNP:JBRB8,PER;P=0,RB8=1,奇偶錯轉PER SJMPRIGHT;P=0,RB8=0,轉RIGHTEND7.4串行通信應用舉例7.5串行通信實用技術57圖7-13TTL電平傳輸的連接方式7.5.1雙機串行通信的硬件連接一、TTL電平通信接口
如果兩個80C51單片機相距在1.5m之內,它們的串行口可直接相連,接口電路如圖7-13所示。甲機的RXD與乙機的TXD端相連,乙機的RXD與甲機的TXD端相連,從而直接用TTL電平傳輸方法來實現雙機通信。58二、RS-232C雙機通信接口
如果雙機通信距離在1.5~15m之間時,可利用RS-232C標準接口實現點對點的雙機通信,接口電路如圖7-14所示。7.5串行通信實用技術圖7-14RS-232C雙機通信接口電路
圖7-14中的芯片MAX232A是美國MAXIM(美信)公司生產的RS-232C雙工發送器/接收器電路芯片。59三、RS-422A雙機通信接口RS-422A與RS-232C的主要區別是:收發雙方的信號地不再共地,RS-422A采用了平衡驅動和差分接收的方法。RS-422A能在長距離、高速率下傳輸數據。它的最大傳輸率為10Mbit/s,在此速率下,電纜允許長度為12m,如果采用較低傳輸速率時,最大傳輸距離可達1219m。
7.5串行通信實用技術607.5串行通信實用技術圖7-15RS-422A雙機通信接口電路
為了增加通信距離,可以在通信線路上采用光電隔離方法,利用RS-422A標準進行雙機通信的接口電路如圖7-15所示。61四、RS-485雙機通信接口RS-485是RS-422A的變型,它與RS-422A的區別在于:RS-422A為全雙工,采用兩對平衡差分信號線;而RS-485為半雙工,采用一對平衡差分信號線。RS-485對于多站互連是十分方便的,很容易實現多機通信。RS-485標準允許最多并聯32臺驅動器和32臺接收器。7.5串行通信實用技術627.5.280C51單片機的多機通信
多個80C51單片機可利用串行口進行多機通信,經常采用主從式結構。所謂主從式是指在多個單片機組成的系統中,只有一個主機,其余全是從機。主機發送的信息可以被所有從機接收,任何一個從機發送的信息只能由主機接收。從機和從機之間不能進行相互的直接通信,從機和從機之間的通信只能經主機才能實現
主機的RXD與所有從機的TXD端相連,TXD與所有從機的RXD端相連。從機的地址分別為01H、02H和03H。7.5串行通信實用技術637.5.3雙機串行通信軟件編程單片機的串行通信接口設計時,需要考慮如下問題:(1)首先確定通信雙方的數據傳輸速率。(2)根據數據傳輸速率確定采用的串行通信接口標準。(3)在通信接口標準允許的范圍內確定通信的波特率。為減小波特率的誤差,通常選用11.0592MHz的晶振頻率。(4)根據任務需要,確定在通信過程中,收發雙方所使用的通信協議。(5)通信線的選擇是需要考慮的一個很重要的因素。通信線一般選用雙絞線較好,并根據傳輸的距離選擇纖芯的直徑。如果空間的干擾較多,還要選擇帶有屏蔽層的雙絞線。(6)在通信協議確定后,再進行通信軟件的編程,詳見下面的介紹。7.5串行通信實用技術64一、串行口方式1實現雙機通信【例7-7】本例采用方式1進行雙機串行通信,收、發雙方均采用6MHz晶振,波特率為2100bit/s,一幀信息為10位,第0位為起始位,第1~8位為數據位,最后1位為停止位。發送方要發送的數據塊的首地址為1000H,傳送數據的長度未知,但發送方以78H、77H單元的內容存放首地址,以76H、75H單元內容減1為數據塊末地址。解:(1)甲機發送程序中斷方式的發送程序如下:ORG0000H;程序初始入口LJMPMAINORG0023H;串行中斷入口LJMPCOM_INT7.5串行通信實用技術65ORG1000HMAIN:MOVSP,#53H;設置堆棧指針MOV78H,#10H;設置事發送的數據塊的首末地址MOV77H,#00HMOV76H,#10HMOV75H,#20HACALLTRANS;調用發送子程序HERE:SJMPHERETRANS:MOVTMOD,#20H;設置定時器/計數器工作方式MOVTH1,#0F3H;設置計數器初值MOVTL1,#0F3HMOVPCON,#80H;波特率加倍SETBTR1;接通計數器計數
MOVSCON,#40H;設置串行口工作方式7.5串行通信實用技術66MOVIE,#00H;先關閉中斷,利用查詢方式發送地址幀CLRF0MOVSBUF,78H;啟動發送,發送首地址高8位WAIT1:JNBTI,WAlT1CLRTIMOVSBUF,77H;啟動發送,發送首地址低8位WAIT2:JNBTI,WAIT2CLRTIMOVSBUF,76H;啟動發送,發送末地址高8位
WAIT3:JNBTI,WAIT3CLRTIMOVSBUF,75H;啟動發送,發送末地址低8位7.5串行通信實用技術67WAIT4:JNBTI,WAIT4CLRTIMOVIE,#90H;打開中斷允許寄存器,采用中斷方式發送數據MOVDPH,78HMOVDPL,77HMOVXA,@DPTRMOVSBUF,A;啟動發送首個數據WAIT:JNBF0,WAIT;發送等待RETCOM_INT:CLRTI;關發送中斷標志位TIINCDPTR;數據指針加1,準備發送下個數據MOVA,DPH;判斷當前被發進數據的地址是不是末地址7.5串行通信實用技術68CJNEA,76H,END1;不是末地址則跳轉MOVA,DPL;同上CJNEA,75H,END1SETBF0;數據發送完畢,置1標志位CLRES;關串行口中斷CLREA;關中斷RET;中斷返回END1:MOVXA,@DPTR;將要發送的數據送累加器,準備發送MOVSBUF,A;發送數據RETI;中斷返回END7.5串行通信實用技術69(2)乙機接收程序中斷方式的接收程序如下:ORG0000HLJMPMAINORG0023HLJMPCOM_INTORG1000HMAIN:MOVSP,#53H;設置堆棧指針ACALLRECEI;調用接收子程序HERE:SJMPHERERECEI:MOVR0,#78H;設置地址接收區7.5串行通信實用技術70MOVTMOD,#20H;設置定時器/計數器工作方式MOVTH1,#0F3H;設置波特率
MOVTL1,#0F3HMOVPCON,#80H;波特率加倍
SETBTR1;開計數器MOVSCON,#50H;設置串行口工作方式MOVIE,#90H;開中斷CLRF0;標志位清0CLR7FHWAIT:JNB7FH,WAIT;查詢標志位等待接收RET7.5串行通信實用技術71COM_INT:PUSHDPL;壓棧,保護現場PUSHDPHPUSHAccCLRRI;接收中斷標志位清0JBF0,R_DATA;判斷接收的是數據還是
地址,F0=0為地址MOVA,SBUF;接收數據MOV@R0,A;將地址幀送指定的寄存器DECR0CJNER0,#74H,RETNSETBF0;置位標志位,地址接收完畢ETN:POPAcc;出棧,恢復現場
7.5串行通信實用技術72POPDPHPOPDPLRETI;中斷返回R_DATA:MOVDPH,78H;數據接收程序區MOVDPL,77HMOVA,SBUP;接收數據MOVX@DPTR,A;送指定的數據存儲單元中INC77H;地址加1MOVA,77H;判斷當前接收的數據的
地址是否應向高8位進位JNZEND27.5串行通信實用技術73INC78HEND2:MOVA,76HCJNEA,78H,RETN;判斷是否為最后一幀數據
不是則繼續MOVA,75HCJNEA,77H,RETN;是最后一幀數據則各種標
志位清0CLRESCLREASETB7FHSJMPRETN ;跳入返回子程序區END7.5串行通信實用技術74二、串行口方式2實現雙機通信
方式2和方式1有兩點不同之處。方式2接收/發送11位信息,第0位為起始位,第1~8位為數據位,第9位是校驗位,該位可由用戶置TB8決定,第10位是停止位1,這是方式1和方式2的一個不同點。另一個不同點是方式2的波特率變化范圍比方式1小,方式2的波特率=振蕩器頻率/n。
當SMOD=0時,n=64。
當SMOD=1時,n=32。
鑒于方式2的使用和方式3基本一樣(只是波特率不同,方式3的波特率要由定時器T1的溢出率決定),所以方式2的具體編程應用,可參照下面介紹的方式3應用編程。7.5串行通信實用技術75三、串行口方式3實現雙機通信【例7-8】本例為80C51單片機用串行通信方式3進行發送和接收的應用實例。發送方首先將存放在78H和77H單元中的地址發送給接收方,然后發送數據00H~FFH,共256個數據。發送方采用查詢方式發送地址幀,采用中斷或查詢方式發送數據,接收方采用中斷或查詢方式接收數據。發送和接收雙方均采用6MHz的晶振,波特率為4800bit/s。(1)甲機發送程序。中斷方式的發送程序如下:ORG0000HLJMPMAINORG0023HLJMPCOM_INTORG1000H7.5串行通信實用技術76MAIN:MOVSP,#53H;設置堆棧指針ORG0000HLJMPMAINORG0023HLJMPCOM_INTORG1000HMAIN:MOVSP,#53H;設置堆棧指針 MOV78H,#20H;設置要存放數據的單元的首地址MOV77H,#00HACALLTRAN;調用發送子程序HERE:
SJMPHERETRANS:MOVTMOD,#20H;設置定時器/計數器工作方式7.5串行通信實用技術77MOVTH1,#0FDH;設置波特率為4800bit/sMOVTL1,#0FDHSETBTR1;開定時器MOVSCON,#0E0H;設置串行口工作方式為方式3SETBTB8;設置第9位數據位MOVIE,#00H;關中斷MOVSBUF,78H;查詢方式發送首地址高8位WAIT:JNBTI,WAITCLRTIMOVSBUF,77H;發送首地址低8位WAIT2:JNBTI,WAIT2CLRTI7.5串行通信實用技術78MOVIE,#90H;開中斷CLRTB8MOVA,#00HMOVSBUF,A;開始發送數據WAIT1:CJNEA,#0FFH,WAIT1;判斷數據是否發送完畢CLRES;發送完畢則關中斷RETCOM_INT:CIRTI;中斷服務子程序段INC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年2月鞍山市直遴選面試真題附解析
- 2025年皖北煤電集團總醫院招聘護理筆試備考題庫附答案詳解(培優a卷)
- 南陽投資可行性研究報告
- 3dsmax期末考試試題及答案
- 主播直播帶貨的法律規制研究
- 2025四川某家庭裝飾裝修工程施工合同【合同全文】
- 2025建筑內墻腳手架施工合同模板示例
- 2025合同違約不還款時啟用保函
- 2025汽車買賣合同(詳細范本)
- (高清版)DB1302∕T 166-2019 芽菜生產技術規程
- 冀教版五年級數學下冊教學課件 第五單元 長方體和正方體的體積整理與復習
- 公車拍賣拍賣工作方案
- 2023年山東高考政治試卷附答案
- C語言課程設計-家庭財務管理系統
- 二升三應用題100道
- 典當管理手冊
- 患者安全和護理風險管理
- 宮腔鏡相關知識考核試題及答案
- 七年級語文下冊知識梳理與能力訓練 06 古代詩歌五首理解性默寫與練習
- 山東省濟寧市任城區2024屆八年級語文第二學期期末監測試題含解析
- 生物材料學課件
評論
0/150
提交評論