西門子PLC自由口通訊_第1頁
西門子PLC自由口通訊_第2頁
西門子PLC自由口通訊_第3頁
西門子PLC自由口通訊_第4頁
西門子PLC自由口通訊_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1 .自由口通訊基本概念1.1 自由口通信概述1.2 自由口通信要點1.3 發送和接收指令2 .自由口通信使用指南2.1 通訊口初始化2.2 發送數據:2.3 接收數據2.4 自由口通信例程1 .自由口通訊基本概念1.1 自由口通信概述S7-200PLC的通訊口支持RS485接口標準。采用正負兩根信號線作為傳輸線路。工作模式采用串行半雙工形式,在任意時刻只允許由一方發送數據,另一方接收數據。數據傳輸采用異步方式,傳輸的單位是字符,收發雙方以預先約定的傳輸速率,在時鐘的作用下,傳送這個字符中的每一位。傳輸速率可以設置為1200、2400、4800、9600、19200、38400、57600、1

2、15200。字符幀格式為一個起始位、7或8個數據位、一個奇/偶校驗位或者無校驗位、一個停止位。字符傳輸從最低位開始,空閑線高電平、起始位低電平、停止位高電平。字符傳輸時間取決于波特率。數據發送可以是連續的也可以是斷續的。所謂連續的數據發送,是指在一個字符格式的停止位之后,立即發送下一個字符的起始位,之間沒有空閑線時間。而斷續的數據發送,是指當一個字符幀發送后,總線維持空閑的狀態,新字符起始位可以在任意時刻開始發送,即上一個字符的停止位和下一個字符的起始位之間有空閑線狀態。示例:用PLC連續的發送兩個字符(16#55和16#EE)(程序如圖3和圖4),通過示波器測量CPU通訊端口管腳3/8之間的

3、電壓,波形如下圖1.:xtm,!,a匚二start01110111Pslopidleid庵start10101010psiof>上.KX.I;zLJ“圖1.兩個字符(16#55和16#EE)的波形圖示例說明:16進制的16#55換算成2進制等于2#01010101,16進制的16#EE換算成2進制等于2#11101110。如圖所示,當數據線上沒有字符發送時總線處于空閑狀態(高電平),當PLC發送第一個字符16#55時,先發送該字符幀的起始位(低電平),再發送它的8個數據位,依次從數據位的最低位開始發送(分別為1、0、1、0、1、0、1、0),接著發送校驗位(高電平或低電平或無)和停止位(

4、高電平)。因為本例中PLC連續的發送兩個字符,所以第一個字符幀的停止位結束后便立即發送下一個字符幀的起始位,之間數據線沒有空閑狀態。假如PLC斷續的發送這兩個字符,那么當PLC發送完第一個字符幀的停止位后,數據線將維持一段時間空閑狀態,再發送下一個字符幀。字符傳輸的時間取決于波特率,如果設置波特率為9.6k,那么傳輸一個字符幀中的一位用時等于1/9600*1000000=104us,如果這個字符幀有11位,那么這個字符幀的傳輸時間等于11/9600*1000=1.145ms.自由口通信協議是什么?顧名思義,沒有什么標準的自由口協議。用戶可以自己規定協議。爭已知一個通信對象需要字符(字節)傳送格

5、式有兩個停止位,S7-200是否支持?字符格式是由最基礎的硬件(芯片)決定的;S7-200使用的芯片不支持上述格式。S7-200是否支持S7-200系統手冊上列明的通信波特率以外的其他特殊通信速率?通信速率是由最基礎的硬彳(芯片)決定的;S7-200使用的芯片不支持沒有列明在手冊上的通信速率。1.2 自由口通信要點應用自由口通信首先要把通信口定義為自由口模式,同時設置相應的通信波特率和上述通信格式。用戶程序通過特殊存儲器SMB30(對端口0)、SMB130(對端口1)控制通信口的工作模式。色CPU通信工作在自由口模式時,通信口就不支持其他通信協議(比如PPI),此通信不能再與編程軟件Micro

6、/WIN通信。CPU停止時,自由口不能工作,Micro/WIN就可以與CPU通信。通信口的工作模式,是可以在運行過程中由用戶程序重復定義的。如果調試時需要在自由口模式與PPI模式之間切換,可以使用SM0.7的狀態決定通信口的模式;而SM0.7的狀態反映的是CPU運行狀態開關的位置(在RUN時SM0.7="1",在STOP時SM0.7="0")自由口通信的核心指令是發送(XMT)和接收(RCV)指令。在自由口通信常用的中斷有"接收指令結束中斷"、"發送指令結束中斷",以及通信端口緩沖區接收中斷。與網絡讀寫指令(Net

7、R/NetW)類似,用戶程序不能直接控制通信芯片而必須通過操作系統。用戶程序使用通信數據緩沖區和特殊存儲器與操作系統交換相關的信息。XMT和RCV指令的數據緩沖區類似,起始字節為需要發送的或接收的字符個數,隨后是數據字節本身。如果接收的消息中包括了起始或結束字符,則它們也算數據字節。調用XMT和RCV指令時只需要指定通信口和數據緩沖區的起始字節地址。&XMT和RCV指令與NetW/NetR指令不同的是,它們與網絡上通信對象的"地址"無關,而僅對本地的通信端口操作。如果網絡上有多個設備,消息中必然包含地址信息;這些包含地址信息的消息才是XMT和RCV指令的處理對象。由

8、于S7-200的通信端口是半雙工RS-485芯片,XMT指令和RCV指令不能同時有效。1.3 發送和接收指令XMT(發送)指令的使用比較簡單。RCV(接收)指令所需要的控制稍多一些。RCV指令的基本工作過程為:1 .在邏輯條件滿足時,啟動(一次)RCV指令,進入接收等待狀態2 .監視通信端口,等待設置的消息起始條件滿足,然后進入消息接收狀態3 .如果滿足了設置的消息結束條件,則結束消息,然后退出接收狀態所以,RCV指令啟動后并不一定就接收消息,如果沒有讓它開始消息接收的條件,就一直處于等待接收的狀態;如果消息始終沒有開始或者結束,通信口就一直處于接收狀態。這時如果嘗試執行XMT指令,就不會發送

9、任何消息。所以確保不同時執行XMT和RCV非常重要,可以使用發送完成中斷和接收完成中斷功能,在中斷程序中啟動另一個指令。早在S7-200系統手冊中關于XMT和RCV指令的使用有一個例子。這個例子非常經典,強烈建議學習自由口通信時先做通這個例子。S7-200CPU提供了通信口字符接收中斷功能,通信口接收到字符時會產生一個中斷,接收到的字符暫存在特殊存儲器SMB2中。通信口Port0和Port1共用SMB2,但兩個口的字符接收中斷號不同。每接收到一個字符,就會產生一次中斷。對于連續發送消息,需要在中斷服務程序中將單個的字符排列到用戶規定的消息保存區域中。實現這個功能可能使用間接尋址比較好。對于高通

10、信速率來說,字符中斷接受方式需要中斷程序的執行速度足夠快。一般情況下,使用結束字符作為RCV指令的結束條件比較可靠。如果通信對象的消息幀中以一個不定的字符(字節)結束(如校驗碼等),就應當規定消息或字符超時作為結束RCV指令的條件。但是往往通信對象未必具有嚴格的協議規定、工作也未必可靠,這就可能造成RCV指令不能正常結束。這種情況下可以使用字符接收中斷功能。2.自由口通信使用指南2.1 通訊口初始化SMB30(對于端口0)和SMB130(對于端口1)被用于選擇波特率和校驗類型。SMB30和SMB130可讀可寫。見表1.簫口口穌口工描述SMB30的格式自由端口模式控制字節F0ppdbbbmmSM

11、30a和SM3D.1SML30.0f0SM130.1mn;協議選擇00二點對總接口林議PW從站模式I口】=自由兩口協議10=叩1/1主站模式11二保留C魏省保留為陰/從站橫式)注意:當送抵代用(pp.主站時),S7-200將成為網絡上的主站,允許行KFTR和卅ETW指今,在PP1模式下楚照2到7位.劉英.2到SM30.4SML3Q.2?lJSM130,4的。:白由端口波特率000=26400將LOO=工80潴持GO1=>200破特1W=力£出波特。10=*600波特1工0二115二8誠特ClL=4.500波特111=37,8。派特叩口口3出每個字符的教揮位c二擔個字有m立1三捋

