XMT指令用于發(fā)送存放在數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)。參數(shù)PORT定義了所用通訊口。參數(shù)TBL定義了數(shù)據(jù)緩沖區(qū)的起始地址,緩沖區(qū)的第一個字節(jié)中定義了本次將要發(fā)送的字節(jié)數(shù)(1--255),后邊依次存放著待發(fā)送的數(shù)據(jù)字節(jié)。若發(fā)送字節(jié)數(shù)被設(shè)置為0,則XMT指令不執(zhí)行任何操作。
RCV指令用于接收數(shù)據(jù)并將接收到的數(shù)據(jù)存放在數(shù)據(jù)緩沖區(qū)中。參數(shù)PORT定義了所用通訊口。參數(shù)TBL定義了數(shù)據(jù)緩沖區(qū)的起始地址,緩沖區(qū)的第一個字節(jié)中存放著本次接收到的字節(jié)數(shù),后邊依次存放著接收到的有效數(shù)據(jù)字節(jié)。
注意, TBL參數(shù)為一個可變長度的塊內(nèi)存參數(shù), 整個塊內(nèi)存都不可以落在非法內(nèi)存區(qū)域, 否則結(jié)果不可預(yù)期。
注意, 調(diào)用RCV指令后,如果串口上沒有收到任何字節(jié), 只會產(chǎn)生60秒的系統(tǒng)超時并結(jié)束一次RCV接收。用戶設(shè)置的超時結(jié)束, 只有在收到至少一個字節(jié)的情況下才會觸發(fā)。
Kinco-K2/K5在SM區(qū)中為自由通訊提供了多個狀態(tài)寄存器和控制寄存器。在編寫通訊程序時,用戶必須對這些控制寄存器進行設(shè)置。另外,在通訊過程中CPU會自動對通訊狀態(tài)進行檢測,并將檢測結(jié)果寫入相關(guān)的狀態(tài)寄存器,用戶可以讀取這些狀態(tài)信息并在程序中進行相應(yīng)的處理。
在自由通訊中,另外還有一個默認(rèn)的系統(tǒng)接收超時,時間為60秒,此超時值的作用如下:在執(zhí)行RCV指令后,若在此超時時間內(nèi)串口上沒有收到任何數(shù)據(jù),則CPU將立刻終止接收并退出RCV指令;另外,CPU在進入有效接收狀態(tài)后(即接收到SMB88中定義的起始字符或者經(jīng)過了SMW90中定義的接收準(zhǔn)備時間后),將優(yōu)先使用用戶在SMW92中定義的接收字符超時值,若用戶沒有定義,則用該系統(tǒng)接收超時值來決定是否終止接收。
關(guān)于通訊中斷
Kinco-K2/K5提供了多種中斷用于自由通訊,通訊中斷具有最高的中斷優(yōu)先級。用戶可以使用控制位SM87.1來禁止或允許CPU產(chǎn)生通訊中斷。若將SM87.1設(shè)置為1,則允許生成通訊中斷:CPU在發(fā)送完緩沖區(qū)中的最后一個字符時就會自動產(chǎn)生一個發(fā)送完成中斷(對于PORT 0中斷事件號為30,對于PORT 1中斷事件號為32);CPU在退出接收后(無論是正常還是異常退出)就會自動產(chǎn)生一個接收完成中斷(對于PORT 0中斷事件號為29,對于PORT 1中斷事件號為31)。
下面將舉例說明自由通訊的使用。
在示例中,CPU將接收一串?dāng)?shù)據(jù),以回車符作為接收結(jié)束字符。若接收正常完成,則把接收到的數(shù)據(jù)又發(fā)送回去并再次啟動接收,若是異常退出接收狀態(tài)(比如通訊錯誤、接收超時等),則忽略接收到的數(shù)據(jù)并再次啟動接收。