版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章串行口通信技術實訓8單片機之間的雙機通信8.1串行通信基礎8.2MCS-51的串行接口8.3MCS-51單片機之間的通信8.4PC機和單片機之間的通信本章小結習題8實訓8單片機之間的雙機通信
1.實訓目的
(1)復習定時器的功能和編程使用。
(2)理解串行通信與并行通信的兩種方式。
(3)掌握串行通信的重要指標:字符幀和波特率。
(4)初步了解MCS-51單片機串行口的使用方法。
2.實訓設備與器件實訓設備:單片機開發(fā)系統(tǒng)、微機。實訓器件:實訓電路板兩套。
3.實訓電路圖本實訓的電路如圖8.1所示,需用兩套組合教具(或兩套自制電路板)共同完成。圖8.1實訓8電路圖
4.實訓步驟與要求
1)預習復習單片機的定時器編程應用,重點了解方式2的使用。查閱串行口相關知識,了解串行通信的基本概念及與并行通信的區(qū)別,初步認識MCS-51單片機中串行口的工作原理。
2)連接電路按圖8.1所示將兩套實訓電路板中的RXD和TXD端對應相連,并將兩套電路板共地。
3)輸入程序編制程序,使甲、乙雙方能夠進行通信。要求:將甲機內部RAM的20H~27H單元的數據發(fā)送給乙機,并在乙機的8個數碼管中顯示出來。甲機發(fā)送程序參考如下:
MOV
TMOD,#20H
MOV
TL1,#0F4H
MOV
TH1,#0F4H
SETB
TR1
MOV
SCON,#40H
MOV
R0,#20H
MOV
R7,#08H
START:MOV
A,@R0
MOV
SBUF,A
WAIT: JBC
TI,CONT
AJMP
WAIT
CONT: INC
R0
DJNZ
R7,START
SJMP
$乙機接收及顯示程序參考如下:
MOV
TMOD,#20H
MOV
TL1,#0F4H
MOV
TH1,#0F4H
SETB
TR1
MOV
SCON,#40H
MOV
R0,#20H
MOV
R7,#08H
SETB
REN
WAIT: JBC
RI,READ
AJMP
WAIT
READ: MOV
A,SBUF
MOV
@R0,A
INC
R0
DJNZ
R7,WAIT
DISP: LCALLDISP
SJMP
DISP動態(tài)顯示子程序DISP可參見6.2節(jié)內容。
4)調試并運行程序對甲機片內RAM的20H~27H單元分別輸入00H、01H、02H、03H、04H、05H、06H、07H,運行甲、乙機程序,觀察乙機8個數碼管的顯示內容;更換甲機RAM單元中的內容(00H~0FH中的任意值),再次觀察乙機的顯示內容。
5.實訓總結與分析
(1)程序運行的結果是,乙機能夠根據甲機20H~27H單元的數據顯示相應的內容。例如,第一次運行程序,會在乙機的8個數碼管上分別顯示0、1、2、3、4、5、6、7,這說明甲、乙之間能夠進行數據的傳送,即通信。
(2)從本實訓的電路連接上可以看到,甲、乙雙方只連接了三根線,一根用于接收,一根用于發(fā)送,第三根為共地線。其中,RXD為單片機系統(tǒng)的接收數據端,TXD為發(fā)送數據端。顯然,單片機內部的數據向外傳送(例如從甲機傳送給乙機)時,不可能8位數據同時進行,在一個時刻只可能傳送一位數據(例如,從甲機的發(fā)送端TXD傳送一位數據到乙機的接收端RXD),8位數據依次在一根數據線上傳送,這種通信方式稱為串行通信。它與前面幾章所介紹的數據傳送不同,例如通過P0口傳送數據時,就是8位數據同時進行的,這種通信方式稱為并行通信。
(3)分析程序可以看出,通信雙方都有對單片機定時器的編程(注意發(fā)送、接收程序的前4條指令),而且雙方對定時器的編程完全相同。這說明,在進行串行通信時,MCS-51單片機是與定時器的工作有關的。定時器用來設定串行通信數據的傳輸速度。在串行通信中,傳輸速度是用波特率來表征的。
6.問題與思考
(1)在收發(fā)程序中都用到了SCON、SBUF,這兩個寄存器的地址是什么?其作用如何?
(2)在甲機的發(fā)送程序中有這樣一條指令:JBCTI,rel,該指令完成什么功能?TI位的作用是什么?
(3)在乙機的接收程序中有這樣一條指令:JBCRI,rel,RI位的作用是什么?通過實訓我們知道,MCS-51單片機除了可以進行數據的并行傳送以外,還可以將數據以串行的方式一位一位地進行傳送。不僅兩個單片機之間可以進行這樣的數據傳送,而且多臺單片機或者單片機與PC機之間都可以完成類似的收發(fā)信息,這些都是在本章要論述的串行通信技術。圖8.2兩種通信方式的示意圖(a)并行通信;(b)串行通信8.1串行通信基礎8.1.1串行通信的分類
1.異步通信(AsynchronousCommunication)在異步通信中,數據通常是以字符為單位組成字符幀傳送的。字符幀由發(fā)送端一幀一幀地發(fā)送,每一幀數據均是低位在前,高位在后,通過傳輸線被接收端一幀一幀地接收。發(fā)送端和接收端可以由各自獨立的時鐘來控制數據的發(fā)送和接收,這兩個時鐘彼此獨立,互不同步。在異步通信中,接收端是依靠字符幀格式來判斷發(fā)送端是何時開始發(fā)送以及何時結束發(fā)送的。字符幀格式是異步通信的一個重要指標。
1)字符幀(CharacterFrame)字符幀也叫數據幀,由起始位、數據位、奇偶校驗位和停止位等4部分組成,如圖8.3所示。
(1)起始位:位于字符幀開頭,只占一位,為邏輯0低電平,用于向接收設備表示發(fā)送端開始發(fā)送一幀信息。
(2)數據位:緊跟起始位之后,用戶根據情況可取5位、6位、7位或8位,低位在前,高位在后。
(3)奇偶校驗位:位于數據位之后,僅占一位,用來表征串行通信中采用奇校驗還是偶校驗,由用戶決定。
(4)停止位:位于字符幀最后,為邏輯1高電平。通??扇?位、1.5位或2位,用于向接收端表示一幀字符信息已經發(fā)送完,也為發(fā)送下一幀作準備。圖8.3異步通信的字符幀格式(a)無空閑位字符幀;(b)有空閑位字符幀
2)波特率(BaudRate)異步通信的另一個重要指標為波特率。波特率為每秒鐘傳送二進制數碼的位數,也叫比特數,單位為b/s,即位/秒。波特率用于表征數據傳輸的速度,波特率越高,數據傳輸速度越快。但波特率和字符的實際傳輸速率不同,字符的實際傳輸速率是每秒內所傳字符幀的幀數,和字符幀格式有關。通常,異步通信的波特率為50~9600b/s。異步通信的優(yōu)點是不需要傳送同步時鐘,字符幀長度不受限制,故設備簡單;缺點是字符幀中因包含起始位和停止位而降低了有效數據的傳輸速率。
2.同步通信(SynchronousCommunication)同步通信是一種連續(xù)串行傳送數據的通信方式,一次通信只傳輸一幀信息。這里的信息幀和異步通信的字符幀不同,通常有若干個數據字符,如圖8.4所示。圖8.4(a)為單同步字符幀結構,圖8.4(b)為雙同步字符幀結構,但它們均由同步字符、數據字符和校驗字符CRC三部分組成。在同步通信中,同步字符可以采用統(tǒng)一的標準格式,也可以由用戶約定。同步通信的數據傳輸速率較高,通??蛇_56000b/s或更高,缺點是要求發(fā)送時鐘和接收時鐘必須保持嚴格同步。圖8.4同步通信的字符幀格式(a)單同步字符幀格式;(b)雙同步字符幀格式8.1.2串行通信的制式在串行通信中數據是在兩個站之間進行傳送的,按照數據傳送方向,串行通信可分為單工(simplex)、半雙工(halfduplex)和全雙工(fullduplex)三種制式。圖8.5為三種制式的示意圖。在單工制式下,通信線的一端接發(fā)送器,另一端接接收器,數據只能按照一個固定的方向傳送,如圖8.5(a)所示。在半雙工制式下,系統(tǒng)的每個通信設備都由一個發(fā)送器和一個接收器組成,如圖8.5(b)所示。在這種制式下,數據能從A站傳送到B站,也可以從B站傳送到A站,但是不能同時在兩個方向上傳送,即只能一端發(fā)送,一端接收。其收/發(fā)開關一般是由軟件控制的電子開關。全雙工通信系統(tǒng)的每端都有發(fā)送器和接收器,可以同時發(fā)送和接收,即數據可以在兩個方向上同時傳送,如圖8.5(c)所示。在實際應用中,盡管多數串行通信接口電路具有全雙工功能,但一般情況下,只工作于半雙工制式下,這種用法簡單、實用。圖8.5單工、半雙工和全雙工三種制式的示意圖8.1.3串行通信的接口電路串行接口電路的種類和型號很多。能夠完成異步通信的硬件電路稱為UART,即通用異步接收器/發(fā)送器(UniversalAsychronousReceiver/Transmitter);能夠完成同步通信的硬件電路稱為USRT(UniversalSychronousReceiver/Transmitter);既能夠完成異步又能夠完成同步通信的硬件電路稱為USART(UniversalSychronousAsychronousReceiver/Transmitter)。8.2MCS-51的串行接口8.3.1MCS-51串行口結構
MCS-51內部有兩個獨立的接收、發(fā)送緩沖器SBUF。SBUF屬于特殊功能寄存器。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,二者共用一個字節(jié)地址(99H)。MCS-51串行口的結構如圖8.6所示。圖8.6串行口結構示意圖在實訓8中,甲機發(fā)送數據時,是由一條寫發(fā)送緩沖器的指令(MOVSBUF,A)先把數據寫入串行口的發(fā)送緩沖器SBUF中,然后從TXD端一位一位地向外部發(fā)送的。同時,接收端RXD也可以一位一位地接收外部數據,當收到一個完整的數據后通知CPU,再由一條指令(MOVA,SBUF)把接收緩沖器SBUF的數據讀入累加器。實訓8中乙機的接收就是通過該條指令完成的。
1.串行口數據緩沖器SBUF
SBUF是兩個在物理上獨立的接收、發(fā)送寄存器,一個用于存放接收到的數據,另一個用于存放欲發(fā)送的數據,可同時發(fā)送和接收數據。兩個緩沖器共用一個地址99H,通過對SBUF的讀、寫指令來區(qū)別是對接收緩沖器還是發(fā)送緩沖器進行操作。CPU在寫SBUF時,就是修改發(fā)送緩沖器的內容;讀SBUF,就是讀接收緩沖器的內容。接收或發(fā)送數據,是通過串行口的兩條獨立收發(fā)信號線RXD(P3.0)、TXD(P3.1)來實現的,因此可以同時發(fā)送、接收數據,其工作方式為全雙工制式。
2.串行口控制寄存器SCON實訓8中,收發(fā)雙方都有對SCON的編程。SCON用來控制串行口的工作方式和狀態(tài),可以位尋址,字節(jié)地址為98H。單片機復位時,SCON的所有位全為0。SCON的各位定義如圖8.7所示。圖8.7SCON的各位定義對各位的說明如下:
SM0、SM1:串行方式選擇位,其定義如表8.1所示。
SM2:多機通信控制位,用于方式2和方式3中。在方式2、3處于接收方式時,若SM2=1,且接收到的第9位數據RB8為0,則不激活RI;若SM2=1,且RB8=1,則置RI=1。在方式2、3處于接收或發(fā)送方式時,若SM2=0,則不論接收到的第9位RB8為0還是為1,TI、RI都以正常方式被激活。在方式1處于接收時,若SM2=1,則只有當收到有效的停止位后,RI才置1。在方式0中,SM2應為0。
REN:允許串行接收位。它由軟件置位或清零。REN=1時,允許接收;REN=0時,禁止接收。在實訓8中,由于乙機用于接收數據,因此使用位操作指令SETBREN,允許乙機接收。
TB8:發(fā)送數據的第9位。在方式2和方式3下,TB8由軟件置位或復位,可用做奇偶校驗位。在多機通信中,TB8可作為區(qū)別地址幀或數據幀的標識位:地址幀時TB8為1;數據幀時TB8為0。
RB8:接收數據的第9位。功能同TB8。
TI:發(fā)送中斷標志位。在方式0下,發(fā)送完8位數據后,TI由硬件置位;在其它方式中,TI在發(fā)送停止位之初由硬件置位。因此,TI是發(fā)送完一幀數據的標志,可以用指令JBCTI,rel來查詢是否發(fā)送結束。實訓8中采用的就是這種方法。TI=1時,也可向CPU申請中斷,響應中斷后,必須由軟件清除TI。查詢和中斷方法的應用將在8.4.2節(jié)介紹。
RI:接收中斷標志位。在方式0下,接收完8位數據后,RI由硬件置位;在其它方式中,RI在接收停止位的中間由硬件置位。同TI一樣,也可以通過JBCRI,rel來查詢是否接收完一幀數據。RI=1時,也可申請中斷,響應中斷后,必須由軟件清除RI。表8.1串行方式的定義在實訓8中,采用指令MOVSCON,#40H,使單片機工作在串行通信的方式1下。
3.電源及波特率選擇寄存器PCON
PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器,不可以位尋址,字節(jié)地址為87H。在HMOS的8051單片機中,PCON除了最高位以外,其它位都是虛設的。其各位定義如圖8.8所示。圖8.8PCON的各位定義與串行通信有關的只有SMOD位。SMOD為波特率選擇位。在方式1、2和3下,串行通信的波特率與SMOD有關。當SMOD=1時,通信波特率乘2;當SMOD=0時,波特率不變。其它各位用于電源管理,在此不再贅述。8.2.2MCS-51串行口的工作方式
1.方式0在方式0下,串行口作為同步移位寄存器使用,其波特率固定為fosc/12。串行數據從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴展I/O口。
1)發(fā)送當一個數據寫入串行口發(fā)送緩沖器SBUF時,串行口將8位數據以fosc/12的波特率從RXD引腳輸出(低位在前),發(fā)送完置中斷標志TI為1,請求中斷。在再次發(fā)送數據之前,必須由軟件清TI為0。具體接線圖如圖8.9所示。其中,74LS164為串入并出移位寄存器。圖8.9方式0用于擴展I/O口輸出
2)接收在滿足REN=1和RI=0的條件下,串行口即開始從RXD端以fosc/12的波特率輸入數據(低位在前),當接收完8位數據后,置中斷標志RI為1,請求中斷。在再次接收數據之前,必須由軟件清RI為0。具體接線圖如圖8.10所示。其中,74LS165為并入串出移位寄存器。串行控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每當發(fā)送或接收完8位數據后,硬件會自動置TI或RI為1,CPU響應TI或RI中斷后,必須由用戶用軟件清0。方式0時,SM2必須為0。關于串行口方式0在擴展I/O方面的應用,請參照本書9.3節(jié)的內容。圖8.10方式0用于擴展I/O口輸入
2.方式1實訓8中,收發(fā)雙方都是工作在方式1下,此時,串行口為波特率可調的10位通用異步接口UART。發(fā)送或接收的一幀信息包括1位起始位0,8位數據位和1位停止位1。其幀格式如圖8.11所示。圖8.1110位的幀格式
1)發(fā)送發(fā)送時,數據從TXD端輸出,當數據寫入發(fā)送緩沖器SBUF后,啟動發(fā)送器發(fā)送。當發(fā)送完一幀數據后,置中斷標志TI為1。方式1所傳送的波特率取決于定時器1的溢出率和PCON中的SMOD位,這將在8.2.3節(jié)討論。
2)接收接收時,由REN置1,允許接收,串行口采樣RXD,當采樣由1到0跳變時,確認是起始位“0”,開始接收一幀數據。當RI=0,且停止位為1或SM2=0時,停止位進入RB8位,同時置中斷標志RI;否則信息將丟失。所以,采用方式1接收時,應先用軟件清除RI或SM2標志。
3.方式2方式2下,串行口為11位UART,傳送波特率與SMOD有關。發(fā)送或接收的一幀數據包括1位起始位0,8位數據位,1位可編程位(用于奇偶校驗)和1位停止位1。其幀格式如圖8.12所示。圖8.1211位的幀格式
1)發(fā)送發(fā)送時,先根據通信協議由軟件設置TB8,然后用指令將要發(fā)送的數據寫入SBUF,啟動發(fā)送器。寫SBUF的指令,除了將8位數據送入SBUF外,同時還將TB8裝入發(fā)送移位寄存器的第9位,并通知發(fā)送控制器進行一次發(fā)送,一幀信息即從TXD發(fā)送。在送完一幀信息后,TI被自動置1,在發(fā)送下一幀信息之前,TI必須由中斷服務程序或查詢程序清0。
2)接收當REN=1時,允許串行口接收數據。數據由RXD端輸入,接收11位的信息。當接收器采樣到RXD端的負跳變并判斷起始位有效后,開始接收一幀信息。當接收器接收到第9位數據后,若同時滿足以下兩個條件:RI=0和SM2=0或接收到的第9位數據為1,則接收數據有效,將8位數據送入SBUF,第9位送入RB8,并置RI=1。若不滿足上述兩個條件,則信息丟失。
4.方式3方式3為波特率可變的11位UART通信方式。除了波特率不同以外,方式3和方式2完全相同。8.3.3MCS-51串行口的波特率
1.方式0和方式2在方式0中,波特率為時鐘頻率的1/12,即fosc/12,固定不變。在方式2中,波特率取決于PCON中的SMOD值:當SMOD=0時,波特率為fosc/64;當SMOD=1時,波特率為fosc/32,即波特率=2SMOD·fosc/64。
2.方式1和方式3在方式1和方式3下,波特率由定時器1的溢出率和SMOD共同決定,即:方式1和方式3的波特率=·定時器1溢出率其中,定時器1的溢出率取決于單片機定時器1的計數速率和定時器的預置值。計數速率與TMOD寄存器中的C/位有關。當C/
=0時,計數速率為fosc/12;當C/
=1時,計數速率為外部輸入時鐘的頻率。實際上,當定時器1作為波特率發(fā)生器使用時,通常是工作在模式2下,即作為一個自動重裝載的8位定時器,此時TL1作計數用,自動重裝載的值在TH1內。設計數的預置值(初始值)為X,那么每過256-X個機器周期,定時器溢出一次。為了避免因溢出而產生不必要的中斷,此時應禁止T1中斷。溢出周期為12×(256-X)/fosc。溢出率為溢出周期的倒數,所以波特率=表8.2列出了各種常用的波特率及獲得辦法。表8.2定時器1產生的常用波特率下面我們來分析實訓8中的波特率。實訓8中的波特率編程如下:
MOVTMOD,#20H
MOVTL1,#0F4H
MOVTH1,#0F4H
SETBTR1實訓電路板若采用11.059MHz的晶振,分析TMOD的設置,對照表8.2,可知實訓8中串行通信的波特率應為2400b/s。8.3MCS-51單片機之間的通信8.3.1雙機通信硬件電路如果兩個MCS-51單片機系統(tǒng)距離較近,那么就可以將它們的串行口直接相連,實現雙機通信,如圖8.13所示。這也是在實訓8中采用的電路。為了增加通信距離,減少通道和電源干擾,可以在通信線路上采用光電隔離的方法,利用RS-422A標準進行雙機通信。實用的接口電路如圖8.14所示。圖8.13雙機異步通信接口電路圖8.14RS-422A雙機異步通信接口電路發(fā)送端的數據由串行口TXD端輸出,通過74LS05反向驅動,經光電耦合器送到驅動芯片SN75174的輸入端。SN75174將輸出的TTL信號轉換為符合RS-422A標準的差動信號輸出,經傳輸線(雙絞線)將信號送到接收端。接收芯片SN75175將差動信號轉換為TTL信號,通過反向后,經光電耦合器到達接收機串行口的接收端。每個通道的接收端都有三個電阻:R1,R2,R3。R1為傳輸線的匹配電阻,取值在100Ω~1kΩ之間,其它兩個電阻是為了解決第一個數據的誤碼而設置的匹配電阻。值得注意的是,光電耦合器必須使用兩組獨立的電源,只有這樣才能起到隔離、抗干擾的作用。8.3.2雙機通信軟件編程
1.查詢方式
1)甲機發(fā)送編程將甲機片外1000H~101FH單元的數據塊從串行口輸出。定義方式2發(fā)送,TB8為奇偶校驗位,發(fā)送波特率為375kb/s,晶振為12MHz,所以SMOD=1。參考發(fā)送子程序如下:
MOV SCON,#80H ;設置串行口為方式2
MOV PCON,#80H;SMOD=1
MOV DPTR,#1000H;設數據塊指針
MOV R7,#20H ;設數據塊長度
START:MOVX A,@DPTR ;取數據給A
MOV C,P
MOV TB8,C ;奇偶位P送給TB8
MOV SBUF,A ;數據送SBUF,啟動發(fā)送
WAIT:
JBC TI,CONT ;判斷一幀是否發(fā)送完。若;發(fā)送完,則清TI,取下一;數據
AJMP WAIT ;未完等待
CONT: INC DPTR;更新數據單元
DJNZ R7,START;循環(huán)發(fā)送至結束
RET
2)乙機接收編程使乙機接收甲機發(fā)送過來的數據塊,并存入片內50H~6FH單元。接收過程要求判斷RB8,若出錯,則置F0標志為1,若正確,則置F0標志為0,然后返回。在進行雙機通信時,兩機應采用相同的工作方式和波特率。參考接收子程序如下:
MOV
SCON,#80H ;設置串行口為方式2
MOV
PCON,#80H ;SMOD=1
MOV
R0,#50H ;設置數據塊指針
MOV
R7,#20H ;設置數據塊長度
SETB
REN ;啟動接收
WAIT:JBC
RI,READ ;判斷是否接收完一幀。若;接收完,則清RI,讀入數據
AJMP
WAIT ;未完等待
READ:MOV
A,SBUF ;讀入一幀數據
JNB
PSW.0,PZ ;奇偶位為0則轉
JNB
RB8,ERR ;P=1,RB8=0,則出錯
SJMP
RIGHT ;二者全為1,則正確
PZ:
JBRB8,ERR;P=0,RB8=1,則出錯
RIGHT:
MOV@R0,A;正確,存放數據
INCR0 ;更新地址指針
DJNZR7,WAIT;判斷數據塊是否接收完
CLRPSW.5;接收正確,且接收完清F0標志
RET ;返回
ERR:
SETBPSW.5;出錯,置F0標志為1
RET ;返回在上述查詢方式的雙機通信中,因為發(fā)送雙方單片機的串行口均按方式2工作,所以幀格式是11位的,收發(fā)雙方均是采用奇偶位TB8來進行校驗的。傳送數據的波特率與定時器無關,所以程序中沒有涉及定時器的編程。與實訓8的程序進行比較后可以看出,實訓8中收發(fā)雙方單片機的串行口均按方式1工作,即以10位的幀格式進行通信,沒有進行數據的校驗。傳送數據的波特率與定時器有關,所以實訓8中的通信程序中有對定時器進行編程的語句。
2.中斷方式
1)甲機發(fā)送編程將甲機片內60H~6FH單元的數據塊從串行口發(fā)送,在發(fā)送之前將數據塊長度發(fā)送給乙機,當發(fā)送完16個字節(jié)后,再發(fā)送一個累加校驗和。定義雙機串行口按方式1工作,晶振為11.059MHz,波特率為2400b/s,定時器1按方式2工作。經計算或查表8.2得到定時器預置值為0F4H,SMOD=0。參考發(fā)送子程序如下:
MOVTMOD,#20H;設置定時器1為方式2
MOVTL1,#0F4H ;設置預置值
MOVTH1,#0F4H
SETBTR1 ;啟動定時器1
MOVSCON,#50H ;設置串行口為方式1,;允許接收
START: MOVR0,#60H ;設置數據指針
MOVR5,#10H ;設置數據長度
MOVR4,#00H ;累加校驗和初始化
MOVSBUF,R5 ;發(fā)送數據長度
WAIT1: JBCTI,TRS ;等待發(fā)送
AJMPWAIT1
TRS:MOVA,@R0 ;讀取數據
MOVSBUF,A ;發(fā)送數據
ADDA,R4
MOVR4,A ;形成累加和
INCR0 ;修改數據指針
WAIT2:JBCTI,CONT ;等待發(fā)送一幀數據
AJMPWAIT2
CONT:DJNZR5,TRS ;判斷數據塊是否發(fā)送完
MOVSBUF,R4 ;發(fā)送累加校驗和WAIT3:JBCTI,WAIT4 ;等待發(fā)送
AJMPWAIT3WAIT4:JBCRI,READ ;等待乙機回答
AJMPWAIT4READ:MOVA,SBUF;接收乙機數據
JZRIGHT ;00H,發(fā)送正確,返回
JMPSTART;發(fā)送出錯,重發(fā)RIGHT:RET
2)乙機接收乙機接收甲機發(fā)送的數據,并存入以2000H開始的片外數據存儲器中。首先接收數據長度,接著接收數據,當接收完16個字節(jié)后,接收累加和校驗碼,進行校驗。數據傳送結束后,根據校驗結果向甲機發(fā)送一個狀態(tài)字,該狀態(tài)字若是00H,則表示正確,若是0FFH,則表示出錯,出錯后甲機需重發(fā)。接收采用中斷方式。設置兩個標志位(7FH、7EH位)來判斷接收到的信息是數據塊長度、數據還是累加校驗和。參考接收程序如下:
ORG0000H
LJMPCSH ;轉初始化程序
ORG0023H
LJMPINTS ;轉串行口中斷程序
ORG0100H
CSH:MOVTMOD,#20H ;設置定時器1為方式2
MOVTL1,#0F4H ;設置預置值
MOVTH1,#0F4H
SETBTR1 ;啟動定時器1
MOVSCON#50H ;串行口初始化
SETB7FH ;置長度標志位為1
SETB7EH ;置數據塊標志位為1
MOV31H,#20H ;規(guī)定外部RAM的起始地址
MOV30H,#00H
MOV40H,#00H;清累加和寄存器
SETBEA;允許串行口中斷
SETBES
LJMPMAIN;MAIN為主程序,根據用戶要求;編寫
INTS:
CLREA;關中斷
CLRRI ;清中斷標志
PUSHA ;保護現場
PUSHDPH
PUSHDPL
JB7FH,CHANG;判斷是數據塊長度嗎?
JB7EH,DATA;判斷是數據塊嗎?
SUM:MOVA,SBUF ;接收校驗和
CJNZA,40H,ERR ;判斷接收是否正確
MOVA,#00H ;二者相等,正確,向甲機;發(fā)送00H
MOVSBUF,A
WAIT1:JNBTI,WAIT1
CLRTI
SJMPRETURN ;發(fā)送完,轉到返回
ERR:MOVA,#0FFH ;二者不相等,錯誤,向甲;機發(fā)送FFH
MOVSBUF,A
WAIT2:JNBTI,WAIT2
CLRTI
SJMPAGAIN ;發(fā)送完,轉重新開始
CHANG: MOVA,SBUF ;接收長度
MOV41H,A ;長度存入41H單元
CLR7FH ;清長度標志位
SJMPRETURN ;轉返回
DATA: MOVA,SBUF ;接收數據
MOVDPH,31H ;存入片外RAM
MOVDPL,30H
MOVX@DPTR,A
INCDPTR ;修改片外RAM的地址
MOV31H,DPH
MOV30H,DPL
ADDA,40H ;形成累加和,放在40H單元
MOV40H,A
DJNZ41H,RETURN;判斷數據塊是否接收完
CLR7EH ;接收完,清數據塊標志位
SJMPRETURN
AGAIN: SETB7FH ;接收出錯,恢復標志位,重;新開始接收
SETB7EH
MOV31H,#20H ;恢復片外RAM起始地址
MOV30H,#00H
MOV40H,#00H ;累加和寄存器清零
RETURN:POPDPL ;恢復現場
POPDPH
POPA
SETBEA ;開中斷
RETI ;返回8.4PC機和單片機之間的通信8.4.1接口設計
PC機與單片機之間可以由RS-232C、RS-422A或RS-423等接口相連。關于這些標準接口的特征,我們已經在前面的內容中介紹過。在PC機系統(tǒng)內都裝有異步通信適配器,利用它可以實現異步串行通信。該適配器的核心元件是可編程的Intel8250芯片,它使PC機有能力與其它具有標準的RS-232C接口的計算機或設備進行通信。而MCS-51單片機本身具有一個全雙工的串行口,因此只要配以電平轉換的驅動電路、隔離電路,就可組成一個簡單可行的通信接口。同樣,PC機和單片機之間的通信也分為雙機通信和多機通信。
PC機和單片機最簡單的連接是零調制三線經濟型。這是進行全雙工通信所必須的最少線路。因為MCS-51單片機輸入、輸出電平為TTL電平,而PC機配置的是RS-232C標準接口,二者的電氣規(guī)范不同,所以要加電平轉換電路。常用的有MC1488、MC1489和MAX232。圖8.15給出了采用MAX232芯片的PC機和單片機串行通信接口電路,其中,MAX232與PC機的連接采用的是9芯標準插座。圖8.15PC機和單片機串行通信接口8.4.2軟件編程
1.單片機通信軟件
MCS-51通過中斷方式接收PC機發(fā)送的數據,并回送。單片機串行口的工作方式為方式1,晶振為6MHz,波特率為2400b/s,定時器1按方式2工作,經計算,定時器預置值為0F3H,SMOD=1。參考程序如下:
ORG 0000H
LJMP CSH ;轉初始化程序
ORG 0023H
LJMP INTS ;轉串行口中斷程序
ORG 0050H
CSH:MOV TMOD,#20H;設置定時器1為方式2
MOV TL1,#0F3H;設置預置值
MOV TH1,#0F3H
SETB TR1 ;啟動定時器1
MOV SCON#50H;串行口初始化
MOV PCON#80H
SETB EA ;允許串行口中斷
SETB ES
LJMP MAIN ;轉主程序(主程序略)
INTS:CLR EA ;關中斷
CLR RI ;清串行口中斷標志
PUSH DPL ;保護現場
PUSH DPH
PUSH A
MOV A,SBUF ;接收PC機發(fā)送的數據
MOV SBUF,A ;將數據回送給PC機
WAIT: JNB TI,WAIT ;等待發(fā)送
CLR TI
POP A ;發(fā)送完,恢復現場
POP DPH
POP DPL
SETB EA ;開中斷
RETI ;返回
2.?PC機通信軟件
PC機方面的通信程序可以用匯編語言編寫,也可以用其它高級語言,例如VC、VB來編寫。參考程序如下:
stack Segmentparastack'code'
Db256dup(0)
Stack ends
Code Segmentparapublic'code'
Start procfar
Assumecs:code,ss:stack
PUSH DS
MOV AX,0
PUSH AX
CLI
INPUT:MOV
AL,80H;置DLAB=1
MOV
DX,3FBH;寫入通信線路控制寄存器
OUT
DX,AL
MOV
AL,30H;置產生2400b/s波特率的除數低位
MOV
DX,3F8H
OUT
DX,AL;寫入除數鎖存器低位
MOV
AL,00H;置產生2400b/s波特率的除數高位
MOV
DX,3F9H
OUT
DX,AL;寫入除數鎖存器高位
MOV
AL,03H;設置數據格式
MOV
DX,3FBH;寫入通信線路控制寄存器
OUT
DX,AL
MOV
AL,00H;禁止所有中斷
MOV DX,3F9H
OUT DX,AL
WAIT1:
MOV DX,3FDH ;發(fā)送保持寄存器不空,則;循環(huán)等待
IN AL,DX
TEST AL,20H
JZ WAIT1
WAIT2:
MOV AH,1 ;檢查鍵盤緩沖區(qū),無字符;則循環(huán)等待
INT 16H
JZ WAIT2
MOV AH,0 ;若有,則取鍵盤字符
INT 16H
SEND:
MOV DX,3F8H ;發(fā)送鍵入的字符
OUT DX,AL
RECE:
MOV DX,3FDH ;檢查接收數據是否準備好
IN AL,DX
TEST AL,01H
JZ RECE
TEST AL,1AH ;判斷接收到的數據是否出錯
JNZ ERROR
MOV DX,3F8H
IN AL,DX ;讀取數據
AND AL,7EH ;去掉無效位
PUSH AX
MOV BX,0 ;顯示接收字符
MOV AH,14
INT 10H
POP AX
CMP AL,0DH ;接收到的字符若不是回車則;返回
JNZ WAIT1
MOV AL,0AH ;若是回車則回車換行
MOV BX,0
MOV AH,14H
INT 10H
JMP WAIT1
ERROR:
MOV DX,3F8H ;讀接收寄存器,清除錯誤字符
IN AL,DX
MOV AL,'?' ;顯示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年石墨及炭素制品項目發(fā)展計劃
- 2025版合同:技術服務合同(含技術培訓、技術中介)
- 旅游法律顧問服務功能
- 電子工廠監(jiān)理工程師招聘協議
- 購物中心物業(yè)競標咨詢協議
- 會計服務業(yè)機構裝飾施工合同
- 通信基站建設項目建造師招聘
- 臨時投資分析師聘用合同模板
- 軍事設施模板施工合同
- 2024年采購合同履約責任擔保
- 北師大版九下《直角三角形邊角關系》
- 中國音樂史與名作賞析智慧樹知到期末考試答案章節(jié)答案2024年山東師范大學
- 切斷機液壓系統(tǒng)畢業(yè)設計論文
- MOOC 人工智能導論-浙江工業(yè)大學 中國大學慕課答案
- 三位數除以兩位數-計算題-100題-豎式
- 圍手術期血糖管理指南
- 第1課 《蓼莪》 公開課一等獎創(chuàng)新教案(表格式)《大學語文(第四版)》(高職版)
- 項目式教學設計與實施
- 國際經濟學中文版(克魯格曼教材)課件
- 數字經濟職業(yè)生涯規(guī)劃
- 管理方案日間照料中心
評論
0/150
提交評論