12、個字符7位EM306和SMi20.6fnbMUU.FFP奇偶一堆選擇00二無聲偶穆玲1。二無音偶和幼C1二偶校驗:奇校險表1.特殊存儲器字節SMB30/SMB130示例:定義端口0為自由口模式,9600波特率,8位數據位,偶校驗,程序如下圖2.:SMU.11IMOV_EEKENOINOUTM112tt130100zl-SMD30圖2.通訊口初始化程序2.2 發送數據:發送指令XMT能夠發送一個字節或多個字節的緩沖區,最多為255個。使用邊沿觸發發送緩沖區格式:第一個字節為字符個數,其后為發送的信息字符。示例:如果PLC連續發送2個字符16#55和16#EE,程序如下圖3.:XMTEMCVB2a

13、o.BLVB2(W2"發送2個字符VB20L16#55/發送第一個字符:FB2Q2L6#EE"發送第二個字符圖3.發送指令程序示例說明:PLC通過數據塊寫入數據。XMT指令中TBL緩沖區首地址VB200寫入發送字符的個數,VB201和VB202分別寫入發送字符。通訊口波形圖如圖1.判斷發送完成的方法方法一:發送完成中斷。通過連接中斷服務程序到發送結束事件上,在發送完緩沖區中的最后一個字符時,則會產生一個中斷。對通訊口0為中斷事件9,對通訊口1為中斷事件26。連接中斷程序到中斷事件示例如下圖4.:ATCIIEMMimtoirmhinr1IHJLhit,EMITATCHEhl&

14、#163;N0圖4.建立發送完成中斷的程序方法二:發送空閑位。當port0發送空閑時,SM4.5=1o當portl發送空閑時,SM4.6=1.示例:如果PLC斷續的發送2個字符16#55和16#EE.方法一:利用發送完成中斷,在主程序中建立中斷事件,執行XMT發送16#55,發送完成后,進入發送完成中斷程序中,執行XMT發送16#EE。波形圖如圖5.方法二:利用發送空閑位。當執行XMT發送完16#55后,利用SM4.5/4.6的上升沿(確保發送的字符幀發送完成),往XMT的TBL緩沖區寫入新字符16#EE,并再次觸發發送。波形圖如圖6.圖6.字符波形圖SM4.5/4.6的使用受程序掃描周期的兩

15、種方法均斷續發送字符,即兩個字符之間有空閑狀態。注意:由于影響,編程中推薦使用發送完成中斷。Break斷點Break狀態:持續以當前波特率傳輸16位數據,且一直維持"0"狀態。產生方式:把字符數設置為0并執行XMT指令,可以產生一個Break狀態。Break用途:可以作為接收的起始條件。示例:通過XMT指令發送一個Break斷點。偶校驗,8個數據位,9.6K。程序如下圖7.:1培1倜福瞌葉題瞰分修后出口闞351網堵2XMTENENOVB2000-7BLFORT圖7.發送一個斷點的程序Break狀態的波形圖如下圖8.1.67ms=16ra6O0M0O0圖9.一個斷點和字符0的

16、波形圖2.3接收數據接收緩沖區格式:第一個字節表示接收的字符個數,其后為接收的信息字符RCV使能會將TBL緩沖區中的字符個數清零。示例:如果發送方給PLC發送2個字符16#55和16#EE,PLC的接收程序如下圖10.:1.145ms11WOMOOO接收指令RCV能夠接收一個字節或多個字節的緩沖區,最多為255個。使用邊沿觸發或第一個掃描周期V&2C4TBL如果通過接收方為上位機或者S7-200PLC,那么它們接收到的字符為16#00.那么通過發送一個Break斷點接收到的16#00與發送一個字符幀16#00有什么不同呢?Break狀態是傳輸16位數據一直為0。而發送一個字符16#00

17、(幀格式為1個起始位,8個數據位,偶校驗和停止位)則傳輸11位該字符幀。如下圖9.16#00圖8.一個斷點波形圖9600,1000break私址格式當前宿IVE200無符號2VB201十六進制1部55十六進制16#EE圖10.接收指令程序示例說明:RCV指令TBL緩沖區的首地址VB200保存的是接收字符個數,其后是信息字符。判斷接收完成的方法:方法一:接收完成中斷。通過連接中斷服務程序到接收信息完成事件上,在接收完緩沖區中的最后一個字符時,則會產生一個中斷。對端口0為中斷事件23,對端口1為中斷事件24。連接中斷程序到中斷事件示例如下圖11.:圖11.建立接收完成中斷的程序方法二:接收狀態字節

18、。SMB86(port0),SMB186(port1)當接收狀態字節為0,表示接收正在進行。當接收狀態字節不為0,表示接收指令未被激活或者已經被中止。見下表2.端口。端口1貓述5MBB6iMSlSS接收消息狀志字節*5型LSBnreDQIcpn:1=揍收消息功能袖終止:用戶發送禁止命令,門1=接收消息均篦說終止:輸入參射錯誤或毛失啟動或結束條件。凹1=接收到結束字符.t;1=揍收消息工能袱終止:定時器時司三用完,c;i=接收消息功能被終止:實現最大字符計數”p:1=接收洎息工;能希緒止:奇偶慚錯俁*表2.接收狀態字節SMB86(port0)/SMB186(port1)接收指令起始和結束條件接收

19、指令使用接收信息控制字節(SMB87或SMB187)中的位來定義信息起始和結束條件。必須為接收信息功能操作定義一個起始條件和一個結束條件(最大字符數)。如下圖12.SMEJB7SMB87接收消息控制字R即:。二拽收料就罰刪費幸什結束條件1與元詐接收第恩功腱句次挨有RCV指勺時性畜底.1H金止接收消11依SG0二忽略SMBG&uESMEnea1=使用SMB864SMBlfiG的航帶溶離蠟UH.6C0E略SMB89或SMBim起始條件1使MSMD69喊SMB169的血檢測里治忍I想AWW”或SMW1901佗用SMW9OMWMW19O伸網枸呼至國技金即0h定時叁足字符閥定時叁.丁'-

20、定林需站前思定時器,/to。=.B*S"W92戒與MW1921=為SMW92點SMW192史日俘嗎M網越生四蹙七埋收bk。也嘛等開農父t=Hf串斷條科f)*Tili方制的JF蜿圖12.接收控制字節SMB87(port0)/SMB187(port1)接收指令起始條件接收指令支持幾種起始條件:1.空閑線檢測定義:在傳輸線上一段安靜或空閑的時間。當接收指令執行時,接收信息對空閑線時間進行檢測。在空閑線時間到之前接收的字符,被忽略且按照SMW90/190給定的時間重新啟動空閑線定時器。在空閑線時間到之后,接收的字符存入信息緩沖區。空閑時間的典型值為在指定波特率下傳輸3個字符的時間。示例:PL

21、C接收的起始條件定義為空閑線檢測(設置SMB87中的il=1,sc=0,bk=0,空閑線超時時間SMW90=10ms);接收的結束條件定義為最大字符個數SMB94=10。程序如下圖13.Noa圖13.空閑線檢測程序示例說明:(紫色部分:)當啟動接收指令后,PLC對空閑線時間進行檢測,如果在SMW90中設定的空閑線時間到之前,已經接收到了字符1,則字符1被忽略,并且按照SMW90中設定的時間重新啟動空閑定時器。(橙色部分:)同樣的,如果在SMW90中設定的空閑線時間到之前,已經接收到了字符2,則字符2也被忽略且空閑線定時器重新啟動o(綠色部分:)如果在SMW90中設定的空閑線時間到之后,接收到字

22、符3,則字符3作為第一個信息字2.起始字符檢測當接收到SMB88/188指定起始字符后,接收信息功能將起始字符作為信息的第一個字符存入接收緩沖區。起始字符之前的字符被忽略,起始字符和其后的所有字符存入接收緩沖區。示例:PLC接收的起始條件定義為起始字符檢測(設置SMB87中的il=0,sc=1,bk=0,起始字符SMB88=16#55);接收的結束條件定義為最大字符個數SMB94=4。程序如下圖15.Mil:HQY日EHEMO】卜二二,網W6鮑圖15.起始字符檢測程序示例說明:PLC接收總線上傳來的一串字符,16#01、16#02、16#03、16#55、16#AA、16#BB、16#CC,當

23、PLC檢測到起始字符16#55后,開始接收并將16#55作為第一個信息字符存入接收緩沖區,起始字符之前的3個字符被忽略。如下圖16.圖16.用起始字符檢測來啟動接收指令3 .空閑線和起始字符接收指令執行時,先檢測空閑線條件,在空閑線條件滿足后,檢測起始字符。如果接收的字符不是起始字符,則重新檢測空閑線條件。在空閑線條件滿足和接收到起始字符之前接收的字符被忽略。起始字符和字符串一起存入緩沖區。適用于通訊連接線上有多個設備的情況。示例:PLC接收的起始條件定義為空閑線和起始字符(設置SMB87中的il=1,sc=1,bk=0,空閑線檢測時間SMW90=10ms,起始字符SMB88=16#55),結

24、束條件為最大字符個數2.示例說明:PLC接收總線上傳來的數據,分幾種情況:當空閑線條件不滿足,即使空閑后出現起始字符,PLC也不開始接收。如圖17.人配6;二進制|羽匚巾L'JNCI圖17.只有當PLC檢測空閑線條件滿足后,接收到起始字符,PLC才啟動接收,在空閑線條件滿足和接收到起當PLC先檢測到起始字符,再檢測到空閑線條件滿足,PLC不啟動接收。或者當PLC檢測到空閑線條件VB200。如圖19.始字符之前接收的字符被忽略。起始字符和字符串一起存入緩沖區,緩沖區首地址)Cile>SMW90Idle+SC地址格式I當前一VB2O0無艇2十六進制16幃VB2O2+六進制1WEE|V

25、B303Sfi制16艷0'VB2O4卜八進制164tOOSMB86二進制ZftOOOOOW圖19.用空閑線和起始字符來啟動接收指令4 .斷點檢測大于一個完整字符傳輸時間的一段時間內,接收數據一直為0.在斷點之前接收的字符被忽略,在斷點之后接收的字符存入信息緩沖區。示例:PLC接收的起始條件定義為斷點檢測(設置SMB87中的il=0,sc=0,bk=1),結束條件為最大字符個數8。示例說明:PLC接收總線上傳來的一串字符和斷點,依次為16#0016#00(連續的兩個字符間沒有空閑卜16#0016#00(斷續的兩個字符間有空閑)、第一個Break斷點、16#55、第二個Break斷點、16

26、#EE。當PLC檢測到第一個斷點狀態后,啟動接收,接收的字符存入信息緩沖區(第二個斷點),第一個斷點之前的字符被忽略。接收緩沖區起始地址為VB200o如下圖20.恕略她扯格式當前值VB2Citl無符號3VE201十六班制1ES55VE2O2十六進制IGttOOVE2O3+疝前不彈T-+六講制IGttOOVB205十派制lEttOOVE206比大進制16400VE2C7+大進制16tt00十六進制花期0三進制MO.O位而圖20.用斷點檢測來啟動接收指令5 .斷點和起始字符在斷點條件滿足后,檢測起始字符。在斷點條件滿足后,如果收到除起始字符外的任意字符,重新檢測新的斷點。在滿足斷點和起始字符之前接

27、收的字符將被忽略,起始字符和字符串一起存入信息緩沖區。示例:PLC接收的起始條件定義為斷點和起始字符(設置il=0,sc=1,bk=1,起始字符SMB88=16#55)。結束條件為最大字符個數8.示例說明:PLC接收總線上傳來的一串字符和斷點,依次為16#55、break、16#AA、16#55、break、16#55、16#EE、16#FF.分幾種情況理解:當PLC先檢測到起始字符再檢測到斷點,PLC不啟動接收。(SC+BK)PLC不啟動接收。(BK+Char+SC)當PLC檢測到斷點后,接收到除起始字符外的任意字符,只有當PLC檢測到斷電后,緊接著檢測到起始字符,才啟動接收并且將起始字符和

28、字符串一同存入信息緩沖區,斷點和起始字符之前接收的字符將被忽略。(BK+SC)如圖21.存入tiLifTer忽略地址1格式當前值VB200無符身3VB201十六進制16胱5V6202十六進制ISttEEVE203十六逸制lettFF+六進制isttooVB205十六進制16期0VB206十六速制lettoo+六進制lettooVE20S十六進制IGitOO二進制第0000.0000MO.O位2m圖21.用斷點和起始字符檢測來啟動接收指令6 .任意字符。任意字符接收是空閑線檢測的特例O設置方式:il=1,sc=0,bk=0,空閑線時間SMW90/190=0。接收指令一執行,立即接收任意字符,并把

29、所有接收字符存入信息緩沖區。允許使用信息定時器監控接收是否超時。當接收指令執行時,信息定時器啟動,如果沒有其他終止條件滿足,信息定時器超時會接收接收功能。接收指令結束條件接收指令支持以下一種或幾種組合的結束條件:1 .結束字符檢測在起始條件之后,接收指令檢查接收的所有字符,如果檢測到結束字符,則將其存入緩沖區,結束接收。示例:PLC接收的結束條件定義為結束字符檢測(設置SMB87中的ec=1,定義結束字符SMB89=16#55),接收起始條件定義為起始字符檢測(起始字符16#AA)。示例說明:PLC接收總線上傳來的一串字符,依次為16#AA、16#BB、16#CC、16#55、16#EE、16

30、#FF。當PLC檢測到起始字符16#AA后,啟動接收,當檢測到結束字符16#55后,結束接收并將接收的所有字符存入信息緩沖區。如下圖22.存入buffer忽略地址格式當前值無符號4W201十六進制IGitAAVE2O2+大進制十六進制IGttCCVB2O4十方碗1七F2制16WOO5MB86二進制InOijOJM0.0位2fi1收到結束字符圖22.用結束字符檢測來結束接收指令2 .字符間隔定時器字符間隔時間定義:從一個字符的結尾(停止位)到下一個字符的結尾(停止位)之間的時間接收到字符后,字符間隔定時器重新啟動。兩個字符之間的間隔時間超過SMW92/192則結束接收。示例:PLC接收的結束條件

31、定義為字符間隔定時器(設置SMB87中的c/m=0,tmr=1,信息超時時間SMW92),接收起始條件定義為起始字符檢測。示例說明:PLC接收總線上傳來的一串字符,當PLC滿足接收條件后啟動接收,接收完一個字符的停止位后,重新啟動字符間隔定時器,如果檢測到下一個字符幀停止位時SMW92時間未到,則重新啟動字符3 .信息定時器SMW92/192指定的時間,信息定時器時間到結當接收啟動條件一滿足,信息定時器就啟動,當時間超過束接收。示例:PLC接收的結束條件定義為信息定時器(設置SMB87中的c/m=1,tmr=1,信息超時時間SMW92),接收起始條件定義為起始字符檢測。示例說明:PLC接收總線

32、上傳來的一串字符,當PLC滿足接收條件后啟動接收,信息定時器啟動,當SMW92時間到時,結束接收。如圖24.信息的起始I月動信息定時器結束操收,信息定時器時間到圖24.用信息定時器來結束接收指令4 .最大字符計數當接收字符個數達到或超過最大字符個數(SMB94/SMB194),接收功能結束。由于接收指令需要知道接收信息的最大長度,以保證信息緩沖區之后的數據不被覆蓋,所以即使不被用作接收結束條件,也必須指定最大字符個數。如果沒有指定最大字符個數,則SM86.6/186.6=1(輸入參數錯誤或丟失啟動或結束條件)5 .校驗結束當接收字符的同時出現硬件信號校驗錯誤時,接收指令會自動結束。只有在SMB

33、30/130中使能校驗位,才有可能出現校驗錯誤。沒有辦法禁止此功能。6 .用戶結束。通過程序結束接收功能:將SM87.7或SM187.7置為0,且需邊沿觸發RCV接收指令。以上內容是通過發送和接收指令實現S7-200PLC的自由口通訊。另外,S7-200PLC還提供了通訊口字符接收中斷功能。見下文。如何人為結束RCV接收狀態?接收指令控制字節(SMB87/SMB187)的en位可以用來允許/禁止接收狀態。可以設置SM87.7/SM187.7為"0",然后對此端口執行RCV指令,即可結束RCV指令。字符中斷使用字符中斷方式接收數據,接收每個字符時都會產生中斷。在執行與接收字符

34、事件相連的中斷程序前,接收的字符存入SMB2寄存器中,校驗狀態存入SM3.0oSMB2、SM3.0都是只讀的。Port0/Port1共用SMB2/SMB3。Port0對應于中斷事件8。Port1對應于中斷事件25。SMB2使用條件:RCV指令不使能,通訊端口為自由口模式,且建立中斷事件8/25。字符中斷使用方法:以端口0接收字符為例:如圖25.H1'MAINAA肘匚0/傷.允許用戶中新傳連接中斷事件已到中斷服務程序川.初始化自由口J/海口州域特率”選擇日位數據位"選擇偶校驗圖25.字符中斷程序當CPU通過端口0接收到一個字符后,會將該字符存入接收字符緩沖區SMB2,然后進入相

35、連接的中斷程序中。注意:對于這段程序,如果在中斷程序中不作任何編程,那么當CPU接收n個字符時,中斷程序將被執行n次,SMB2寄存器存儲接收到的最后一個字符。如上位機通過串口調試軟件給CPU發送3個字符16#AA、16#BB和16#CC,如下圖26.發送的字符/數據故M亡交送|手動發送|圖26.通過串口調試軟件發送字符那么與接收字符事件相連的中斷程序將被執行3次,SMB2中只能保存最后一個接收到的字符16#CC。如下圖27.歸Mb2干天-麗谷江|圖27.狀態表監控SMB2用SMB接收多個字符,如何編程?由于SMB2只能存儲一個字符(一個字節),如果要想接受多個字符,則應當在CPU接收下一個字符

36、之SMB2中存儲的字符移出來,以便下一次接收字符。以一個例程說明:前,在中斷程序中通過指針編程將如圖28.圖28.接收多個字符的程序住的"1將¥5口口匚用配址社吃朝塔針VDZ1中fn洲始化姑口口心違括中斷雷牛呼鈣中航版克卷存例先許用戶中斷加刊忻程序加將SMB2中存儲的數值復制到指轉VDW旨高的存楮區里6熱指針VDOiflh指向下一T字中VD0作為地址指針指向VB100,當端口0接收到第一個字符,將第一個字符存入SMB2,進入接收中斷,將SMB2中的字符復制到指針VD0指向的地址字節VB100中,指針地址加1,VD0指向下一個字節VB101o當接收第二個字符,將字符存入SMB2,進入接收中斷,將SMB2中的第二個字符復制到指針VD0指向的地址字節VB101中,指針地址加1,VD0指向下一個字節VB102。當接收第三個字符時以此類推。另外,如果需要接

溫馨提示

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

評論

0/150

提交評論